Omnizartは、台湾の国家研究機関であるMCT Labが作成した自動採譜ライブラリです。楽器やボーカルの音程をMIDIとして出力できます。
既存の数理モデルでの解釈ではなく、機械学習モデルを使って解析するため精度が非常に良いのが特徴です。
インストール
公式のQuick Startを参考に、LinuxもしくはWSL環境で実行してください。MacやWindowsのみの環境もしくはTPUを使いたい場合はGoogle Colabでも実行できます。
# 前提ライブラリ
sudo apt update
sudo apt-get install libsndfile-dev fluidsynth ffmpeg portaudio19-dev
# Python環境セットアップ
python3 -m venv omnizart-test
source omnizart-test/bin/activate
# 依存関係インストール
pip install wheel Cython numpy scipy mido
# madmomがビルドエラーになることがあるので分けてインストール
pip install madmom==0.16.1 --no-build-isolation
# Omnizartインストール
pip install omnizart --no-build-isolation
# モデルをダウンロード
omnizart download-checkpoints
実行
コード起こし
music_test.wavに音楽ファイルを置きます。通常の環境ではCPUを利用するため少し時間がかかります。
omnizart chord transcribe music_test.wav
成功すると同じディレクトリに、タイミングとコードが書いてある拡張子なしのCSVと、MIDIファイルが出力されます。
ここで出力されたMIDIファイルは、Windowsのメディアプレーヤーでは再生できないのでDominoなどを使って読み込んでください。
楽譜起こし
以下のコマンドで実行可能です。こちらはMIDIのみの出力です。
omnizart music transcribe music_test.wav
精度
もともとクラシック用なので、ベートーヴェンのピアノソナタ第8番のようなピアノだけの音声は得意です。
特に楽譜起こしは非常に精度が良く、そのまま聞けるレベルで生成できます。
J-POPではあまり精度は良くないものの、メロディとボーカルはある程度抽出できます。ディストーションギターが多いと精度が落ちがちです。ボーカルの音程モード(vocal-contour)では正確に出してくれます(ディストーションギターなどが多い所は検知しませんが)。
矩形波のみのゲーム音楽では、音程がはっきりしているにもかかわらず意外にも結果はよくありませんでした。中間の偽の音や倍音を拾ってしまいます。データセットが少ないからでしょうか?
ジャズは全くダメで、AIではないフーリエ変換と同じぐらいの精度です。
一方コード起こしはピアノでも精度が怪しく、J-POPではほぼ掴めず、ジャズでは完全に破綻(メジャーやマイナーと誤検知)してしまいます。