=======================================================================
                    ALSAシーケンサインタフェース
            Copyright (c) 2000  岩井 隆 <tiwai@suse.de>
=======================================================================

説明
====

この文書は，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
