ALSAサウンドシステム上のMIDI信号をキャプチャする(前半)
ALSAの「alsa-utils」パッケージに含まれるarecordmidiというコマンド*1を用いると、任意のALSA MIDIポートから出力されるMIDIシーケンスを標準MIDIファイル(SMF:Standard MIDI File)形式で書き出すことができる。
ポートの指定に関する注意点
arecordmidiが指定するMIDIポートは「出力(読み込み)」のポートであり、MIDIプレーヤやシーケンスソフトなどが指定するような「入力(書き込み)」ポートではない。
MIDI音源が提供しているのは後者の「入力」ポートのみで、(ハードウェア音源で入力/出力の両方に同じ名前のポートが存在する場合*2もあるが)出力の方のポートに接続するものではない。
そこで、アプリケーションと実際の出力先デバイスとの間にMIDI信号を通すための仮想デバイスを挟んで、そこを対象としてキャプチャを行うことになる。
MIDI信号を通す方法
Midi Through(snd-seq-dummy)を用いる場合
カーネルモジュール「snd-seq-dummy」が読み込まれているときに「Midi Through」という名前の仮想MIDIデバイスが利用できる。これは入出力それぞれにポートを提供し、入力のポートから受け取ったMIDI信号をそのまま出力のポートから出す働きをする。
MIDIアプリケーションの出力先をこの仮想デバイスの入力(書き込み)ポートに指定し、arecordmidiからこの仮想デバイスの出力(読み込み)ポートを指定する。
Midi Throughのポートと出力先MIDIデバイスとを接続するのにはaconnectコマンドを用いるかQjackCtlの「Connections」ダイアログ(オーディオの接続状況を参照/操作するダイアログ)にある「ALSA」タブ内で入出力ポートそれぞれを選択して「Connect」を押すかする(左が出力ポート、右が入力ポートとなり、左から右への流れとなる)。
ASeqViewを用いる場合
「ASeqViewのMandriva Linux向けRPMパッケージと使い方」で扱ったASeqViewにも入力されたMIDI信号を出力する機能があるため、これを用いて同じようにアプリケーションからの出力をASeqViewへ設定し、かつASeqViewから実際の出力デバイスに接続するようにする。
「ASeqViewのMandriva Linux向けRPMパッケージと使い方」も参照。
キャプチャ
--port/-pオプションで対象の出力ポート(「[デバイス]:[ポート]」形式)を指定し、更に出力ファイルの場所を引数にしてarecordmidiを実行する。
$ arecordmidi --port=[対象ポート] ([その他オプション...]) [出力ファイル].mid (止めたいところでCtrl+C)
Ctrl+Cで止めたところまでのシーケンスが標準MIDIファイルに書き出される。
(「ALSAサウンドシステム上のMIDI信号をキャプチャする(後半)」に続く)
関連記事:
使用したバージョン:
- ASeqView 0.2.8
- alsa-utils 1.0.21