3/4日記 ===== ゲーム開発 ===== * PVを修正してた。 * ゴールを決めた。 * 以前からどのくらいの規模になるかはある程度決めていたけど、それをPVに乗せた。 * 断片的な情報からまとまった情報にするというPVとは別の作り方を後半にねじ込んでる。 ===== プログラミング(思考順) ===== * ツールの実装どうするか悩んでた。 * 最初はRustをつかえば万事解決ではと思っていたけど、そうでもないことがわかってきた。 * 元々「Miniscriptにジャグ配列が機能としてあった」から音楽用の言語を実装したわけで、Rustで実装された他の言語見る限り別の機能で代替しないとダメそう。 * RustとC組み合わせることもできるけど、C-Rustのインターフェースを書く必要があるのと、アプリケーションとのバインドどうするの?って話になって、時間がかかりそう。 * なので、最終手段として「C言語で全部書く」しかないな・・・という結論になりつつある。この選択肢は選びたくなかったけど仕方ない。 * アプリケーションの形は、簡単なものにするため、「1個のテキストファイルを監視し続けて、タイムスタンプが更新されたら読み込んで処理する」みたいなのでいいかと考え始める。最近そういうアプリばかり弄ってライブコーディングしていたのもある。 * ファイルパスはGUIから設定できるようにもしておこう。まぁこれは引数を受け入れる形にすれば問題なかろうと。 ---- * ということで、C言語で必要なライブラリや実装を情報収集。 * タイムスタンプについては以下。 * https://learn.microsoft.com/ja-jp/windows/win32/api/fileapi/nf-fileapi-getfiletime * ついでにRustでも調べてた * https://runebook.dev/ja/docs/rust/std/fs/struct.filetimes * UIは困ったらdear imgui。 * https://github.com/ocornut/imgui * 実装を適当にしてみた。 * 利用するウィンドウ管理ライブラリはGLFW。余計な機能は不要という位置づけ。 * https://www.glfw.org/ * 参考資料は色々だけど、割とわかりやすかったのがこれ。 * https://github.com/tn-mai/OpenGL3D2021/blob/master/Doc/OpenGL3D_2021_14.md * あとはリサイズに制御かけるとかのオプションの資料。 * https://www.glfw.org/docs/latest/window_guide.html * ここが英訳してた * https://dolphilia.com/translation/GLFW/Guides/window_guide * 読み込みは毎度おなじみのMiniscript。 * https://miniscript.org/ * 組み込もうとしたら外部参照周りのエラー。LNK2019という忌々しいやつ。 * 実装がないと起きるらしい。 * GLFWは問題ないはずなのにどうしてだと悩んでいたけど、Miniscriptは全部ソースの形で組み込むので、オブジェクトファイルの生成が必要とのこと。 * なので、VisualStudio内のプロジェクトにぶちこまないとビルドが正常に行えないみたい。 * 実は初めてこのことを知った。中身なにやってるかわからないとこの回答にたどり着きにくいわな。 * サウンドはlibsoundio。 * http://libsound.io/ * ただこれは2.0への移行がどうも芳しく無く、自分でビルドの必要があるとのこと。MinGWに別途ツールを導入の上利用する必要がある。 * 出来ないことはないけど、とりあえず前バージョンのバイナリがあるのでそれを利用する。 * これでサウンド出力周りは楽に整備できた。 ---- * 最小限にしていけばすぐできそうな気がする。 * あとサウンドのライブラリって結構少ないので調べてみる。 * https://sjoerdvankreel.github.io/xt-audio/ * https://www.portaudio.com/ * https://www.music.mcgill.ca/~gary/rtaudio/ * MiniAudioはよさそう。 * https://github.com/mackron/miniaudio * PythonでPortAudioを使ってるんだってさ * https://people.csail.mit.edu/hubert/pyaudio/ * Rustだけどこういうのもある * https://github.com/RustAudio/cpal * https://rust.audio/ ===== 音楽 ===== * AbletonLive組み込みの音源のうちAnalogという楽器がある。 * 物理モデリング音源で有名なAASとAbletonが組んでDAW組み込み楽器として発表されてる。 * https://www.ableton.com/ja/packs/analog/ * で、このAnalogを使ったとあるパッチを弄っていたら、なかなかおもしろい挙動してることに気づいた。 * https://www.ableton.com/ja/packs/entangled-species/ * Keystrikeってパッチ。 * どうも、ユニゾンモードを切り替えてバラバラ度合いを特定の数値にすると、中東・南米っぽい?フレーズになるというもの。 * ピッチが小数で違う形なので、それがうまくスケール上の音になってるんだと思う。 * ユニゾンモードONでピッチが同じだとそのまま同じ音が重なるけど、発音タイミングが規則的にバラバラなのでこれを利用\\ スタッカート風にサステインを短めな音にした後、ピッチをバラバラにしてこのアルペジオを作ってるみたい。 * よー考えつくもんだ・・・