python---webRTC~vad静音检测-学习笔记
參考:
- https://blog.csdn.net/u012123989/article/details/72771667
webRTC~vad
1. mode
- 0 ---- quality mode
- 1 ---- low bitrate mode
- 2 ---- aggressive mode
- 3 ---- very aggressive mode
2. webRTC~vad只支持10ms, 20ms, 30ms的幀frame判斷。
3. webRTC~vad只支持8k采樣率
4. 在8k采樣基礎(chǔ)上
(1) 計算子帶能量, feature vector
(2) 通過高斯混合模型分別計算語音和非語音的概率,使用假設(shè)檢驗的方法確定信號的類。
- 首先通過高斯模型計算假設(shè)檢驗中的H0和H1,通過門限判決vadflag。
- 然后更新概率計算所需要的語音均值(speech_means)、噪聲均值(noise_means)、語音方差(speech_stds)、噪聲方差(noise_stds)。
----------筆記1:反正我是沒看懂,推薦看webRTC英文簡介中的vad部分;
idea:如果實時更新 + collections.deque(maxlen)應(yīng)用到自適應(yīng)領(lǐng)域,去做靜音檢測和噪音消除,可行嗎?
5. 代碼-python
import pyaudio
import webrtcvad
vad = webrtcvad.Vad(1)
stream = pyaudio.open(......)
chunk = stream.read(chunk_size)
active = vad.is_speech(chunk, RATE)
--------筆記2: 我個人筆記:python--webRTC~vad對于聲音的判斷效果很差,pyaudio等在錄音過程中會有電流脈/機(jī)器本身運行的聲音干擾,vad.is_speech會將電流脈聲音判斷為有效語音,干擾很大。
- portaudio用于音頻采集,有兩種機(jī)制:阻塞和回調(diào)。阻塞,自己設(shè)定時間, 不管有沒有數(shù)據(jù)都要返回;回調(diào),有有效數(shù)據(jù)的時候才會調(diào)用這個函數(shù)返回數(shù)據(jù)。?-----吐嘈:如果python相關(guān)包能實現(xiàn)回調(diào)的功能,那靜音檢測還需要做嗎?疑問?
- pyaudio可以從設(shè)備節(jié)點讀取原始音頻流數(shù)據(jù),音頻編碼是PCM格式;
- struct.pack(fmt, v1, v2)
return a string containing the values v1,v2....packed according to the given format. the arguments must match the values required by the format exactly.
struct.pach用于將python值根據(jù)格式符,轉(zhuǎn)換為字符串。(因為python中沒有字節(jié)Byte類型,可以把這里的字符串理解為字節(jié)流或字節(jié)數(shù)組)
example1: struct類型表。'i'表示integer; ‘ii'表示轉(zhuǎn)換兩個值v1,v2為integer數(shù)據(jù);byte 0xff表示一個十六字節(jié),無符號整數(shù)。
example2:struct.pack('>i4sh', 7, b'spam', 8)
fmt=‘>i4sh',這種格式符是一種linux命令.
'>'是c和python中的一種數(shù)據(jù)結(jié)構(gòu)
’i' int---interger---7
4s----char-----string對應(yīng)spam
‘h’----unsigned short------integer---8
- array.array(type code[, initalizer])
a new array whose items are restricted by type code
'h' -----signed short-----int----2
- signal.signal(signalnum, handler)這個模塊提供了python內(nèi)部的信號處理機(jī)制,一旦出現(xiàn)signalnum信號,就執(zhí)行handler函數(shù)
python signal信號類型:SIGINT終止進(jìn)程,中斷進(jìn)程
- collections.deque(maxlen=)通過maxlen限制deque隊列中的幀數(shù)
collections是python內(nèi)建的一個集合模塊,提供了許多有用的集合類
deque()為了高效實現(xiàn)插入和刪除操作的雙向列表,適用于棧和對列:append(), appendleft(); pop(), popleft(),而list是線性列表,在數(shù)據(jù)量大的時候插入和刪除的效率很低。
- python~assert簡便地設(shè)置斷點debugging
- python~yield是一個類似return的關(guān)鍵字,只是這個函數(shù)返回多個值的生成器,并不立即執(zhí)行。
question1:在pyaudio.stream錄音過程中,突然拔掉麥克風(fēng),會莫名其妙的多錄入1000多塊chunk的電流脈聲。
question2: webrtcvad并不能及時、準(zhǔn)確的檢測出靜音,如果靜音檢測達(dá)不到及時準(zhǔn)確的要求,延遲在2-4s以上,靜音檢測就沒有多大意義了。
總結(jié)
以上是生活随笔為你收集整理的python---webRTC~vad静音检测-学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转载] js 读取和输出txt文件
- 下一篇: 小波变换学习~语音端点检测