2012-04-17 87 views
4

我想編寫一些原生C/C++代碼,該代碼需要一些未壓縮的PCM音頻數據,並通過我的揚聲器在Ubuntu Linux 12.04上播放。你能告訴我安裝了哪些不同的默認音頻API /庫?他們的低級體系結構是什麼?它們如何與內核進行交互? (該系統調用)聲音API Ubuntu Linux

(我聽說像ALSA,的PulseAudio,OSS不同的條款,等等,但我真的沒有一個清晰的畫面,其中做什麼,以及如何將它們組合在一起。)

回答

3

簡而言之,ALSA爲Linux中的音頻提供了低級基礎架構,Pulse提供了更高級別(更適合桌面友好型)的級別。就大多數主流Linux發行版而言(包括Ubuntu),OSS已經過時。

你問關於系統調用。您不通過系統調用在Linux中使用音頻。如果你選擇直接使用ALSA(對於簡單的音頻播放不是一個好主意),你可以使用它的用戶空間庫libasound2(甚至OSS將通過/ dev/files而不是syscalls來使用)。

如果您只針對現代Linux發行版,請考慮使用Pulse API。如果您希望獲得更多的靈活性,您可以針對哪些發行版以及跨平臺支持的潛力,可以嘗試一個抽象出特定於操作系統的音頻API的庫,例如PortAudio(http://www.portaudio.com /)。

如果您從未進行任何音頻開發,您可能會發現像PortAudio這樣的庫更容易處理,而不是直接對PulseAudio進行處理。

0

FMOD應該對你很好。它可以很容易地集成到任何C++項目(以及更多語言),並在Windows下運行,Linux(32位和64位),Mac,Android,PS3,Xbox等。另外FMOD Ex同時提供了低級API和數據驅動的API。

如果您不打算用您的應用程序賺錢,可以免費使用。否則,您可能需要支付從約100美元開始的許可證。

5

在Linux上,您有LOTS Linux音頻API可供選擇。但是,如果你只是針對Ubuntu Linux和使用C/C++,並且你不需要任何太花哨的東西(只需要原始的PCM數據並將它推送給揚聲器),那麼我會推薦使用PulseAudio和堅持「簡單」的API。 A trivial example can be found here。這是獲得概念驗證工作最小阻力的途徑。