2012-04-02 62 views
9

我的商業嵌入式Linux編程項目需要在單獨的音量播放WAV文件和色調兼任。聲音的幾個例子:簡單的C++ API聲音

•「點擊」聲音的每個用戶按下的屏幕,用戶指定的體積
•警告在最大音量的聲音出場出場時間
•在APP-其他應用程序要求的警告音指定音量電平(0-100%)
•在用戶指定的音量的MP3播放器和/或視頻播放(帶聲音)未來的支持。在播放歌曲/視頻時,所有其他聲音應繼續播放。

我們使用Qt作爲具有QtMultimedia和聲子支持我們的UI框架。不過,聽說前者在Linux上參差不齊音效的支持,後者是舊版本,並可能在即將到來的Qt的版本中將會棄用。

我做了一些研究,這裏是我遇到的幾個API的:
KDE Phonon
SFML
PortAudio
SDL_Mixer
OpenAL Soft
FMOD(雖然我寧願避免牌照費)
ALSA(可能有點太低級......)

其他注意事項: 跨平臺不是必需的,但首選。我們想盡可能地限制依賴關係。在可預見的未來,不需要3D音頻或特殊效果等高級功能。我的團隊沒有太多的音頻體驗,所以易用性非常重要。

是這些矯枉過正我的應用程序嗎?這似乎是最合適的?

更新: 原來我們已經依賴SDL出於其他原因,所以我們決定使用SDL_Mixer。但是對於其他嵌入式應用程序,由於它們的最小依賴關係,我還需要花很長時間在PortAudio/libsndfile組合中。

+0

2005年至2008年,我們在嵌入式Linux上做了商用音頻,當我回想起我們的C++音頻堆棧直接與ALSA交談時。 http://www.alsa-project.org/main/index.php/Main_Page – 2012-04-02 17:46:46

回答

0

我已經使用SDL_Mixer一次又一次,可愛的圖書館,它應該爲您的需求更好地服務,許可證是靈活的,其記錄豐富。我也嘗試過使用SFML,雖然更現代和公正的文檔,但我發現即使這兩個庫都非常相似,它也有點笨重和麻煩。 imo SDL_Mixer是最好的

但是你可能也想看看這個我幾個星期前發現的http://www.mpg123.de/,我還沒有深入研究它,但它非常輕巧,而且許可證也很靈活。

+0

我想我們會給SDL_Mixer一個去,因爲我的一位同事有一些經驗。一旦我們找到工作,我會更新這個問題。謝謝! – Rocky 2012-04-04 22:15:45

+0

事實證明,我們已經依賴SDL出於其他原因,所以我們將使用SDL_Mixer。但對於其他讀者來說,我也會花很長時間在PortAudio上工作,特別是對於嵌入式項目。 – Rocky 2012-04-19 14:51:35

0

不要忘記:

  • FFmpeg:是一個完整的,跨平臺的解決方案來記錄,轉換和流音頻和視頻。

  • GStreamer:是一個用於構建媒體處理組件圖的庫。它支持的應用範圍從簡單的Ogg/Vorbis播放,音頻/視頻流傳輸到複雜的音頻(混合)和視頻(非線性編輯)處理。

+0

謝謝,我重新閱讀了這個問題,並且明確的一點是,他們在我的建議解決方案之一中有磁盤空間。他們不是那麼大,我已經在我的嵌入式項目中使用過兩次。不言而喻,學習這些技術之一會爲您的編程工具添加很高的技巧。 – karlphillip 2012-04-03 01:13:47

2

libao很簡單,跨平臺,Xiphy善良。 還有documentation

用途概述here - 簡單的用法是這樣的:

+1

然而,它的許可證是GPL,因此它可能不符合OP的要求。 – quinmars 2012-04-02 20:52:24

+0

啊,你可能是對的,即使目前沒有在問題中指定,「商業」可能意味着GPL出局。 – gnud 2012-04-02 20:53:20

2

Go for PortAudio。對於沒有不需要的開銷(如複雜的流媒體管道或3D)的普通音頻,它是最好的lib。另外你有非常好的跨平臺支持。它被幾個專業音頻程序使用,並具有非常高的質量。

+0

它看起來像PortAudio只有一些依賴關係,這很好。我們的大部分聲音都是wav文件,但它不支持讀取或寫入格式化的音頻文件。 – Rocky 2012-04-04 22:07:00

+0

您可以使用[libsndfile](http://www.mega-nerd.com/libsndfile/)加載波形文件。它的接口基本上模仿標準的C文件I/O,並具有一些額外的格式(s/g)功能。 libsnfile + portaudio的組合爲您提供了一種非常靈活,便攜和輕便的播放wav文件的方式,對於嵌入式系統來說可能是一個很好的折衷方案。 – 2012-04-05 07:08:03