ALSA PCMプラグインとその設定について(既定のプラグインデバイス)
既定(default)のPCMプラグインデバイス
ALSAアプリケーションは、特に指定のない限り、「default」というPCMプラグインデバイスに対してデータのやりとりをする。この定義は/usr/share/alsa/cards/以下のカードごとの設定ファイルにされている。*1
この「default」などの予約された名前のPCMプラグインの定義を使用せず、代わりに自分で定義したものを使用(上書き=オーバーライド)することは可能。その場合、${HOME}/.asoundrcなどには
pcm.!default { # (既定のPCMプラグインデバイスの定義を記述) }
のように、「!」を付けて記述する。他にも、
defaults.pcm.dmix.!rate 96000
のように、/usr/share/alsa/alsa.conf内で定義されている変数値の設定で書くこともある。
一般的な「default」PCMプラグインデバイスの形
PCMプラグインデバイス名の指定をしないときにはこれが使用されるため、そのままでも扱いやすいような形となっている場合が多い。
内部的には、「asym」というプラグインが使用されていて、再生(プレイバック)/録音(キャプチャ)の両方のプラグインデバイスに対して接続する役目を持っている。
参考URL:
実際には、その中で
- dmix:音声を合成する(出力先を共有)
- dsnoop:外部入力のキャプチャを共有
という2つのプラグインと接続する形となっている。
更に、カードによってはsoftvolというプラグインもdmixとの間に挟んでいて、ALSA上でsoftvolプラグインを使用している範囲で有効*2なソフトウェアボリュームも提供している。
/usr/share/alsa/cards/以下のファイルを見ると、実際の定義を見ることができる。下は「hda-intel」向けの「default」PCMデバイスの定義。
[引用]ファイル名: /usr/share/alsa/cards/HDA-Intel.conf
# default with dmix+softvol & dsnoop HDA-Intel.pcm.default { @args [ CARD ] @args.CARD { type string } type asym playback.pcm { type plug slave.pcm { type softvol slave.pcm { @func concat strings [ "dmix:" $CARD ] } control { name "PCM Playback Volume" card $CARD } } } capture.pcm { type plug slave.pcm { type softvol slave.pcm { @func concat strings [ "dsnoop:" $CARD ] } control { name "Digital Capture Volume" card $CARD } min_dB -30.0 max_dB 30.0 resolution 121 } } }
この場合の「default」PCMデバイスを使用した処理の流れとしては
再生が
default - asym - plug - softvol - dmix - hw
録音が
hw - dsnoop - softvol - plug - asym - default
という形になる。
アプリケーションが使用するPCMプラグインデバイスの指定
既定でないプラグインデバイスにアプリケーションから接続したい場合、アプリケーションごとに固有な方法でプラグインデバイス名を指定することが必要となる。主に自分で${HOME}/.asoundrcに新しく定義したPCMプラグインデバイスへ処理を渡したい場合*3となる。
指定方法に関しては「ALSA対応アプリケーションのPCMデバイス指定」に書いているが、アプリケーションごとに指定方法は違うので、世に出回っている全てのALSAアプリケーションのPCMプラグインデバイス指定の方法をカバーするのは非常に困難。
関連記事:
使用したバージョン:
- ALSA 1.0.16