0

我有这个使用 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”
            );

剩下的问题是没有接收器的队列是否可以......

4

1 回答 1

1

最简单的解决方案是在两个接收器上设置 async=0。(fakesink 和文件接收器)

于 2013-10-22T07:11:34.077 回答