Adafruit I2S MEMS 麦克风不适用于语音 activity 检测系统

Adafruit I2S MEMS microphone is not working with voice activity detection system

我正在尝试使用 raspberry pi 向文本系统发表演讲。 VAD 有很多问题。我正在使用 DeepCpeech 的 VAD 脚本。 Adafruit I2S MEMS 麦克风仅接受 32 位 PCM 音频。所以我修改了脚本来录制 32 位音频,然后将其转换为 16 位以供 DeepSpeech 处理。框架生成和对话部分如下:

for frame in frames:
    if frame is not None:
        if spinner: spinner.start()
        #Get frame generated by PyAudio and Webrtcvad
        dp_frame = np.frombuffer(frame, np.int32)
        #Covert to 16-bit PCM
        dp_frame=(dp_frame>>16).astype(np.int16)
        #Convert speech to text
        stream_context.feedAudioContent(dp_frame)

PyAudio 配置为:

'format': paInt32,
'channels': 1,
'rate': 16000,

当 VAD 启动时,它总是生成非空帧,即使周围没有声音也是如此。但是当我每 5 秒设置一个计时器时,它表明录制已成功完成。我认为问题在于能量(电压)会增加一些噪音,这就是麦克风无法检测到静音和结束帧生成的原因。如何解决这个问题?

我搜索了DeepCpeech的VAD脚本,找到了。问题与 webrtcvad 有关。 webrtcvad VAD 仅接受 16 位单声道 PCM 音频,采样频率为 8000、16000、32000 或 48000 Hz。所以你需要把32位的帧转成16位的(我说的是PyAudio输出帧)来处理webrtcvad.is_speech()。我改变了,它工作正常。