我正在尝试使用webrtcvad 2.0.8进行语音活动检测。这个https://pypi.python.org/pypi/webrtcvad提供了基本程序。当我尝试按如下方式实现它时,我收到错误。 我的代码:
import webrtcvad
from scipy.io import wavfile
import scipy
source1 = path + "phone1.wav"
fs, audio = wavfile.read(source1)
audio_n = audio/float(2**15)
vad = webrtcvad.Vad(3)
def audioSlice(x, fs, framesz, hop):
framesamp = int(framesz*fs)
hopsamp = int(hop*fs)
X = scipy.array([x[i:i+framesamp] for i in range(0, len(x)-framesamp, hopsamp)])
return X
framesz=10./1000 #10 ms
hop = 1.0*framesz
Z = audioSlice(audio_n, fs, framesz, hop)
vad.is_speech(Z[100], fs)
我得到的错误是:
is_speech(self, buf, sample_rate, length)
25 'buffer has %s frames, but length argument was %s' % (
26 int(len(buf) / 2.0), length))
---> 27 return _webrtcvad.process(self._vad, sample_rate, buf, length)
28
29
Error: Error while processing frame
答案 0 :(得分:3)
webrtcvad期望buffer是一个包含数据字节的字符串,而不是一个浮点数组。你可以做点什么
fr = np.int16(Z[100] * 32768).tobytes()
vad.is_speech(fr, fs)