Skip to main content
 首页 » 编程设计

python之尝试使用 webrtcvad 时出错

2024年08月22日50lvdongjie

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

请您参考如下方法:

webrtcvad 期望缓冲区是一个带有数据字节的字符串,而不是一个 float 数组。你可以做类似的事情

fr = np.int16(Z[100] * 32768).tobytes() 
vad.is_speech(fr, fs)