7/15日記 ===== プログラム ===== * 進捗 - ファイル読み込み(最初は同期、可能なら非同期読み込み)\\ ファイルのセーブ状況検知実装予定、MIDI設定を改造予定 - 組込み関数の追加\\ オーディオ・MIDI・スピード変更・MMLを実装。 - コンパイルしたデータとサウンドの譜面を紐づける実装\\ Note表現を改造中 - ADSR、フィルタの実装、加えてエフェクトの実装\\ まだ ---- * Re:Code用MMLについては、オクターブ指定やVelocity指定について実装済み。これも簡単に書けた。 * あとはジャグ配列への対応だけど、まず1直線のListに対し処理を行う前提にして、[]が出てきた時点で別にリストを作成してデータを作成、終わったら元のリストに挿入、という形にする。 * 再帰関数でつくるのが良さそう。 ---- * タイムスタンプ取得処理を書いた。これでどうにかなる。 * あくまでタイムスタンプなので嘘書けてしまう可能性はあるけど、それは自身がこまるだけという認識なので、まずは同じPCで複数回アクセスすることを見込んで更新かけるもの。 * 以前他資料を参考に書いたはずだったけど、どうもフォルダの更新日付を見るものだったらしく、それならと自分で書き直した。 * ファイルのハンドルをCreateFile関数で取得、GetFileTimeでFILETIME形式でタイムスタンプを取得できるので、これをSYSTEMTIMEに変換した上でハンドルクローズとした。割と簡単。 ---- * 上記を利用してファイル監視処理を実装済み。 * ただ、動きがあやしい。具体的には以下の内容。 - 状況によってはしばらくファイルが書き込み状態になりタイムスタンプが連続で更新されっぱなしになる。 - 更新時のタイムスタンプがうまく反映されない * 別の方法を検討する方が良いのかしら。 * もしくは更新タイミングをループの終端にする等のほうが良いのかなと。 * ファイルや読み込み状況に応じて、ずっと更新し続けるケースもあるとのことで、一度更新が終わったらしばらく更新し続けるケースへの対応も必要みたい。具体的にはしばらく更新してる場合は触らずに止まったら処理開始とする、みたいなの。 * そもそも更新もループの最後におこなうとか毎回行うとかの調整を行うのもいいかもしれない。 * 今のところループをトリガーとする・ファイル書き込みが停止したら検知扱いにする・常駐アプリとしてショートカットで切り替え可能とする、というところかな。 ---- * サンプリング再生も導入を検討。 * まず同じIFにWAVデータを書き込めるように準備してみる。 * 次にtinywavで読み込み。 * ピッチシフトやタイムストレッチも導入検討。 * https://ackiesound.ifdef.jp/tech/timestretch.html * ただまずは読み込んだデータを再生するというのが大前提にあるのでそれだけ行う予定。 ===== その他 ===== * 明日から会社なのでそんなに無理しない1日にした。 * すごいゆっくりしてた。