2010-10-10 31 views
0

我想獲得聲音級別,因此在錄製聲音時可以在我的SDL應用程序(平臺爲Linux)中顯示它。我怎樣才能做到這一點?我在我的應用程序中使用FMOD API,但爲了錄製,我使用了SoX(分支並使用exec()來設置它 - 可能這樣做會更好,但我不知道如何:()。可以直接訪問/ dev/dsp來獲取聲音數據嗎?在C++中錄製時從設備獲取聲音級別

回答

1

如果您喜歡,您可以在FMOD中進行錄製,可以使用System :: recordStart和System :: getRecordDriverInfo等FMOD API FMOD發佈的錄製示例可作爲解決方案的基礎。

專門爲獲取聲音提供el,如果你想將它作爲運行時的東西,你可以使用Channel :: getWaveData,它會給你一個當前播放音頻的快照,因此你需要播放錄製數據。

或者,您也可以使用Sound :: lock/Sound :: unlock來訪問錄製聲音數據,如果它沒有播放。

通過任一方法訪問聲音數據後,您可以通過讀取值來獲取聲音級別/峯值信息。

+0

我試過使用FMOD,但是我想立即得到MP3編碼,而據我所知,它在Linux平臺上的FMOD中不起作用。 – mav 2010-10-15 05:14:33

+0

FMOD無法幫助編碼端,通過使用Sound :: lock並解鎖,您可以訪問原始PCM。如果你想把這些大塊的數據加入到蹩腳的東西中,那麼這絕對是可以製作MP3的,但是FMOD沒有內置到編碼支持中。 – 2010-10-19 23:16:52

1

不,至少應該使用「安全」的ALSA API。但是你應該考慮使用更高級的東西,比如Gostreamer或PulseAudio