目次

7/4日記

プログラム

  1. ファイル読み込み(最初は同期、可能なら非同期読み込み)
    まずは入力ストリームで読み込みを実装済み。
  2. Miniscriptプログラムのコンパイル
    Interpreterを定義済み。読み込み準備もできた。
  3. 組込み関数の追加
  4. コンパイルしたデータとサウンドの譜面を紐づける実装
  5. ADSR、フィルタの実装、加えてエフェクトの実装

プログラム2

  1. スクリプト言語で使うString型とC++のstring型が別物。内容に少し相違があるため違いを理解するのに時間がかかった。言語に紐づいているため、下手に除去もできないけど、かと言って普通のstring型と使い勝手が違うので、どうしても両方使う必要がでてきてしまった。
  2. スクリプト言語のログ出力のタイミングがおかしく、Printf等の関数を実行しないとログ出力がされないという困った仕様。このため、「デバッガのフックが特定の処理を実行していないとできない」という謎の挙動してくれやがった。なのでコンソール出力は見えないようにして裏で出力するようにした。処理としてはデバイス取得も絡んで重いんだけど、連続で実行するわけでもないので影響ないと思ってる。余裕があれば削除したい。別の方法でストリームを流す処理ができればいいんだが。
  3. これはどちらのstring型もそうなんだけど、clearやTrimを行っても即座にデータが消えるわけではない(ウィークポインタとかつかってんだろか)ので、staticでもたせてるstringクラスを呼び出そうとしてうまく更新がされないことが発覚したため、メモリ確保消去を自分で行うことにした。ポインタだけ最初確保してnew/delete使う・できる限り全削除等、データが跡形も残らないようにして対応した。List<string>はclear()でうまく削除してくれたが、string単体だと削除してくれないケースもある模様。なので前述のnew/deleteで対応した。stringの仕様よくわからん。
  4. 間違えてスクリプトのソースコードをList<string>で何重にも読み込んでいた。おかげで処理が多重に実行されてログがおかしい出力されて、原因究明に時間を取られた。

プログラム3

プログラム参考資料