2012-03-26 101 views
0

我想將現有的Windows應用程序移植到Unix上,並且我無法找到有關Unix音頻系統的某些信息,如果有人能分享他們的經驗,我將不勝感激。Unix音頻系統API

如何我:

  • 得到連接到電腦上的所有聲卡?
  • 獲取聲卡通道數?
  • 每通道獲取當前聲卡的音量?
  • 掛鉤到音頻系統並計算正在播放的聲音的響度(類似於Windows 7音量控制 - 用綠色條顯示「響度」)。 (我明白涉及的數學,但看看系統是否已經提供了類似的包)?

是否可以爲每個Unix系統執行此操作,還是必須以不同的方式爲每個系統執行此操作(在FreeBSD,Ubuntu上)?

+1

這裏是一個類似的問題與答案: http://stackoverflow.com/questions/9345766/playing-sound-in-c-using-native-system-calls/9349574#9349574 – 2012-03-27 15:48:31

回答

1

Unix有一大堆音頻框架。您可能最終不得不以平臺/框架相關的方式進行一些工作。我建議開始使用PortAudio/PortMixer。它被Audacity使用,所以希望它可以覆蓋你的大部分需求。但它應該支持像Mac OS X,Linux-Alsa,Linux-OSS,FreeBSD這樣的最常見的Unix變體,我想還有更多。

1

在各種仍然存在的Unix中有很多不同的競爭聲音API。

Linux似乎已經聚合在PulseAudio API上用於通用聲音輸出;我的理解是,這與DirectSound具有類似的功能。您還應該調查ALSA(這是一個仍被廣泛使用的較低級別的API)和JACK,它與PulseAudio的級別相同,但專門用於錄製演播室類型的工作。這些應該適用於所有合理的最新Linux發行版。 (注:如果您正試圖爲Linux分發編譯代碼因爲你做錯了第三方軟件供應商分發源,並且分佈將編譯它。)

文檔說: PulseAudio和JACK也可以在FreeBSD上工作,但我不知道他們在那裏流行。我不知道任何其他BSD或其他專有的Unix。

遠離任何稱自己爲「OSS」的東西,除非你別無選擇。這最初只是用於Linux的舊的,過時的內核級聲音API的名稱。最近嘗試復活它(「OSSv4」)AFAICT只能設法產生一個殭屍。

+0

你碰巧知道什麼是獲得聲音流(用數字信號處理計算響度)還是當前音頻的更好聲音「響度」的最簡單方法(哪個API)? – blejzz 2012-03-26 15:52:08

+0

不,對不起,我從來沒有實際編程過任何這些。 – zwol 2012-03-26 16:14:10