我有这个使用 pocketsphinx 的 VAD 元素的管道:
Gst.parse_launch( "pulsesrc 设备=\"alsa_input.usb-046d_08c9_674634A4-02-U0x46d0x8c9.analog-mono\" " + "! vader 名称=vad 自动阈值=true" + "!level name=wavelevel interval=100000000 " + // 级别间隔以纳秒为单位 "!wavenc" + “!文件接收器位置=audioz.wav” );
它工作正常,只是当源中没有声音时流停止。
我想独立于 VAD 继续录制,所以我用 tee 尝试了这条管道:
Gst.parse_launch( "pulsesrc 设备=\"alsa_input.usb-046d_08c9_674634A4-02-U0x46d0x8c9.analog-mono\" " + “!三通名称=t”+ "!队列" + "! vader 名称=vad 自动阈值=true" + "! fakesink t.sync=false" + "!队列" + "!level name=wavelevel interval=100000000 " + // 级别间隔以纳秒为单位 "!wavenc" + “!文件接收器位置=audioz.wav” );
而这个总是停顿,状态从 NULL -> READY -> PAUSE 变为 PAUSE 时永远停顿。
“独立VAD”的目标只是记录语音片段的开始和结束时间(由VAD检测)。
更新 :
评论这一行:“! fakesink t.sync=false”解决了这个问题,所以下面的管道可以满足我的需要:
this.pipeline = Gst.parse_launch( "pulsesrc 设备=\"alsa_input.usb-046d_08c9_674634A4-02-U0x46d0x8c9.analog-mono\" " + " ! 三通名称=t" + " t. ! 队列 " + " ! vader 名称=vad 自动阈值=true " + " t. ! 队列 " + " !level name=wavelevel interval=1000000000 " + // 级别间隔以纳秒为单位 " !wavenc " + “!文件接收器位置=audioz.wav” );
剩下的问题是没有接收器的队列是否可以......