(2019/08/30 追記)
RPi2で音を鳴らそうと思うが、その前にALSAとPulseAudioの関係について、ざっくりとまとめる。
Linuxのサウンドシステム
Linuxのサウンドシステムは複雑でいろいろなものが入り乱れていてわかりづらい。
詳しいことはここに解りやすくまとまった情報があるので参照してみてほしい。
基本的な理解としては、
- 最終的に音を鳴らすのはデバイス
- デバイスを叩くためにデバイスドライバ(カーネルランド)
- サウンド関連でカーネルランドとユーザーランド橋渡しをする部分を取りまとめているのがALSA
- 各アプリケーション間でサウンド関連のリソースを調停するのがPulseAudioなどのサウンドサーバ
複雑化の要因
複雑化している原因の1つは、アプリケーションが直接ALSAを触るケースがあること。
通常のケースでは以下のようにアプリケーションはサウンドサーバ(PulseAudio)を介してALSAにアクセスする。
ALSAもユーザーランドから触れるAPIを提供していて、これは多分サウンドサーバが仕事をできるようにするためなのだが、サウンドサーバではない通常のアプリケーションが、ALSAのAPIを利用してしまうことがある。 こうなってしまうと、せっかくアプリケーション間でのリソースを調停しているサウンドサーバの管理外でサウンドリソースが利用されてしまい、サウンドサーバの動作に支障をきたす。
それを回避するためにPulseAudioなどのサウンドサーバはALSAのデバイスのふりをして、ALSAのAPIを直接叩いているアプリケーションのサウンドリソースを横取りしてしまう。 そうして、管理下に置いたあと本物のALSAに音を流す。
この構図を知らないで設定ファイルをいじろうとすると、ALSA?? PulseAudio??となり混乱してしまう。
#私は混乱した。
続きのようなものを書いたのでこちらも。