7/14日記 ===== プログラム ===== * 進捗 - ファイル読み込み(最初は同期、可能なら非同期読み込み)\\ ファイルのセーブ状況検知実装予定、MIDI設定を改造予定 - 組込み関数の追加\\ オーディオ・MIDI・スピード変更・MMLを実装。 - コンパイルしたデータとサウンドの譜面を紐づける実装\\ Note表現を改造中 - ADSR、フィルタの実装、加えてエフェクトの実装\\ まだ ---- * 停止時にMIDIのオールサウンドオフを仕込んでおいた。 * NoteOnのままだとピタッと止まらないので。 * また停止問題とは別に、一部の演奏についてあきらかに表現が違うものが出てきた。 * 同じ譜面を再生してみてオーディオ側は問題なかったので、MIDIの実装独自の問題と切り分けた。 * 結果、情報の参照がおかしかったので修正。一部譜面の参照先が違うところだったという割と情けないバグ。 ---- * MIDI出力Noteの表現増加、まずはVelocityから入れた。 * 以前と違って、0を入れると標準的な数値に変換することにした。 * この影響でVelocityについては0と100以上は入れられないことになる。 * 最初は100%をマックスとしてVelocity128の倍率を出力する考えていたんだけど、数値が直接でてこなくて分かりにくいので、まずはVelocityを直接出す形で対応している。 * いっその事小数点3桁までをVelocityにしてしまうことで対応としてみた。 * 他の項目も同じように小数点として格納を考えたけど、直接書くのに困難しか待っていないのと、桁数が多くなった場合、あくまでOS上で認識できる値までは情報を取れる形になるため、あまりに桁数が多くてもOSによっては処理できないことになる。(Miniscript上は結構な桁数まで計算できるけど、コンピュータ上に値を持ってくるとOSで認識できる形に丸められる * よって、まずは必要な値のみ入力に対応できるようにする。 * Note、Velocityは必須として、他の表現は順次追加予定。 ---- * UIの色を変更する * dear imgui上でSetNextWindowBgAlphaっていう関数を見つけてしまったので、適当にそれ使ってしまう。 * まずは実装だけしてしまって、色調調整は後で行う。 ---- * 試しにRe:code上でのみ有効なMMLパーサをざっくりと作ってみた。30分くらいで実装できた。 * 再帰下降構文解析ってやつになると思う。トップから1文字ずつ読み取っていく形式ね。 * 順番としては以下。 - 文字列を一度読み込む - 譜面に関係ない文字列(パラメータが主)は除外して譜面分だけ組み立てる - 組み立てた譜面を1文字ずつ読んで、リスト形式として作り直す - 戻り値(組み立てた譜面リスト)を返す * パーサーについては以前から資料読み込んだり簡易的なLispの実装してみたおかげでそれほど怖くなかった。 * 問題はMiniscriptの仕様に即したクラスの使い方なので毎度の如く資料がないこと。 * よって今回も既存の実装から有効そうな情報を引っ張ってきてなんとかした。 * まず簡素な機能のパーサを作ったのでここからネストの深いListを作れるように改造していく予定。 ===== ゲーム開発 ===== * ようやく再開。 * あと1ヶ月で何を用意するかというところだけど、以下の予定。 - 体験版(Steamにアップ予定) - 難易度3個(ほぼ用意済み) - 音楽2個*2個(半分用意済み) - ストーリー用のグラフィック - メニュー画面 * さすがに体が1個しかないからツール作ってるとゲーム開発できねえ。