試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

JACK Audio Connection KitとQjackCtlにおけるMIDIドライバについて

0.109系より古いJACKではALSAMIDIドライバを使用できない

JACK Audio Connection Kitを制御するGUIQjackCtlの設定ダイアログには「MIDI Driver」という項目があり、有効にする場合には「seq」と「raw」を選択するようになっている(「none」で無効)。しかし、JACK Audio Connection Kitのバージョンによっては、これを付けると

Unknownage with option 'X'

となってjackdデーモンが起動できない。
このオプションが付けられる(=ALSAMIDIドライバが使用できる)バージョンは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を使用してzynjackuMIDIファイルを演奏させるには

$ aplaymidi -p 130:0 [MIDIファイル]

を実行する(ALSAのポート番号は状態に合わせる・上の例では「130:0」)。

使用したバージョン:

  • JACK Audio Connection Kit 0.103.0, 0.109.2
  • QjackCtl 0.3.2

*1:以前のバージョンでは「alsa_pcm」などになっていたが、0.109系では「system」になっている

*2:サウンドカードのチャンネル番号に対応している」と分かる

*3:0.103系でもJACK MIDI自体は使えるため、JACK MIDIポートを提供するアプリケーション間のポート接続は可能