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

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

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

*1:MIDIキーボードのような入力を録音して書き出すツール

*2:例:SC-8820の「Part A」や「Part B」