Linux聲音系統



TAG: linux, alsa, oss, pulseaudio, esd, aRts 
DATE: 2013-08-13

Linux聲音系統有些混亂,它有三套音頻驅動: OSS (Open Sound System), 商業版的OSS,和ALSA (Advanced Linux Sound Architechture)。 所以底層驅動有OSSALSA兩套API。

一、聲卡的工作原理

音頻驅動的主要作用是驅動聲卡工作,所以也叫聲卡驅動。 聲卡的主要作用是完成數模轉換。 當電腦播放聲音時,將數字數據送到聲卡,由聲卡轉換成模擬數據給揚聲器等外放設備。 當錄音時,聲卡將從麥克風送來的模擬數據采樣成數字數據,送給計算機處理。

二、Linux音頻驅動

早期的Linux音頻驅動是OSS (Open Sound System), 但ALSA (Advanced Linux Sound Architechture)后來居上, 大有完全取代OSS的趨勢。

Linux都是通過設備文件訪問外部設備, ALSAOSS有不同的設備文件。

+----------+--------------+--------------------+---------+
|設備類型  |    OSS       |  ALSA              | 備注    |
+----------+--------------+--------------------+---------+
|聲音采樣  |   /dev/dsp0  | /dev/snd/pcmC0D0   |         |
+----------+--------------+--------------------+---------+
| 混音器   |  /dev/mixer0 | /dev/snd/mixerC0D0 | 控制音量|
+----------+--------------+--------------------+---------+
|高層音序器|  /dev/music0 |    N/A             | MIDI支持|
+----------+--------------+--------------------+---------+
|低層音序器|  /dev/midi0  |    N/A             | MIDI支持|
+----------+--------------+--------------------+---------+
|聲音狀態  |  /dev/sndstat|    N/A             |         |
+----------+--------------+--------------------+---------+
|控制文件  |   N/A        | /dev/snd/controlC0 |         |
+----------+--------------+--------------------+---------+

ALSA提供了和OSS不同的API,因此如果你使用ALSA做音頻驅動, 一些通過OSS操作聲音的程序將不能正常發聲。

為了解決這一問題,ALSA提供了兼容OSS的庫, 因此,如果你使用 ALSA 驅動聲卡,也安裝了兼容OSS的庫, 那些使用OSS API的程序也能正常工作。

三、應用程序和聲卡驅動的交互方式

直接和底層聲音驅動打交道

有一些應用程序直接和最底層的聲音驅動(OSSALSA)打交道, 程序內部直接調用 OSS 或 ALSA 的API。

通過聲音服務器

聲音服務器介於應用程序和聲卡驅動之間。 當不同的應用調用聲音服務器的API來播放聲音時,它們把音頻數據送到服務器, 服務器將一個以上的播放請求混音后,再發送給底層的聲卡驅動(ALSAOSS)。 由ALSAOSS來驅動聲卡播放混音后的數據。 基於ESD開發音頻程序的好處有:(1)簡化開發。(2)即使底層驅動不支持多線程, 通過聲音服務器也能實現多個應用程序同時發聲。(3)有更好的音效。

  1. ESD 
    ESD 一直是 Gnome 桌面環境的聲音服務器, Gnome 應用多是通過 ESD 處理聲音的。
  2. aRts 
    和 ESD 對應,aRts 是 KDE 桌面環境的聲音服務器, 底層通過 ALSA 驅動聲卡。KDE 應用多通過 aRts 處理聲音。
  3. PulseAudio 
    PulseAudio是新一代聲音服務器,能提供更好的音效, 已經有越來越多的應用通過PulseAudio處理聲音。 為了讓使用ESD的程序能繼續在PulseAudio 上工作, PulseAudio 提供了 ESD 的兼容層。 Gnome 未來將采用PulseAudio取代ESD

通過其它庫

除了聲音服務器,為了簡化開發,還出現了其它的一些聲音庫。 這些聲音庫有的和聲音服務器打交道,有的直接和最底層的聲音驅動(OSSALSA)打交道。 比如游戲程序使用的SDL庫,就是直接和聲音驅動打交道。

四、總結

Linux從應用程序到聲音驅動的結構如下圖所示。

   +-------+  +------+     +-----+  +-----+ +----+
   | Apps  |  | Apps |     |Apps |  |Apps | |Apps|
   +---+---+  +---+--+     +--+--+  +--+--+ +-+--+
       |          |           |        |      |
   +---+---+  +---+------+  +-+--+  +--+--+   |
   | ESD   |  |PulseAudio|  |aRts|  |Other|   |
   | Gnome |  |ESD compat|  |KDE |  | SDL |   |
   +---+---+  +----+-----+  +-+--+  +--+--+   |
       |           |          |        |      |
   +---+-----------+----------+--------+------+---+
   | ALSA (Advanced Linux Sound Architechture)    |
   |    OSS (Open Sound System)                   |
   +----------------------------------------------+


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM