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を丸めて対応