语音 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
我在尝试使用 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