======================================================================= ALSAシーケンサインタフェース Copyright (c) 2000 岩井 隆 ======================================================================= 説明 ==== この文書は,Advanced Linux Sound Architecture(ALSA)シーケンサインタフェ ースに関するものです。ALSAシーケンサインタフェースは,ALSAシーケンサの コアとtimidity間で通信を行います。インタフェースはシーケンサからイベン トを受け取り,(ほぼ)リアル・タイムで演奏します。 本モードにおいて,TiMidityはALSA上のソフトウェアMIDIシンセサイザエンジ ンとして,純粋にソフトウェアリアルタイムMIDIレンダとして動作します。 すべてのスケジューリングは,ALSAシーケンサのコアによって行われるので, 本インタフェースはスケジューリングルーチンがありません。 ALSAシーケンサインタフェースを起動するには,以下のようにtimidityを起動 してください: % timidity -iA -B2,8 -Os -q0/0 -k0 フラグメントサイズは調整可能です。より少ない数ほどリアルタイムレスポン スが良くなります。そして,timidityは新しく作成された新ポート番号(下記の 128:0および128:1)を表示します。 --------------------------------------- % timidity -iA -B2,8 -Os -q0/0 -k0 TiMidity starting in ALSA server mode Opening sequencer port 128:0 128:1 --------------------------------------- これらのポートは他のシーケンサポートと接続するできます。例えば,pmidiを 経由してMIDIファイルを演奏する(なんて過剰な:-)には, % pmidi -p128:0 foo.mid MIDIファイルが2つのポートを必要とする場合は,このように接続します: % pmidi -p128:0,128:1 bar.mid 外部のMIDIキーボードから接続するには,こんな具合になります: % aconnect 64:0 128:0 インストール ============ --enable-alsaseqと--enable-audio=alsaオプションをつけてconfigureしてく ださい。もちろん,他のオーディオデバイスやインタフェースも追加して選べ ます。 より良いリアルタイムレスポンスを得るには,timidityをrootとして実行すべ きです(以下を参照)。set-UID rootは,これを実現する最も簡単な方法です。 インストール済みtimidityのバイナリのオーナとパーミッションを,以下のよ うに変更すれば良いでしょう: # chown root /usr/local/bin/timidity # chmod 4755 /usr/local/bin/timidity これによって,セキュリティ・ホールを引き起こすかも知れないことに気をつ けてください! リアルタイムレスポンス ====================== インタフェースは,プロセススケジューリングをSCHED_FIFOにして,できるだ け高い優先度にリセットすることを試みます。SCHED_FIFOされたプログラムは, より良いリアルタイムレスポンスを呈します。例えば,SCHED_FIFOを持たない timidityは,/procがアクセスされるたびに著しい途切れを引き起こすかも知れ ません。 この機能を有効にするには,timidityをrootで起動するか,set-uid rootでイ ンストールすべきです。 インスツルメントのロード ======================== timidityは,プログラムチェンジのイベントを受信するたびに,インスツルメ ントを動的にロードします。ときにこれは,再生中のバッファアンダーランに よって,途切れを引き起こします。さらに,すべての予約が切断されると, timidityはロードしたインスツルメントをリセットします。したがって,再生 終了後もロードしたインスツルメントをすべてキープするには,aconnectを経 由してtimidityポートにダミーポート(例えばmidi入力ポート)を接続しておく 必要があります: % aconnect 64:0 128:0 再生のリセット ============== timidityにSIGHUPシグナルを送ることにより,再生中にすべての音を止めるこ とができます。接続はリセット後も維持されますが,イベントはもはや処理さ れません。音を再び有効にするには,ポートを再接続しなければなりません。 視覚化 ====== ちょっぴりファンシーでビジュアルな出力がお好みであれば,拙作の小さなプ ログラム,aseqviewをお試しください。 % aseqview -p2 & そして,(aseqviewによって129:0と129:1が作成されたと仮定して)timidityポ ートに2つのポートを接続してください: % aconnect 129:0 128:0 % aconnect 129:1 128:1 出力は,128:0,1の代わりに129:0,1に転送されることになります。 % pmidi -p129:0,129:1 foo.mid OSSとの互換性 ============= ALSAシーケンサ上のOSS MIDIエミュレーション経由でtimidityにアクセスする こともできます。アクセスされるデバイス番号のチェックするため, /proc/asound/seq/ossを見てください。 --------------------------------------- % cat /proc/asound/seq/oss OSS sequencer emulation version 0.1.8 ALSA client number 63 ALSA receiver port 0 ... midi 1: [TiMidity port 0] ALSA port 128:0 capability write / opened none midi 2: [TiMidity port 1] ALSA port 128:1 capability write / opened none --------------------------------------- 上記の場合だと,MIDIデバイス1と2がtimidityに割り当てられています。さあ, playmidiで演奏してみましょう: % playmidi -e -D1 foo.mid バグ ==== うん,うん,あるに違いない。。 リソース ======== - ALSAホームページ http://www.alsa-project.org - 私のALSAハックページ(aseqviewを含む) http://members.tripod.de/iwai/alsa.html