我有这个使用pocketsphinx的VAD元素的管道:
Gst.parse_launch( "pulsesrc device=\"alsa_input.usb-046d_08c9_674634A4-02-U0x46d0x8c9.analog-mono\" " + "! vader name=vad auto-threshold=true " + "! level name=wavelevel interval=100000000 " + // level interval is in nanoseconds "! wavenc " + "! filesink location=audioz.wav" );
它工作正常,只是当没有语音传入时流式传输停止 资源。
我想录制以独立于VAD继续录制, 所以我用发球台尝试了这个管道:
Gst.parse_launch( "pulsesrc device=\"alsa_input.usb-046d_08c9_674634A4-02-U0x46d0x8c9.analog-mono\" " + "! tee name=t " + "! queue " + "! vader name=vad auto-threshold=true " + "! fakesink t. sync=false" + "! queue " + "! level name=wavelevel interval=100000000 " + // level interval is in nanoseconds "! wavenc " + "! filesink location=audioz.wav" );
这个总是停滞不前,状态从NULL开始 - >准备 - >暂停, 并在PAUSE上永远停止。
“独立VAD”的目标只是记录开始和结束时间 语音段(由VAD检测)。
评论该行:“!fakesink t.sync = false” 解决了这个问题,因此以下管道可以满足我的需求:
this.pipeline = Gst.parse_launch( "pulsesrc device=\"alsa_input.usb-046d_08c9_674634A4-02-U0x46d0x8c9.analog-mono\" " + " ! tee name=t" + " t. ! queue " + " ! vader name=vad auto-threshold=true " + " t. ! queue " + " ! level name=wavelevel interval=1000000000 " + // level interval is in nanoseconds " ! wavenc " + " ! filesink location=audioz.wav" );
剩下的问题是如果没有接收器的队列是可以的......
答案 0 :(得分:1)
最简单的解决方案是在两个接收器上设置async = 0。 (fakesink和filesink)