原文地址::http://www.cnblogs.com/jiqingwu/p/linux_sound_system.html
相關(guān)文章
1、Linux下的聲音編程方法----http://blog.csdn.net/liuchao35758600/article/details/6880910
2、讓LINUX發(fā)出聲音----http://xghe110.blog.51cto.com/337884/65713/
3、Linux下?lián)P聲器發(fā)聲的小程序----http://www.2cto.com/kf/200609/12832.html
Linux聲音系統(tǒng)有些混亂,它有三套音頻驅(qū)動(dòng): OSS (Open Sound System), 商業(yè)版的OSS,和ALSA (Advanced Linux Sound Architechture)。 所以底層驅(qū)動(dòng)有OSS和ALSA兩套API。
音頻驅(qū)動(dòng)的主要作用是驅(qū)動(dòng)聲卡工作,所以也叫聲卡驅(qū)動(dòng)。 聲卡的主要作用是完成數(shù)模轉(zhuǎn)換。 當(dāng)電腦播放聲音時(shí),將數(shù)字?jǐn)?shù)據(jù)送到聲卡,由聲卡轉(zhuǎn)換成模擬數(shù)據(jù)給揚(yáng)聲器等外放設(shè)備。 當(dāng)錄音時(shí),聲卡將從麥克風(fēng)送來的模擬數(shù)據(jù)采樣成數(shù)字?jǐn)?shù)據(jù),送給計(jì)算機(jī)處理。
早期的Linux音頻驅(qū)動(dòng)是OSS (Open Sound System), 但ALSA (Advanced Linux Sound Architechture)后來居上, 大有完全取代OSS的趨勢。
Linux都是通過設(shè)備文件訪問外部設(shè)備, ALSA和OSS有不同的設(shè)備文件。
+----------+--------------+--------------------+---------+|設(shè)備類型  |    OSS       |  ALSA              | 備注    |+----------+--------------+--------------------+---------+|聲音采樣  |   /dev/dsp0  | /dev/snd/pcmC0D0   |         |+----------+--------------+--------------------+---------+| 混音器   |  /dev/mixer0 | /dev/snd/mixerC0D0 | 控制音量|+----------+--------------+--------------------+---------+|高層音序器|  /dev/music0 |    N/A             | MIDI支持|+----------+--------------+--------------------+---------+|低層音序器|  /dev/midi0  |    N/A             | MIDI支持|+----------+--------------+--------------------+---------+|聲音狀態(tài)  |  /dev/sndstat|    N/A             |         |+----------+--------------+--------------------+---------+|控制文件  |   N/A        | /dev/snd/controlC0 |         |+----------+--------------+--------------------+---------+ALSA提供了和OSS不同的API,因此如果你使用ALSA做音頻驅(qū)動(dòng), 一些通過OSS操作聲音的程序?qū)⒉荒苷0l(fā)聲。
為了解決這一問題,ALSA提供了兼容OSS的庫, 因此,如果你使用 ALSA 驅(qū)動(dòng)聲卡,也安裝了兼容OSS的庫, 那些使用OSS API的程序也能正常工作。
三、應(yīng)用程序和聲卡驅(qū)動(dòng)的交互方式
直接和底層聲音驅(qū)動(dòng)打交道
有一些應(yīng)用程序直接和最底層的聲音驅(qū)動(dòng)(OSS或ALSA)打交道, 程序內(nèi)部直接調(diào)用 OSS 或 ALSA 的API。
通過聲音服務(wù)器
聲音服務(wù)器介于應(yīng)用程序和聲卡驅(qū)動(dòng)之間。 當(dāng)不同的應(yīng)用調(diào)用聲音服務(wù)器的API來播放聲音時(shí),它們把音頻數(shù)據(jù)送到服務(wù)器, 服務(wù)器將一個(gè)以上的播放請求混音后,再發(fā)送給底層的聲卡驅(qū)動(dòng)(ALSA或OSS)。 由ALSA或OSS來驅(qū)動(dòng)聲卡播放混音后的數(shù)據(jù)。 基于ESD開發(fā)音頻程序的好處有:(1)簡化開發(fā)。(2)即使底層驅(qū)動(dòng)不支持多線程, 通過聲音服務(wù)器也能實(shí)現(xiàn)多個(gè)應(yīng)用程序同時(shí)發(fā)聲。(3)有更好的音效。
ESD ESD 一直是 Gnome 桌面環(huán)境的聲音服務(wù)器, Gnome 應(yīng)用多是通過 ESD 處理聲音的。aRts 和 ESD 對應(yīng),aRts 是 KDE 桌面環(huán)境的聲音服務(wù)器, 底層通過 ALSA 驅(qū)動(dòng)聲卡。KDE 應(yīng)用多通過 aRts 處理聲音。PulseAudio PulseAudio是新一代聲音服務(wù)器,能提供更好的音效, 已經(jīng)有越來越多的應(yīng)用通過PulseAudio處理聲音。 為了讓使用ESD的程序能繼續(xù)在PulseAudio 上工作, PulseAudio 提供了 ESD 的兼容層。 Gnome 未來將采用PulseAudio取代ESD。通過其它庫
除了聲音服務(wù)器,為了簡化開發(fā),還出現(xiàn)了其它的一些聲音庫。 這些聲音庫有的和聲音服務(wù)器打交道,有的直接和最底層的聲音驅(qū)動(dòng)(OSS或ALSA)打交道。 比如游戲程序使用的SDL庫,就是直接和聲音驅(qū)動(dòng)打交道。
四、總結(jié)
Linux從應(yīng)用程序到聲音驅(qū)動(dòng)的結(jié)構(gòu)如下圖所示。
   +-------+  +------+     +-----+  +-----+ +----+   | Apps  |  | Apps |     |Apps |  |Apps | |Apps|   +---+---+  +---+--+     +--+--+  +--+--+ +-+--+       |          |           |        |      |   +---+---+  +---+------+  +-+--+  +--+--+   |   | ESD   |  |PulseAudio|  |aRts|  |Other|   |   | Gnome |  |ESD compat|  |KDE |  | SDL |   |   +---+---+  +----+-----+  +-+--+  +--+--+   |       |           |          |        |      |   +---+-----------+----------+--------+------+---+   | ALSA (Advanced Linux Sound Architechture)    |   |    OSS (Open Sound System)                   |   +----------------------------------------------+
新聞熱點(diǎn)
疑難解答