У меня есть этот конвейер, который использует элемент VAD pocketsphinx:
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 -> READY -> PAUSE и навсегда останавливается на 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" );
Остается вопрос, можно ли иметь очередь без раковины...