はじめに
Magentaを使ってピアノ演奏の音声ファイル(wavやmp3)からmidiファイルに変換する方法を調べたので、
備忘録も兼ねて記録しておきます。
※MagentaはGoogleが開発しているアート関連の機械学習プロジェクトです。
方法
Magentaに含まれる「Onsets and Frames」という機能を使います。
Onsets and Frames: Dual-Objective Piano Transcription
具体的な方法としては、3種類の選択肢があります。
- webアプリ
- Colab版
- ローカル環境で実行
以降、それぞれの使い方を記載します。
webアプリ
一番お手軽な方法。
こちらのページにアクセスし、目的の音声ファイルをアップロードするだけでmidiファイルに変換してくれます。
PIANO SCRIBE
Colab版
以下のColabページでコードを見ながら変換を実行できます。
Onsets and Frames.ipynb
ピアノ曲の場合、Select Modelの所で"MAESTRO (Piano)"を選択します。
※自分が試した時は、wavファイルはOKでしたが、mp3では変換できないようでした…。
ローカル環境で実行
複数ファイルを一括で変換したりしたい場合はこれがいいと思います。
ここでは、ubuntu20.04(GPU有)環境で確認した手順を記録します。
まず、magentaをインストール。
sudo apt-get install build-essential libasound2-dev libjack-dev portaudio19-dev
conda create -n magenta python=3.7
conda activate magenta
git clone https://github.com/tensorflow/magenta.git
cd magenta
pip install -e .
次に、以下からMAESTROのcheckpointをダウンロードして適当な場所に保存します。
(github) onsets_frames_transcription
あとは、次のコマンドでcheckpointのパスと目的の音声ファイルを指定すると変換ができます。
MODEL_DIR=<path to directory containing checkpoint>
onsets_frames_transcription_transcribe \
--model_dir="${CHECKPOINT_DIR}" <piano_recording1.wav, piano_recording2.wav, ...>
以上です。