私は、ポケットフィンクスの 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 " + // レベル間隔はナノ秒
"! wavenc " +
"! filesink location=audioz.wav"
);
ソースに音声が入っていないときにストリーミングが停止することを除けば、問題なく動作します。
VAD とは独立してレコーディングを継続したいので、このパイプラインを tee で試しました。
Gst.parse_launch(
"pulsesrc device=\"alsa_input.usb-046d_08c9_674634A4-02-U0x46d0x8c9.analog-mono\" " +
"! tee name=t " +
"! キュー " +
"! vader name=vad auto-threshold=true " +
"! fakesink t.sync=false" +
"! キュー " +
"! level name=wavelevel interval=100000000 " + // レベル間隔はナノ秒
"! 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\" " +
" ! ティー名=t" +
" t.! キュー " +
" ! vader name=vad auto-threshold=true " +
" t.! キュー " +
" ! level name=wavelevel interval=1000000000 " + // レベル間隔はナノ秒単位
" ! wavenc " +
" ! filesink location=audioz.wav"
);
残りの問題は、シンクなしでキューを使用してもよいかどうかです...