midiと歌詞からmusicxmlを生成してNEUTRINOに渡したい(2)

前回の続き。
自分のための備忘録でしかない。

曲の速さに対応した

BPM=120の表示が!
雑なプルリクで恥ずかしい限りですが…。

midiでは曲の速さは Microseconds Per Quater-note(MPQ、四分音符当たりのマイクロ秒) で得られます。
BPMに変換してテンプレートに吐き出しました。

休符に対応した

midiには休符という概念がないのでちょっと苦労した。

音符を並べて隙間を休符で詰め込みました。

そのためにはまずは音符の長さを知る必要があります。

midiの最小単位は tick なのですが、 tick に単位はありません。
midiのデータによって、4分音符を 480 tick で表したり、960 tick で表したりします。

4分音符を 480 tick で表す例を考えると…
60BPM(4分音符が1分に60回)では4分音符は1秒なので、480 tick は 1秒になります。

このサイトが図があってとてもわかりやすいです。ありがとうございます。

音符の種別を判断できるようになりました。

休符が表現できました。しかしNUETRINO曰く、1小節の音符が多すぎるとのエラー。

よろしい、ならばこうだ…。これもだめ。

というわけで小節の概念を取り入れる羽目になりました。

本日の成果

しまうまたべたいカノン。音、高すぎました。
これの生成に7.5分かかった。

ちょっと低めに。

TODO

  • 音が高すぎる、歌詞の数があっていない、トラックが複数などの警告を取得したい
  • Support Kanji lyric
  • Call NEUTRINO
  • Support GUI
  • Support CUI
  • 異常系: クォンタイズされていないmidiを丸めて対応