我需要用麥克風功能創建一個簡單的音頻錄製的C++應用程序。Linux下C++音頻捕獲API的最佳實踐?
我不能說沒有足夠的音頻API來做到這一點! Pulse,ALSA,/ dev/dsp,OpenAL等。我的問題是目前的「最佳實踐」API是什麼?
Pulse似乎受到了大多數現代發行版的支持,但似乎幾乎沒有文檔。 OpenAL是否支持跨不同的發行版,還是太模糊? 我錯過了嗎?
有沒有簡單的答案?
我需要用麥克風功能創建一個簡單的音頻錄製的C++應用程序。Linux下C++音頻捕獲API的最佳實踐?
我不能說沒有足夠的音頻API來做到這一點! Pulse,ALSA,/ dev/dsp,OpenAL等。我的問題是目前的「最佳實踐」API是什麼?
Pulse似乎受到了大多數現代發行版的支持,但似乎幾乎沒有文檔。 OpenAL是否支持跨不同的發行版,還是太模糊? 我錯過了嗎?
有沒有簡單的答案?
的GStreamer可以讓您和最終用戶最大的靈活性與問候的聲音捕獲,但其跨平臺的可行性不是很大,尤其是在OS X上
GStreamer在要求用例方面也不是很擅長,因爲這不是它的設計目的......它是一個多媒體框架,用於支持圖騰和rhytmbox之類的東西或PiTiVi(非線性視頻編輯器)需要處理大量媒體格式和類似的東西。對於這個問題,這是過度的和過度複雜的。 – Spudd86 2010-06-17 20:06:54
倫納特慢條斯理地在這裏有一個指南:
http://0pointer.de/blog/projects/guide-to-sound-apis
基本上使用ALSA的「安全」子集,那麼所有的其他重要的應該工作了。
除非是OpenAL的工作在Linux
編輯: 另外的PulseAudio具有相當不錯的doxygen生成的文檔here和一些其他的東西here和一些工具,都是很好的例子,你可以看到他們的GitWeb here
另外我寫了一些代碼,使用脈衝音頻輸入,你可以看看它here,但我不知道我處理一切完全正確,我知道我錯過了代碼來處理某些情況......但那應該讓你開始,如果你去脈衝。
沒有簡單的答案;最佳實踐取決於您的應用程序將暴露給的上下文和特定用例。
爲了最大限度的簡化編程和最廣泛的受衆羣體,我會選擇gstreamer,因爲它很快捷,很好地集成在gnome和ubuntu中,並支持各種音頻子系統和配置。它非常靈活。
例如,命令:
gst-launch autoaudiosrc ! audioconvert ! flacenc ! filesink location="foo.flac"
將創建一個從麥克風輸入一個.FLAC文件,而不考慮音頻系統(脈衝,ALSA,ESD ...)的。如文檔here所述,可以使用c/gobject綁定來編寫等效管道。
PS上面的命令需要gstreamer-tools
包
你可能會發現很不幸,你要支持多種採集方式 - 不同的人做不同的使用設置的聲音,一般有一個理由這樣做,他們會考慮更多比能夠使用給定的應用程序更重要。 (當然,取決於你的應用程序是什麼類型的用戶。) – Cascabel 2010-05-26 19:55:19