7/10日記 朝3時頃開始。 ===== プログラム ===== * ライブコーディングツールの進捗。 - ファイル読み込み(最初は同期、可能なら非同期読み込み)\\ 完了。ファイルのセーブ状況検知・UI改善予定 - Miniscriptプログラムのコンパイル\\ 完了 - 組込み関数の追加\\ 実装は済んでいるが細かい制御やデバッグが未済、本日完了 - コンパイルしたデータとサウンドの譜面を紐づける実装\\ 未済、本日完了 - ADSR、フィルタの実装、加えてエフェクトの実装\\ 未済 ---- * ライブコーディングツール、ようやく動くものになった。 * https://x.com/__machia__/status/1810877830684889194 * 今年後半がとても忙しくてくたばりそうになってる可能性が高いので、動くものは今のうちに作っておきたかった。 * 動くものがあれば、あとはイベント用に作るとか完成までもってく等選択肢は存在するので。 ===== プログラム2 ===== * ライブコーディングツールの進捗。 * 変数ウォッチ関数の仕様整理。 * 何回もコンパイルすることを求めるので、そのたびにデータが空になることを考慮すると、状態を積み重ねるのではなく一度リセットすると考える方が自然なので、毎回フラグを開放して、関数が出るたびに再生時にチェックを入れることにした。 ---- * 再生部分の機能追加。譜面が動的に登録されていたら再生する処理を追加。 * ただ、波形レンダリングの処理を直接触れないと特定タイミングで周波数変更というのができないので、オシレータ再生の処理に対し譜面情報を見れるように処理を追加する必要がある。 * そのために「周波数の変更処理」「周波数変更に伴うパラメータ調整処理」を追加した上で、オシレータ部分に情報を追加する形になった。 * これだともうオシレータ処理に対しアンプ+フィルタ処理突っ込むことになりそうだがそれでいいのだろうか・・・と疑問はある。 * むしろバイト単位のアクセスにたどり着いたらオシレータ・アンプ・フィルタにアクセスするほうがいいのではと思った。 * 責任分界点に明確にするための副作用って感じがする。 * 今のところの実装だと汎用的に書き直す時間はなさそう。 ---- * 値のメモリの持ち方も注意しないと前の情報が残ってしまうので、関数はstaticにするものの、関数内で値を格納する変数はstaticにしないほうが安全。 * どうしても情報を長期間持ちたいなら関数の外側でstaticにして持たせる必要がある。 * つまり、何回も関数を実行しようとしたときに、同じデータを持ち続けているかという話になるため注意。 * そうさせないためにはローカル関数で確保する等が必要(なときがある) * 本来ならクラスに分けて管理のほうがいいと思うけど。 ---- * MIDI出力についてどうしようという問題が残っている。 * 全部シンセを作ってから作曲というのも時間がかかるので、MIDI出力だけ行ってLive側で音色作るというのは便利になるはず。 * 内部ルーティングについてはloopMidiを導入済みなのでこれは可能。 * タイマー制御のコールバック関数じゃないとMIDI出力を正常に行えないのでは?と思い始めてる。 * ただどうもコールバックの仕組み自体ない模様。 * https://suzulang.com/glfw3-timer/ * これ・・・自分でThread作ってそれをぶん回す運用じゃないと駄目かな。 * 再生管理用の変数はオーディオ側と共用できるので、これを使って再生ってする方がよさそう。 * ループでよくね?と考えて、MIDIについてはThreadループ上で時間計測するやり方にしてみた * https://daeudaeu.com/separately-multi-thread/ ===== その他 ===== * 今年の夏対策のひとつに、エアコンのフィルタ掃除した。 * 驚くほどに効果が上がってる。涼しい。