在使用波形格式音频文件中的webrctvad获取二进制结果时,我遇到了一个问题。我使用librosa来加载.wav格式的音频文件。有人能告诉我如何使用librosa和webrtcvad来获得音频是否包含语音的二进制输出吗?
上面的链接帮助了我很多,但我仍然感到困惑,因为这个链接包含了一个很好的解释,但是在实现过程中出现了很多错误。
发布于 2020-05-16 11:28:15
皮韦特瓦德,期望音频数据是16位PCM小端-因为这是最常见的存储格式在WAV文件。
然而,librosa及其底层I/O库pysoundfile总是返回范围[-1.0, 1.0]中的浮点数组。若要将此转换为包含16位PCM的字节,可以使用以下float_to_pcm16函数。
我已经测试过使用read_pcm16函数,这是read_wave在官方py-webrtcvad示例中的直接替代。但允许打开任何音频文件支持的声音文件(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_ratehttps://stackoverflow.com/questions/61777371
复制相似问题