2010-05-26 50 views
7

我需要用麥克風功能創建一個簡單的音頻錄製的C++應用程序。Linux下C++音頻捕獲API的最佳實踐?

我不能說沒有足夠的音頻API來做到這一點! Pulse,ALSA,/ dev/dsp,OpenAL等。我的問題是目前的「最佳實踐」API是什麼?

Pulse似乎受到了大多數現代發行版的支持,但似乎幾乎沒有文檔。 OpenAL是否支持跨不同的發行版,還是太模糊? 我錯過了嗎?
有沒有簡單的答案?

+0

你可能會發現很不幸,你要支持多種採集方式 - 不同的人做不同的使用設置的聲音,一般有一個理由這樣做,他們會考慮更多比能夠使用給定的應用程序更重要。 (當然,取決於你的應用程序是什麼類型的用戶。) – Cascabel 2010-05-26 19:55:19

回答

0

的GStreamer可以讓您和最終用戶最大的靈活性與問候的聲音捕獲,但其跨平臺的可行性不是很大,尤其是在OS X上

+0

GStreamer在要求用例方面也不是很擅長,因爲這不是它的設計目的......它是一個多媒體框架,用於支持圖騰和rhytmbox之類的東西或PiTiVi(非線性視頻編輯器)需要處理大量媒體格式和類似的東西。對於這個問題,這是過度的和過度複雜的。 – Spudd86 2010-06-17 20:06:54

4

倫納特慢條斯理地在這裏有一個指南:

http://0pointer.de/blog/projects/guide-to-sound-apis

基本上使用ALSA的「安全」子集,那麼所有的其他重要的應該工作了。

除非是OpenAL的工作在Linux

編輯: 另外的PulseAudio具有相當不錯的doxygen生成的文檔here和一些其他的東西here和一些工具,都是很好的例子,你可以看到他們的GitWeb here

另外我寫了一些代碼,使用脈衝音頻輸入,你可以看看它here,但我不知道我處理一切完全正確,我知道我錯過了代碼來處理某些情況......但那應該讓你開始,如果你去脈衝。

+0

「http://0pointer.de/blog/projects/guide-to-sound-apis」的鏈接似乎被打破了... – slashmais 2013-07-03 16:53:25

+0

@slashmais Lennart的網站已經關閉了一段時間,現在回來了 – Spudd86 2013-07-30 19:16:26

+0

明白了, thx - 似乎是一個有用的指南 – slashmais 2013-07-31 08:42:43

1

沒有簡單的答案;最佳實踐取決於您的應用程序將暴露給的上下文和特定用例。

爲了最大限度的簡化編程和最廣泛的受衆羣體,我會選擇gstreamer,因爲它很快捷,很好地集成在gnome和ubuntu中,並支持各種音頻子系統和配置。它非常靈活。

例如,命令:

gst-launch autoaudiosrc ! audioconvert ! flacenc ! filesink location="foo.flac" 

將創建一個從麥克風輸入一個.FLAC文件,而不考慮音頻系統(脈衝,ALSA,ESD ...)的。如文檔here所述,可以使用c/gobject綁定來編寫等效管道。

PS上面的命令需要gstreamer-tools