【问题标题】:Voice Activity Detection语音活动检测
【发布时间】:2020-05-13 14:33:32
【问题描述】:

我在尝试使用 webrctvad 在波形音频文件中获取二进制结果时遇到问题。我正在使用 librosa 以加载 .wav 格式的音频文件。谁能告诉我如何使用 librosa 和 webrtcvad 以获得音频是否包含语音的二进制输出?

Webrtcvad module works correctly with the wave module

上面的链接对我帮助很大,但我仍然感到困惑,因为链接包含一个很好的解释,但在实施过程中会出现很多错误。

【问题讨论】:

  • 到目前为止您的代码是什么样的,您遇到了什么错误?

标签: python-3.x numpy audio speech-recognition librosa


【解决方案1】:

py-webrtcvad,期望音频数据为 16 位 PCM little-endian - 这是 WAV 文件中最常见的存储格式。

librosa 及其底层 I/O 库 pysoundfile 但是始终返回范围 [-1.0, 1.0] 内的浮点数组。要将其转换为包含 16 位 PCM 的字节,您可以使用以下 float_to_pcm16 函数。

并且我已经测试使用read_pcm16 函数直接替换官方py-webrtcvad example 中的read_wave。但允许打开声音文件(WAV、FLAC、OGG)等支持的任何音频文件。

def float_to_pcm16(audio):
    import numpy

    ints = (audio * 32767).astype(numpy.int16)
    little_endian = ints.astype('<u2')
    buf = little_endian.tostring()
    return buf


def read_pcm16(path):
    import soundfile

    audio, sample_rate = soundfile.read(path)
    assert sample_rate in (8000, 16000, 32000, 48000)
    pcm_data = float_to_pcm16(audio)
    return pcm_data, sample_rate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2018-12-29
    • 2016-03-21
    • 1970-01-01
    • 2020-07-05
    相关资源
    最近更新 更多