この HOWTO における設定では、 ALSA のライブラリとドライバモジュールを用います。なぜなら、ALSA は Linux で本格的にオーディオや MIDI を使う上での標準的な手段 (あるいはそうなるべき) だからです。 このチュートリアルでは、ALSA の 0.9.0 ブランチの使用を仮定します。 でも、仮想 MIDI のモジュールは ALSA 0.5.x にもあるので、 以下に述べるほとんどは ALSA 0.5.x でも同様に適応できるでしょう。 OSS/Free (2.5.x 以前のカーネルにあるサウンドモジュール)や OSS/Linux サウンドアーキテクチャでは v_midi モジュールが使えますが、 これは本文書の範疇ではありません。
ALSA の仮想 MIDI カードを使うには、snd-card-virmidi モジュールが存在して いなくてはなりません。最新バージョンの ALSA (や 2.5.x 開発版カーネル) では snd-card-virmidi は '-card' 接中辞(ミドルフィックス)が取り除かれ、snd-virmidi に名前を変えました。このモジュールをビルドしたことを確認してください。 実際に使っているカードのモジュールをビルドするように ALSA を configure しただけでは、おそらくこのモジュールはビルドされていないでしょう。
仮想 MIDI ポートを利用可能にするには、virmidi モジュールをロード しなくてはなりません。手動で試験的にロードできます:
$ modprobe snd-virmidi snd_index=1 |
訳注: alsa-driver 0.9.0rc4 以降、snd_index オプションは index に 名称変更されました。最新の alsa をお使いの場合は、index=1 と してください。
snd_index の値を、空いているカード index のひとつ目になるように設定します。 (カードがひとつだけなら、そのカードがすでに index 0 なので、 virmidi は index=1 に設定する) でも、仮想 MIDI カードが必要になった時に、自動的に設定がなされるように モジュールを設定すると、より便利です。そのためには、/etc/modules.conf (ディストリビューションによって、別の場所にあることもあります) の ALSA に関する箇所に、次の項目を追加します:
# OSS の /dev/sequencer と /dev/music (別名 /dev/sequencer2) # をサポートするように設定する # 岩井隆さんが、これらのサービスをひとつ目のカード、 # すなわち card 0 以外にエイリアスする必要はないと # アドバイスしてくれました alias sound-service-0-1 snd-seq-oss alias sound-service-0-8 snd-seq-oss # カード 1 (ふたつ目のカード) を仮想 MIDI カードに設定する alias sound-slot-1 snd-card-1 alias snd-card-1 snd-virmidi |
ここでは、お使いのサウンドカードのハードウェアがひとつと仮定し、 仮想 MIDI カードを index 1 であるふたつ目のカードとして設定しました (これはとても有用だと思います)。 もしあなたが筆者のようにふたつ目のサウンドカードをすでに お持ちなら、以下を読んで上記設定を変更してください:
# カード 2 (三つ目のカード) を仮想 MIDI カードに設定する alias sound-slot-2 snd-card-2 alias snd-card-2 snd-virmidi |
もっと多くのカードをお使いでも、以上の説明を応用すれば何をやればいいかはもう お分かりですよね…
設定したら、ALSA サウンドシステムを再起動する必要があります。 その後、仮想 MIDI カードが /proc/asound/cards で確認できるはずです:
$ cat /proc/asound/cards 0 [card0 ]: ICE1712 - M Audio Audiophile 24/96 M Audio Audiophile 24/96 at 0xb800, irq 5 1 [card1 ]: EMU10K1 - Sound Blaster Live! Sound Blaster Live! at 0xc800, irq 11 2 [card2 ]: VirMIDI - VirMIDI Virtual MIDI Card 1 |
筆者のマシンの例では、VirMIDI カードが index 2 である三つ目のカードに なっています。 この構成は、/proc/asound/devices [MIDI デバイスのみ表示される]では、次の raw MIDI デバイス群として 反映されます。
$ cat /proc/asound/devices 8: [0- 0]: raw midi 41: [1- 1]: raw midi 42: [1- 2]: raw midi 75: [2- 3]: raw midi 74: [2- 2]: raw midi 73: [2- 1]: raw midi 72: [2- 0]: raw midi |
筆者の場合は、'2-' ではじまるデバイスが仮想 MIDI デバイスです。 お使いのシステムにあるハードウェアのサウンドカードがひとつだけなら、 '1-' ではじまるデバイスが仮想 MIDI デバイスになるでしょう。
ALSA に含まれている aconnect ユーティリティを使うと、 もっと分かりやすい一覧表が見られます。aconnect は 以後様々な用途で必要になるでしょう。-o (もしくは -lo) オプション付きで 実行すると、MIDI 出力が可能な MIDI デバイスを表示します。 また、-i オプション付きで実行すると、MIDI 入力が可能な MIDI デバイスを表示します:
$ aconnect -o [...] client 80: 'Virtual Raw MIDI 2-0' [type=kernel] 0 'VirMIDI 2-0 ' client 81: 'Virtual Raw MIDI 2-1' [type=kernel] 0 'VirMIDI 2-1 ' client 82: 'Virtual Raw MIDI 2-2' [type=kernel] 0 'VirMIDI 2-2 ' client 83: 'Virtual Raw MIDI 2-3' [type=kernel] 0 'VirMIDI 2-3 ' $ aconnect -i [...] client 80: 'Virtual Raw MIDI 2-0' [type=kernel] 0 'VirMIDI 2-0 ' client 81: 'Virtual Raw MIDI 2-1' [type=kernel] 0 'VirMIDI 2-1 ' client 82: 'Virtual Raw MIDI 2-2' [type=kernel] 0 'VirMIDI 2-2 ' client 83: 'Virtual Raw MIDI 2-3' [type=kernel] 0 'VirMIDI 2-3 ' |
表示されたデバイス群は、/proc/asound/dev ディレクトリツリーにある、 ALSA が提供する OSS 互換の raw MIDI デバイス群と一致します。 一例を示すと、/proc/asound/dev/midiC2D0 は、index 2 の 仮想 MIDI カードにあるひとつ目の MIDI デバイスです。 これは aconnect では Virtual Raw MIDI 2-0 と表示されます。 Debian では、これらのデバイスファイルは /dev/snd/ ディレクトリにも あり、旧来の OSS デバイスの場所である /dev/midiXX へ内部的に リンクされています。 シンボリックリンクを張った /dev/midiXX から ALSA の raw MIDI ポートにアクセスできるのを確認するには:
$ ln -s /dev/snd/midiC2D0 /dev/midi20 $ ln -s /dev/snd/midiC2D1 /dev/midi21 [...] |
でも、これは必要不可欠ではありません。お父さんのマシンでやってはいけませんよ!
訳注: 最近の alsa では /proc/asound/dev が廃止され、/dev/snd 以下が 正式のデバイスファイルになりました。
ここまでで仮想 MIDI カードの作成と設定が完了しましたので、 他の MIDI デバイスと全く同様に、お使いのアプリケーションで使用することができます。 好みのシーケンサやシンセサイザのアプリケーションのきちんとした設定箇所に、 OSS 互換なら /dev/midi20 のような形式、ALSA MIDI ポートなら 80:0 のような 形式で、必要なデバイス名を記入するだけです。