尝试在波形格式音频文件中使用webrctvad获得二进制结果时遇到问题。我使用librosa以便以.wav格式加载音频文件。谁能告诉我如何结合使用librosa和webrtcvad来获取音频是否包含语音的二进制输出?
Webrtcvad module works correctly with the wave module
上面的链接对我有很大帮助,但是仍然很困惑,因为该链接包含了很好的解释,但是在实现过程中会出现很多错误。
最佳答案
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
关于python-3.x - 语音事件检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61777371/