ALSA Audioがソフトウェアミキシングしてくれなくて1プロセスしか音を出せなかった

ALSA - Gentoo Wikiに従ってALSAを設定したら一度に1プロセスしか音が出せなかったので試行錯誤した話.

状況としては

  1. Youtubeとか開く -> 音流れる
  2. VLCで音楽流す -> 流れない

みたいな.Terminalにはこんなエラーメッセージ.

ALSA lib pcm_dmix.c:862:(snd_pcm_dmix_open) unable to open slave 

普段はそんなこと意識しないけど,複数のメディアから流れる音が同時にスピーカーから聞こえるのは,ソフトウェアでミキシングをしてくれているからである.

つまり,上の状態ではミキシングを設定していないので,一度に一つのメディアからの音しか出せず,Youtubeで音を流すとFlashPlayerプロセスがサウンドカードデバイスをロックしちゃうので,後から開いたVLCがサウンドカードデバイスを開けず音がでない,ということだと思う.

で,しばらくgoogleさんに向かって格闘した結果,僕の環境では解が見つかった.~/.asoundrc(ALSAのローカル設定ファイル)に以下を追加でPulse Audio Pluginが有効になってソフトウェアミキシングをしてくれるようになった.

pcm.!default {
  type pulse
}
ctl.!default {
  type pulse
}

多分,USEフラグにpulseaudioを入れた状態でalsa系パッケージのemergeをしてる必要がある + media-sound/pulseaudioのインストールも必要だと思う.