參考:python
- https://blog.csdn.net/u012123989/article/details/72771667
webRTC~vadlinux
1. modeweb
- 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採樣基礎上app
(1) 計算子帶能量, feature vectoride
(2) 經過高斯混合模型分別計算語音和非語音的機率,使用假設檢驗的方法肯定信號的類。函數
- 首先經過高斯模型計算假設檢驗中的H0和H1,經過門限判決vadflag。
- 而後更新機率計算所須要的語音均值(speech_means)、噪聲均值(noise_means)、語音方差(speech_stds)、噪聲方差(noise_stds)。
----------筆記1:反正我是沒看懂,推薦看webRTC英文簡介中的vad部分;ui
idea:若是實時更新 + collections.deque(maxlen)應用到自適應領域,去作靜音檢測和噪音消除,可行嗎?編碼
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等在錄音過程當中會有電流脈/機器自己運行的聲音干擾,vad.is_speech會將電流脈聲音判斷爲有效語音,干擾很大。
- portaudio用於音頻採集,有兩種機制:阻塞和回調。阻塞,本身設定時間, 無論有沒有數據都要返回;回調,有有效數據的時候纔會調用這個函數返回數據。 -----吐嘈:若是python相關包能實現回調的功能,那靜音檢測還須要作嗎?疑問?
- pyaudio能夠從設備節點讀取原始音頻流數據,音頻編碼是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值根據格式符,轉換爲字符串。(由於python中沒有字節Byte類型,能夠把這裏的字符串理解爲字節流或字節數組)
example1: struct類型表。'i'表示integer; ‘ii'表示轉換兩個值v1,v2爲integer數據;byte 0xff表示一個十六字節,無符號整數。
example2:struct.pack('>i4sh', 7, b'spam', 8)
fmt=‘>i4sh',這種格式符是一種linux命令.
'>'是c和python中的一種數據結構
’i' int---interger---7
4s----char-----string對應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內部的信號處理機制,一旦出現signalnum信號,就執行handler函數
python signal信號類型:SIGINT終止進程,中斷進程
- collections.deque(maxlen=)經過maxlen限制deque隊列中的幀數
collections是python內建的一個集合模塊,提供了許多有用的集合類
deque()爲了高效實現插入和刪除操做的雙向列表,適用於棧和對列:append(), appendleft(); pop(), popleft(),而list是線性列表,在數據量大的時候插入和刪除的效率很低。
- python~assert簡便地設置斷點debugging
- python~yield是一個相似return的關鍵字,只是這個函數返回多個值的生成器,並不當即執行。
question1:在pyaudio.stream錄音過程當中,忽然拔掉麥克風,會莫名其妙的多錄入1000多塊chunk的電流脈聲。
question2: webrtcvad並不能及時、準確的檢測出靜音,若是靜音檢測達不到及時準確的要求,延遲在2-4s以上,靜音檢測就沒有多大意義了。