はじめに
Nextandではmidiファイルを入力すると、その楽譜を表示し、さらにその難易度を自由に変更できるScore ChangerというWebアプリの作成に取り組みました。Webページ上に楽譜を表示するということで、そのための仕組みが必要だったのですが、今回我々はPaul RosenさんとGregory Dykeさんらが作っているABCJSというライブラリに着目しました。このライブラリはABC記譜法のデータを用意さえすれば、それのいい感じの楽譜を表示してくれます。今回我々のアプリではmidiファイルを対象としていたので、midiファイルをABC記譜法に変換する処理を実装する必要がありました。
midi to ABCの課題
midiもABCも音を記号化して表したものなので、実装当初は簡単に変換できるものだと考えていました。MuseScoreでもmidi2abcの変換コードが搭載されており、ある程度のmidiファイルに対しては上手く動作していました。しかし様々な種類のmidiファイルを入力していくうちに、そのままでは上手くいかないケースがあることがわかりました。
具体的には、以下の4つの問題が実装時の大きな壁になりました。
1. midiファイルのトラック数とチャネル数の問題
2. midiファイルによっては、noteの長さが正確でない問題
3. 単純なABC記譜法では記述できない楽譜がある問題
4. なっている音と楽譜上の表記は1対1対応しない問題
次回以降の記事でこれら1.~4.の問題について、問題の詳細とその対処法を述べていきたいと思います。