/dev/dspを使用するアプリケーションからaossを使用してALSAで音を鳴らすときの設定
GNU/Linux上で音を出すアプリケーションには、新しいALSAライブラリ経由で出すものと、古いOSS APIを使用して出すものとがある。*1
ALSAにはOSSエミュレーションモードがあり、snd-pcm-oss,snd-seq-oss,snd-mixer-ossといったカーネルモジュールが読み込まれているか、これらの機能をカーネルに組み込んでビルドして使っている場合、そのままでも音は鳴らせるし、シーケンサやミキサーもエミュレーションで使用できる。
しかし、その場合、OSS APIを使用したアプリケーションがデバイス/dev/dspを握ってしまい、そのアプリケーションが動作している間、他のアプリケーションからは音が出せなかったりする。更に、ミキサーの設定がALSA用と完全互換でなかったりなど制約もあるため、OSSサウンドAPIアプリからALSAライブラリ経由で音を出す「alsa-oss」というパッケージに含まれる、aossというコマンドを使用するとよい。
aossを使用した場合、ALSAのデフォルトのPCMデバイスは使用されず、pcm.dsp0というデバイスが使用される*2。Web上の設定例を参考に、ソフトウェアボリューム(softvol)と、多重再生をするためのdmixを通して使用するための設定を作成した。
ファイル名: ~/.asoundrc
pcm.dsp0 { type plug slave.pcm { type softvol # ALSAのソフトウェアボリュームコントロールを使用 # 必要に応じてdmixへの引数(CARD, DEV, SUBDEV, FORMAT, RATE)を指定 # 「slave.pcm "dmix"」だけで不具合が無ければそれでもOK slave.pcm "dmix:0,0,-1,S16_LE,44100" control { name "PCM Playback Volume" card 0 } } } ctl.mixer0 { type hw card 0 }
上の設定では、dmixで多重再生する場合、先にALSA対応プレーヤーで音声を再生していると、dmixのレートがデフォルト値(defaults.pcm.dmix.rate)=48000Hzで使用されるため、後から入るaoss経由の音声(44100Hz)は途切れ途切れになる(逆の順番の場合はALSAのプレーヤーが44100Hzに合わせて綺麗に音が出る)。これを防ぎたい場合は
ファイル名: ~/.asoundrc
defaults.pcm.dmix.rate 44100
と、dmixのデフォルトのレートを44100Hzにする設定を追加する。
なお、この設定では、予め定義されているdmixデバイス「pcm.dmix」を使用し、独自のdmixデバイスの定義はしていない(手抜きのためと、設定を短くするため)。
(2011/1/20)出力先のPCM名は環境変数ALSA_OSS_PCM_DEVICEでも指定可能で、${HOME}/.asoundrcの記述よりも優先順位が高い。まとめドキュメントも参照。
まとめドキュメント: