JACK Audio Connection KitとQjackCtlにおけるMIDIドライバについて
0.109系より古いJACKではALSAのMIDIドライバを使用できない
JACK Audio Connection Kitを制御するGUIのQjackCtlの設定ダイアログには「MIDI Driver」という項目があり、有効にする場合には「seq」と「raw」を選択するようになっている(「none」で無効)。しかし、JACK Audio Connection Kitのバージョンによっては、これを付けると
Unknownage with option 'X'
となってjackdデーモンが起動できない。
このオプションが付けられる(=ALSAのMIDIドライバが使用できる)バージョンは0.109系から。0.103.0までのバージョンでは使えない。
使用できるバージョンでは、ヘルプに-Xオプションの説明が表示される。
$ jackd --version jackd version 0.109.2 tmpdir /dev/shm protocol 22 $ jackd -d alsa --help Parameters for driver 'alsa' (all parameters are optional): -C, --capture Provide capture ports. Optionally set device (default: none) (中略) -O, --output-latency Extra output latency (frames) (default: 0) -X, --midi ALSA MIDI driver (seq|raw) (default: none)
「MIDI Driver」の指定を「seq」にすると、全てのALSA MIDI(alsaseq)ポートがJACK MIDIポートとして使用できるようになり、「raw」の場合は/dev/snd/midiC[カード番号]D[デバイス番号]のRaw MIDIデバイスファイル経由でアクセスする。しかし、どちらの場合も、出力ポートは「system:midi_capture_[番号]」、入力ポートは「system:midi_playback_[番号]」が並ぶだけで、(オーディオの「system*1:playback_[番号]」*2と違い)どれがどのデバイスやアプリケーションの何番目のポートかというのは分かりにくい。
rawモードで動かすと、何故かポート数が大変なことになってしまった。
これでは「system」のどこに接続すれば目的のポートにつながるのか分からない。
alsaseq2jackmidi.c - ALSA MIDIからJACK MIDIへの橋渡し
ALSAとJACKの2系統のMIDIポートが存在するため、0.103系のJACKを使用している場合は、JACK MIDIポートのみしか提供しないアプリケーションを使用する際に(ALSA向けアプリケーションから)ポートが接続できないことがある。*3その場合、
http://linux-sound.org/misc/alsaseq2jackmidi.c
が役に立つ。下はインストール例。ディストリによってはALSAとJACKの開発ファイル(Debian/Ubuntuの場合「libasound2-dev」と「libjack-dev」)が必要。
$ gcc -Wall -o alsaseq2jackmidi alsaseq2jackmidi.c -ljack -lasound $ sudo install -s alsaseq2jackmidi /usr/local/bin
このプログラムを実行すると、ALSA MIDIデバイスとしての入力ポートとJACK MIDIデバイスとしての出力ポートが現れ、手動でJACK MIDI側の出力ポートからアプリケーションのJACK MIDI(入力)ポートに接続を行うことで、アプリケーションのJACK MIDIポートにalsaseqのポートから接続することができる。
ALSA MIDI側(ALSA側のポートは接続していない状態)
JACK MIDI側(zynjackuに接続している)
上の状態で、aplaymidiを使用してzynjackuにMIDIファイルを演奏させるには
$ aplaymidi -p 130:0 [MIDIファイル]
を実行する(ALSAのポート番号は状態に合わせる・上の例では「130:0」)。
使用したバージョン:
- JACK Audio Connection Kit 0.103.0, 0.109.2
- QjackCtl 0.3.2