zoukankan      html  css  js  c++  java
  • 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采样基础上

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

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

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

    天狼啸月
  • 相关阅读:
    laravel 生成key
    nginx thinkphp5 多入口配置
    php微信退款通知 解密
    微信退款 报错 SSL certificate not found: cert/apiclient_cert.pem
    laradock 进入 工作区
    laradock mysql 报错 No such file or directory,Connection refused
    mac 安装数据库管理软件 sequel-pro
    docker windows7 安装
    [USACO10FEB] 吃巧克力Chocolate Eating (二分答案)
    P1613 跑路 (最短路,倍增)
  • 原文地址:https://www.cnblogs.com/yuyongsheng1990/p/9530346.html
Copyright © 2011-2022 走看看