【Python】MIDIをwavファイルに変換

MIDIをwavファイルに変換するためにFluidSynthというライブラリを使った。結構めんどくさかった。
手順はほとんど下記のとおり。
参考:(Windows) pythonでMIDIからWAVを出力 - Qiita
Windowsだからかもしれないけど、参考ページにあるようにライブラリのファイルを修正しないといけなかった。

vcpkgのインストール

  1. ダウンロードする。https://github.com/Microsoft/vcpkg.git
  2. 解凍する。
  3. 解凍したフォルダに移動して下記を実行。
cd vcpkg
.\bootstrap-vcpkg.bat
.\vcpkg integrate install #管理者権限が要求されるので許可する
※下記コマンドの前にVisual Studioに言語パック(英語)をインストール
.\vcpkg install sdl2 curl
# 不要かもしれないけど一応下記コマンド。
.\vcpkg integrate powershell


fluidsynthをインストール

  1. ダウンロードする。https://github.com/FluidSynth/fluidsynth
  2. 解凍する。
  3. 解凍したフォルダに移動して下記を実行。
cd path/to/fluidsynth-2.0.5
path/to/vcpkg install fluidsynth:x64-windows
# 上記コマンドでインストールされるので、下記は不要
# path/to/vcpkg install glib:x64-windows



pyfluidsynthをインストール

  1. pip install pyfluidsynth
  2. path\to\Anaconda3\Lib\site-packages\fluidsynth.pyを修正する。 参考ページの方に従ってファイルを修正。

#変更前
# lib = find_library('fluidsynth') or \
#     find_library('libfluidsynth') or \
#     find_library('libfluidsynth-1')
#変更後
lib = find_library('fluidsynth') or \
find_library('libfluidsynth') or \
find_library('libfluidsynth-2')
以下の変数定義をコメントアウト
fluid_synth_get_channel_info 
fluid_synth_set_reverb_full 
fluid_synth_set_chorus_full 
fluid_synth_get_chorus_speed_Hz 
fluid_synth_get_chorus_depth_ms 
fluid_synth_set_midi_router 

3. ビルドしたfluidsynthのパスを上記ファイルの先頭に追加。

improt sys
sys.path.append("path\\to\\vcpkg\\installed\\x64-windows\\bin") 
#バックスラッシュを使うときは二つずつにしないといけない。エスケープ文字になっちゃうから。

確認

import fluidsynthができればOK