2009-11-30 156 views
1

我正在尋找一個API(或關於在哪裏查看/啓動的一些信息),它最終將允許我監視計算機正在播放的聲音。使用C++/Python進行聲音監控

我的最終目標(當然,最終成爲踏腳石)是示波器。

我應該從哪裏開始看(除了谷歌,其中已經取得不令人滿意的結果),以瞭解更多關於計算機(尤其是Mac)處理的聲音以及如何到達。

謝謝!

回答

2

正如@cobbal指出的那樣,在Mac OS X上,您需要以某種方式使用PortAudio來播放音頻。唯一的方法是使用具有插件API的音頻播放器,然後將您的代碼作爲該播放器的插件編寫。但是CoreAudio解決方案應該可以讓您監控Mac上播放的所有聲音。

您的CoreAudio代碼根本不可移植到Windows和Linux。目前沒有便攜式解決方案。在Windows上,您可能需要使用WaveIn/WaveOut API,除非您有專業設備,在這種情況下您可能會想要使用ASIO。在Linux上,我不確定;我想你可能會聯繫到ALSA/PulseAudio來抓取音頻。除非你有專業裝備,在這種情況下你可能會想要使用JACK。

如果您想要一個便攜式解決方案,您可能需要認真對待插件選項。找到適用於所有平臺的便攜式免費軟件媒體播放器,併爲此制定範圍插件。

對於示波器,您將希望獲得關於數字信號處理(「DSP」)的書。您可能需要使用離散傅里葉變換(「DFT」)來獲取離散音頻樣本的頻率信息;一個DFT庫可能會被稱爲「FFT」庫(「FFT」是「快速傅立葉變換」的縮寫)。

我最喜歡的DSP單本書是:Richard G. Lyons的Understanding Digital Signal Processing

編輯:順便說一下,大多數媒體播放器都有「可視化」插件,其中一些是基於頻率的顯示器。 (有些人甚至有像「範圍」這樣的名字。)是否有媒體播放器已經完成了你想要的顯示?

+0

JACK在OSX,Linux,Windows中運行。 – 2009-11-30 10:49:03

+0

JACk運行在上述所有內容中,但我不確定它是否可以掛接所有聲音的輸出,或者它只能掛接使用JACK播放的音頻流。如果JACK可以捕獲所有音頻輸出,即使音頻沒有使用JACK播放,它也是完美的跨平臺解決方案。 – steveha 2009-11-30 19:02:19

+0

太棒了,謝謝!這對我個人的快樂和教育來說比其他任何事情都要多,所以使用CoreAudio和PortAudio應該這樣做! 謝謝! – Isaac 2009-12-01 04:26:50

1

我過去使用了SoundflowerPyAudio的組合來達到類似的目的。

Soundflower允許您將所有音頻輸出路由到可由PyAudio讀取的輸入。

如果您希望使用C++而不是python,請使用PyAudio庫所基於的PortAudio

+0

感謝cobbal,我一定會再看一些Soundflower和PyAudio。當然,還有PortAudio。 – Isaac 2009-12-01 04:27:22