语音 Activity 检测

Voice Activity Detection

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

Webrtcvad module works correctly with the wave module

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

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

librosa 及其基础 I/O 库 pysoundfile 但是总是 returns 范围 [-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