LoginSignup
1
0

pythonでMIDIが再生できないときにやったこと

Last updated at Posted at 2023-06-04

結論

スピーカにつながっていると思っていたポートが、中継機(MIDIスルー)だった。
TiMidity++を起動し、出力機器を作成したら再生できた。
image.png
↓TiMidity++を起動
image.png

環境

  • 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ポートを確認、操作できます。
スクショは、同ソフトを使用し、作成しました。
image.png
PythonでMIDIを再生すると、RtMidiOut ClientがTiMidityの仮想ポートに出力されていることを確認しました。

参考資料

とても感謝しています。
MIDI 仮想キーボードと物理キーボードを Ubuntu で試す

MACの場合はこちらの対応が必要そうです。
Outputting MIDI sound from Python Mido library on Mac

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0