我有这个使用 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”
);
剩下的问题是没有接收器的队列是否可以......