Linuxのサウンド関係が複雑なので、いままで調べたものプラス自分の想像で歴史的に記述。
サウンドがなかった時代
ビープ音しかならなかった。
サウンドハードデバイスができて来た
Sound Blaster 16来た。アプリはこれを直接叩いた。他のハードもできて来たが最初はSB16エミュレーション機能をハードがもっていた。
OSSできた
SB16的なインターフェースにまとまってきたので、これをOSSとしてまとめた。これで統一的なインターフェースができた。ソフト開発者はOSSを使えばいいようになった。/dev/dspに音データを流し込む。
ミキシングはハードでやっていた。でもソフトでやるほうがいいじゃんてことになってきた。
aRtsやESDできた
ハードがミキシングしなくなったので、ソフトでやることにした。aRtsとESDができた。どちらも新しいサウンドシステムを提供する。ここでミキシングしてOSSに送ることにした。アプリケーションはこれに合わせて書き換えられた。
これによって2つのアプリが同時に音を鳴らせるようになった。(いままでは1つのアプリが同時にならせるだけだった?)
でもaRtsとESDの両方同時に鳴らすことはできなかった。どうじにOSSに送ることはできない。ちなみにaRtsは主にKDEで使われ、ESDはGnomeで使われた。
この時点でいろいろなアプリが出てきてしまった。OSSに直で送るアプリ、aRtsやESDをつかうアプリ、OSSに直で送るやつがいるとaRtsやESDが鳴らせなくなる。
SDLやlibaoできた
そこで、OSS、aRts、ESDをラップするライブラリSDLやlibaoができた。
ALSAできた
ところがOSSのライセンスが変わってしまった。もうOSSは止めてALSAを作ることにした。ALSAならMIDIも流し込める。ソフトミキシングもできる。OSSのためにOSSエミュレーションもできるようにした。
ところがALSAは難しく、OSSエミュレーションがよく動くのでアプリはOSSで書かれた。ただ問題があってOSSエミュレーションはソフトミキシングができなかった。
PulseAudioできた
ごちゃごちゃしてきて訳がわからなくなったが結局2つのアプリで同時に鳴らせないのでPulseAudioでやることにした。ALSAのデータはPulseAudioに送ることにした。そこでミキシングして出せばいいようにした。
しかし現在のfedoraなどではOSS直のアプリはPulseAudioには行かないように設定されている。padspコマンドを使えば、OSS直アプリのOSS出力をPulseAudioに送れるようになっている。
aRtsやESDがどうなっているのかは調べてない。