参考:
webRTC~vad
1. mode
2. webRTC~vad只支持10ms, 20ms, 30ms的帧frame判断。
3. webRTC~vad只支持8k采样率
4. 在8k采样基础上
(1) 计算子带能量, feature vector
(2) 通过高斯混合模型分别计算语音和非语音的概率,使用假设检验的方法确定信号的类。
----------笔记1:反正我是没看懂,推荐看webRTC英文简介中的vad部分;
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会将电流脉声音判断为有效语音,干扰很大。
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
a new array whose items are restricted by type code
'h' -----signed short-----int----2
python signal信号类型:SIGINT终止进程,中断进程
collections是python内建的一个集合模块,提供了许多有用的集合类
deque()为了高效实现插入和删除操作的双向列表,适用于栈和对列:append(), appendleft(); pop(), popleft(),而list是线性列表,在数据量大的时候插入和删除的效率很低。
question1:在pyaudio.stream录音过程中,突然拔掉麦克风,会莫名其妙的多录入1000多块chunk的电流脉声。
question2: webrtcvad并不能及时、准确的检测出静音,如果静音检测达不到及时准确的要求,延迟在2-4s以上,静音检测就没有多大意义了。