#freeze
TITLE:ALSA の設定ファイル .asoundrc の解説(和訳)
[[原文:http://www.alsa-project.org/alsa-doc/doc-php/asoundrc.php?company=Generic&card=Generic&chip=Generic&module=Generic]]
#contents

*なぜ asoundrc? [#j13e3f46]
なぜ asoundrc が必要なのでしょうか?

.asoundrc も asound.conf も ALSA が適切に動作するために必要なわけではありません。
多くのアプリケーションはそれらがなくても動作するでしょう。
それらは、ルーティングやサンプルレート変換のような特別な機能を alsa-lib レイヤを通して許可するために利用されます。

*.asoundrc ファイル [#x9cdca9d]
このファイルは、あなたにカード/デバイスのさらに先進的な制御を可能にしてくれます。
.asoundrc ファイルは、あなたのシステムで利用可能な様々なカードの定義から構成されます。
このファイルは alsa-lib の pcm プラグインにアクセスさせてくれます。
これらのおかげで、あなたのカードをこのファイルに結びつけたり、マルチチャンネルカードのマルチ i/o にアクセスできます。

*.asoundrc はどこに? [#yc64812e]
asoundrc ファイルは通常、ユーザのホームディレクトリ
 $HOME/.asoundrc
にインストールされ、
 /usr/share/alsa/alsa.conf
から呼び出されます。
システム全体で利用する設定ファイルとして
 /etc/asound.conf
をインストールすることも可能です。
alsa アプリケーションが開始されると、両方の設定ファイルが読み込まれます。
次は最も基本的な定義です。

*デフォルトプラグイン [#g32048fb]
あなたのホーム and/or ルートディレクトリに .asoundrc ファイルを作成してください。
 vi /home/xxx/.asoundrc
このファイルに次のものをコピーアンドペーストして保存します。
 pcm.!default {
 type hw
 card 0
 }
 
 ctl.!default {
 type hw
 card 0
 }
キーワード default は ALSA lib api で定義され、常に hw:0,0 (デフォルトサウンドカードのデフォルトデバイス) にアクセスします。
Specifying the !default name supercedes the one defined in the ALSA lib api.

これであなたはテストできます:
 aplay -D default test.wav

*PCM デバイスのネーミング [#k471c1bc]
通常の asoundrc は 'PCM hw type' で始まります。
このおかげで、ALSA アプリケーションは与えられた名前によって仮想サウンドカード(プラグインまたはスレーブ)を開始できます。
これが無い場合、hw:0,0 または default のような名前でサウンドカード/デバイスにアクセスしなければなりません。
例えば:
 aplay -D hw:0,0 test.wav
または ecasound を用いて
 ecasound -i test.wav -o alsa,hw:0,0
hw: の後の数字はサウンドカードナンバーとデバイスナンバーをあらわしています。
サウンド "cards" はよくサウンド "devices" と呼ばれるため混乱するかもしれません。
しかし、ハードウェアのある特定の塊を制御する特定のドライバを持つという意味でそれらは "card" なのです。
また、それらは
 /proc/asound/cards
であらわされているインデックスに対応しています。

~省略~

*コントロールデバイス [#v75a507f]
ひとつのカードに対するコントロールデバイスとは、プログラムがそのカード上の様々なコントロール値を修正する道具です。
多くのカードで、これはミキサーを含んでいますが、rme9652 のようにいくつかのカードはミキサーを持っていません。
しかし、それらはたくさんの別のコントロールや、それらにアクセスするために必要な JACK のようなプログラムを持っています。
例えば、デジタル i/o 同期インジケータやサンプルクロックソーススイッチなどがあります。

*エイリアス [#k97d8d01]
'PCM hw type' を用いてあなたのデバイスにエイリアスを定義することができます。
この定義の構文は:
 pcm.NAME {
 	type hw					# Kernel PCM
 	card INT/STR			# Card name or number
 	[device] INT			# Device number (default 0)
 	[subdevice] INT			# Subdevice number, -1 first available (default -1)
 	mmap_emulation BOOL		# enable mmap emulation for ro/wo devices
 }
例えば、これはあなたの第一のサウンドカードにエイリアスを与えます:
 pcm. {
 	type hw
 	card 0
 	device 0
 }
これであなたはエイリアス '' を使ってこのカードにアクセスできます。
 aplay -D test.wav

*プラグイン [#wa9f98f6]
プラグインのフルリストが見たければ、cvs から毎日生成されている[[alsa-lib documentation:http://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html#pcm_plugins]]を訪れると良いでしょう。

-Q: プラグインとは何ですか?
-A: ALSA では、PCM プラグインが PCM デバイスの機能や特徴を拡張してくれます。
プラグインは自動で仕事を処理します - デバイスのネーミング、サンプルレート変換、チャンネル間でのサンプルコピー、ファイルへの書出し、サウンドカード/デバイスのマルチ i/o (サンプル同期はされていない)への対応、マルチチャンネルサウンドカード/デバイスの利用など。
これらを利用するために、仮想スレーブデバイスを作成する必要がある。

とても単純なスレーブは次のように定義できる:
 pcm_slave.sltest {
 	pcm
 }
これはパラメータのないスレーブを定義しています。
It's nothing more than another alias for your sound device.
理解するのにもう少し複雑なことがあります。'pcm types'に対するパラメータがスレーブ定義ブロックに定義されなければいけません。
それでは、この振る舞いを表すレートコンバータをセットアップしてみましょう。
 pcm_slave.sl2 {
 	pcm
 	rate 48000
 }
 
 pcm.rate_convert {
 	type rate
 	slave sl2
 }
これであなたは新しく作成された仮想デバイスを呼び出すことができます:
 aplay -D rate_convert test.wav
これは再生中に自動的にサンプルレートを44.1kHzに変換してくれます。
大半のプレーヤや alsa はサウンドカードで可能な正しいサンプルレートに変換してくれるため、これはそれほど便利とはいえません。
しかし、例えばもっと低い static サンプルレートに変換するためにこれを利用することも可能です。
変換のためのさらに複雑なツールが pcm type プラグです。
構文は:
 type plug					# Format adjusted PCM
 slave STR					# Slave name (see pcm_slave)
 #or
 slave {					# Slave definition
 	pcm STR					# Slave PCM name
 	#or
 	pcm { }					# Slave PCM definition
 	[format STR]			# Slave format (default nearest) or "unchanged"
 	[channels INT]			# Slave channels (default nearest) or "unchanged"
 	[rate INT]				# Slave rate (default nearest) or "unchanged"
 }
 route_policy STR			# 自動 ttable 生成に対する route policy
 							# STR の値として 'default' 'average' 'copy' 'duplicate'
 							# average: 結果は 入力チャンネルの平均
 							# copy: 最初のチャンネルだけがコピーされる
 							# duplicate: 最初のチャンネルセットを複製する
 							# default: momo capture を除いて policy をコピーする
 ttable {					# Transfer table (bidimensional compound of cchanels * schannels numbers)
 	CCHANNEL {
 	SCHANNEL REAL			# route value (0.0 ... 1.0)
 	}
 }
次のように使う:
 pcm_slave.sl3 {
 	pcm
 	format S16_LE
 	channels 1
 	rate 16000
 }
 
 pcm.complex_convert {
 	type plug
 	slave sl3
 }
呼び出すには:
 aplay -vD complex_convert test.wav
これで再生中、サンプルフォーマット: S16_LE, 1つのチャンネル, 16kHzのサンプルレートに変換されます。
aplay を verbose オプション -v をつけて呼び出せば、オリジナルファイルでのオプションが分かります。
 aplay -v test.wav
ファイルのオリジナル設定が分かります。

*ソフトウェアミキシング [#ud8eaf79]
ソフトウェアミキシングとは、ひとつのデバイスで、複数の音楽ファイルや、音楽アプリケーションを同時に再生させる機能です。
Linux 環境でソフトウェアミキシングを実現する方法は沢山あります。
通常、ARTSD, ESD, JACK...のようなサーバアプリケーションが必要になります。
The list is large and the apps can often be confusing to use.

**dmix [#i182ef0a]
最近では、dmix (direct mixing)プラグインと呼ばれる ALSA プラグインがあります。
構文をつかうことで、インストールや理解の苦労をせずとも簡単にソフトウェアミキシングを実現できます。

このプラグインのとても面白く、潜在的で、きわめて便利な側面として、default プラグインネームと結びつけて使えます。
理論的には、ネイティブな ALSA をサポートしている全てのアプリケーションがサウンドデバイスを共有できるということになります。
実際、この機能を利用できるアプリケーションはまだそれほど多くはありません。
しかし、あなたがもしテストをしてアプリケーション開発者にあなたの発見をレポートする時間があれば、それを試す価値はあるでしょう:
 pcm.!default {
 	type plug
 	slave.pcm "dmixer"
 }
 
 pcm.dmixer {
 	type dmix
 	ipc_key 1024
 	slave {
 		pcm "hw:1,0"
 		period_time 0
 		period_size 1024
 		buffer_size 4096
 		rate 44100
 	}
 	bindings {
 		0 0
 		1 1
 	}
 }
(好きな名前でこれを使いたければ、!default の部分だけを変更してみてください)
ここで複数のコンソール上で試してみましょう:
 aplay -f cd -D default test.wav

-注意
PCM 名 dmix はすでにグローバル設定ファイル /usr/share/alsa/alsa.conf で定義されています。
--このデバイスに対するデフォルトサンプルレートは 48000Hz です。これを変更したかったら
 aplay -D"plug:'dmix:RATE=44100'" test.wav
としてください。
--dmix プラグインで 44100Hz サンプルレートと hw:1,0 出力デバイスを使うときのサンプルコマンド
 aplay -Dplug:\'dmix:SLAVE=\"hw:1,0\", RATE=44100\' test.wav
--PCM 名 dmix はすでにグローバル設定ファイル /usr/share/alsa/alsa.conf で定義されています。
 SLAVE="hw:0,0",RATE=48000

-NB
dmix プラグインはクライアントサーバ技術が基盤になってはいませんが、サウンドカードの DMA バッファに直接書き込んでいます。一度に実行されるインスタンスの数に制限はありあません。

**dsnoop [#vcca753e]
dmix プラグインはマルチ出力(再生)ストリーム向けですが、
あなたがマルチ入力(キャプチャ)クライアントを使いたい場合は dsnoop プラグインが必要になります。
 pcm.mixin {
 	type dsnoop
 	ipc_key 5978293 # must be unique for all dmix plugins!!!!
 	ipc_key_add_uid yes
 	slave {
 		pcm "hw:0,0"
 		channels 2
 		period_size 1024
 		buffer_size 4096
 		rate 44100
 		periods 0
 		period_time 0
 	}
 	bindings {
 		0 0
 		0 1
 	}
 }

*JACK プラグイン [#tcd8070f]
このプラグインは、alsa をネイティブにサポートしているアプリケーションを JACK デーモンに接続してくれます。

jack をコンパイルしてインストールするためには、src/pcm/ext に移動して、"make jack" "make install-jack" を実行してください。

JACK プラグインを利用するには .asoundrc に次のものを追加する必要があります。
 pcm.jackplug {
 	type plug
 	slave { pcm "jack" }
 }
 
 pcm.jack {
 	type jack
 	playback_ports {
 		0 alsa_pcm:playback_1
 		1 alsa_pcm:playback_2
 	}
 	capture_ports {
 		0 alsa_pcm:capture_1
 		1 alsa_pcm:capture_2
 	}
 }
これで使えるようになります:
 aplay -Djackplug somefile
 arecord -Djackplug somefile

*仮想マルチチャンネルデバイス [#j124701f]
二つ以上の ALSA デバイスをリンクさせて仮想マルチチャンネルデバイスを実現することができます。
However this will not create the mythical "multi-channel soundcard out of el-cheapo consumer cards".
The real devices will drift out of sync over time.

~省略~

*Bindings explained [#h598fc0a]

~省略~