糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > python---webRTC~vad静音检测-学习笔记

python---webRTC~vad静音检测-学习笔记

时间:2024-08-29 17:53:23

相关推荐

python---webRTC~vad静音检测-学习笔记

参考:

/u012123989/article/details/72771667

webRTC~vad

1. mode

0 ---- quality mode1 ---- low bitrate mode2 ---- aggressive mode3 ---- very aggressive mode

2. webRTC~vad只支持10ms, 20ms, 30ms的帧frame判断。

3. webRTC~vad只支持8k采样率

4. 在8k采样基础上

(1) 计算子带能量, feature vector

(2) 通过高斯混合模型分别计算语音和非语音的概率,使用假设检验的方法确定信号的类。

首先通过高斯模型计算假设检验中的H0和H1,通过门限判决vadflag。然后更新概率计算所需要的语音均值(speech_means)、噪声均值(noise_means)、语音方差(speech_stds)、噪声方差(noise_stds)。

----------笔记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会将电流脉声音判断为有效语音,干扰很大。

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简便地设置断点debuggingpython~yield是一个类似return的关键字,只是这个函数返回多个值的生成器,并不立即执行。

question1:在pyaudio.stream录音过程中,突然拔掉麦克风,会莫名其妙的多录入1000多块chunk的电流脉声。

question2: webrtcvad并不能及时准确的检测出静音,如果静音检测达不到及时准确的要求,延迟在2-4s以上,静音检测就没有多大意义了。

如果觉得《python---webRTC~vad静音检测-学习笔记》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。