我有類似的問題。我通過網絡處理很多音頻。我必須自動檢查音頻降級,音頻播放等。我無法真正找到一個庫來幫助我在Groovy或Ruby(我沒有檢查Python),所以我打電話給已安裝的程序(sox)並且它會檢查是否聽到音頻的實時。
這是我的電話的Groovy /腳本:
def audioCheck = "sox -t coreaudio Soundflower /Users/me/project/record.wav silence 1 0.1 1% 1 .1 1%".execute()
audioCheck.waitFor()
println "EXIT VALUE FOR SOX IS: ${audioCheck.exitValue()}"
if(audioCheck.exitValue() == 0){
// some stuff would happen now, if exit code is 0
}
關於核心音頻和 「Soundflower」
紅襪調用指定音頻板與-t CoreAudio的(在Linux上你可能會使用alsa而不是'coreaudio' - coreauduio是OSX音頻接口。)「Soundflower」參數是我在Soundflower中創建的通道。例如,如果您使用默認頻道,例如alsa默認或coreaudio默認,它會選擇您的麥克風...所以如果你身邊的那個人打了打噴嚏......它會破壞測試。
通過使用虛擬音頻通道(例如OSX上的Soundflower),您可以將所有音頻設置爲「out」,然後在該通道上運行sox命令......並且您將只會正在收聽來自虛擬頻道的系統音頻。
您可以改爲使用默認頻道(但是當聽到在房間裏其他的聲音也就會結束了。)
我跑了異步代碼使用Groovy的任務......,這樣的代碼被包裹在這樣的:
def listener = task { ... my script above ... }
由於它是異步偵聽的,它不會阻塞測試的其餘部分。
紅襪命令
我實際使用的SOX實時指揮,從這傢伙的視頻一(檢查出來,因爲他使用了一些不同的參數):
https://www.youtube.com/watch?v=Q5ntlKE0ze4
擴展它
我把它推進了一點,能夠自動錄製播放的音頻瀏覽器,然後使用PESQ算法來確定錄製的音頻與正在播放的原始音頻的接近程度。如果你感興趣的是,隨時檢查出我的帖子就可以了:
http://sdet.us/webrtc-audio-quality-automation-with-pesq/
Python的PCAP刮
也許無關,你在做什麼,但我也玩弄了使用Pyshark庫重建音頻數據包捕獲...它更復雜,也許更脆弱。但是,如果感興趣,這是我實現:
http://sdet.us/python-pcap-parsing-audio-from-sip-call/
恐怕這不是一個能的webdriver處理。 – alecxe 2014-08-27 20:28:15
我想過這麼多。可能不得不依靠python或其他東西。 – 2014-08-27 20:35:27
我不知道你會怎麼做這麼短的查詢操作系統的音頻系統報告Selenium發起的瀏覽器是否發送任何音頻。 – Louis 2014-08-27 21:43:56