結論
スピーカにつながっていると思っていたポートが、中継機(MIDIスルー)だった。
TiMidity++を起動し、出力機器を作成したら再生できた。
↓TiMidity++を起動
環境
- OS
- Ubuntu 22.04 x86_64
事象
MIDIを勉強したくて、pythonのmidoライブラリを使ってみました。
チュートリアル通り実施するも、スピーカから音が出ず、困っていました。
スクリプトはエラーなく動いているので、音声出力まわりで調査していきました。
midoライブラリを使用し、MIDIポートを一覧を出力してみました。
$ python
Python 3.10.6 (main, Mar 10 2023, 10:55:28) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mido
>>> print(mido.get_output_names())
['Midi Through:Midi Through Port-0 14:0', 'Midi Through:Midi Through Port-0 14:0']
MIDIのド初心者なので、ポートは何でもいいかなと思っていましたが、ここがだめだったみたいです。
どのOSにも共通して、MIDIをPCのスピーカから再生するためには、仮想的なMIDI出力ポートを用意しなければなりませんでした。
実施事項
Timidity++の公式サイトの手順通り、インストールしました。
その後、下記のコマンドでtimidity++を実行しました。
$ timidity -iA
再度MIDIポートを確認し、増えていることを確認
$ python
Python 3.10.6 (main, Mar 10 2023, 10:55:28) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mido
>>> print(mido.get_output_names())
['Midi Through:Midi Through Port-0 14:0', 'Midi Through:Midi Through Port-0 14:0', 'TiMidity:TiMidity port 0 129:0', 'TiMidity:TiMidity port 1 129:1', 'TiMidity:TiMidity port 2 129:2', 'TiMidity:TiMidity port 3 129:3']
上記の設定後に、midiのチュートリアルで、TiMidityのポートを選択し、スクリプトを動かしたところ、きちんと再生されました。
ちなみに、aconnectguiを使うとGUIでMIDIポートを確認、操作できます。
スクショは、同ソフトを使用し、作成しました。
PythonでMIDIを再生すると、RtMidiOut ClientがTiMidityの仮想ポートに出力されていることを確認しました。
参考資料
とても感謝しています。
MIDI 仮想キーボードと物理キーボードを Ubuntu で試す
MACの場合はこちらの対応が必要そうです。
Outputting MIDI sound from Python Mido library on Mac