gstreamer 在静音时停止从 alsasrc(线路输入、CD 等)录制
gstreamer stop recording from alsasrc (line-in, cd, etc) on silence
想法是在有声音时从线路输入录制(调谐器连接到线路输入或 CD)。
我现在要做的是启动代码,当大约2秒没有声音时自动停止录音。我应该怎么做?
类似 Udpsrc 属性 的东西叫做 "timeout"。
您可以在管道 [1] 中使用关卡元素。这将 post GstBus 上的音频电平。例如,您可以使用 1 秒的间隔,如果两个连续的消息具有低 rms (< -96),您 post 一个 eos 到管道。
快速示例(已编辑输出):
GST_DEBUG="level:6" gst-launch-1.0 2>&1 audiotestsrc wave=silence num-buffers=10 ! level post-messages=true ! fakesink | grep ": RMS"
gstlevel.c:766:gst_level_post_message:<level0> message: RMS -700.000000 dB, peak -350.000000 dB, decay -350.000000 dB
gstlevel.c:766:gst_level_post_message:<level0> message: RMS -700.000000 dB, peak -350.000000 dB, decay -350.000000 dB
gstlevel.c:766:gst_level_post_message:<level0> message: RMS -700.000000 dB, peak -350.000000 dB, decay -350.000000 dB
想法是在有声音时从线路输入录制(调谐器连接到线路输入或 CD)。 我现在要做的是启动代码,当大约2秒没有声音时自动停止录音。我应该怎么做?
类似 Udpsrc 属性 的东西叫做 "timeout"。
您可以在管道 [1] 中使用关卡元素。这将 post GstBus 上的音频电平。例如,您可以使用 1 秒的间隔,如果两个连续的消息具有低 rms (< -96),您 post 一个 eos 到管道。
快速示例(已编辑输出):
GST_DEBUG="level:6" gst-launch-1.0 2>&1 audiotestsrc wave=silence num-buffers=10 ! level post-messages=true ! fakesink | grep ": RMS"
gstlevel.c:766:gst_level_post_message:<level0> message: RMS -700.000000 dB, peak -350.000000 dB, decay -350.000000 dB
gstlevel.c:766:gst_level_post_message:<level0> message: RMS -700.000000 dB, peak -350.000000 dB, decay -350.000000 dB
gstlevel.c:766:gst_level_post_message:<level0> message: RMS -700.000000 dB, peak -350.000000 dB, decay -350.000000 dB