我编写了一个小Python脚本,它使用一个Adder
插件将两个源流混合在一起。
启动程序后,您将听到由audiotestsrc
插件生成的1kHz音调。当您按Enter键时,另一个500Hz的测试音连接到Adder
上,所以您可以同时听到它们。(顺便说一句,我真的不明白为什么我要把管道重新设置到播放状态来听混音。有没有什么方法可以在不重启管道的情况下插入新的源代码?)
当你再次按回车键时,1kHz的音调应该从混音中删除,500Hz的音调应该继续播放,但是我什么也听不到了。最后一行是调试输出中的pulse pulsesink.c:528:gst_pulsering_stream_underflow_cb:<pulseaudio_output> Got underflow
。我真不知道下一步该怎么做。
以下是完整的源代码:
#!/usr/bin/python
# On-the-go source removal doesn't work this way with GStreamer. Why?
import gobject;
gobject.threads_init()
import gst;
if __name__ == "__main__":
pipe = gst.Pipeline("mypipe")
adder = gst.element_factory_make("adder","audiomixer")
pipe.add(adder)
buzzer = gst.element_factory_make("audiotestsrc","buzzer")
buzzer.set_property("freq",1000)
pipe.add(buzzer)
pulse = gst.element_factory_make("pulsesink", "pulseaudio_output")
pipe.add(pulse)
buzzer.link(adder)
adder.link(pulse)
pipe.set_state(gst.STATE_PLAYING)
raw_input("1kHz test sound. Press <ENTER> to continue.")
buzzer2=gst.element_factory_make("audiotestsrc","buzzer2")
buzzer2.set_property("freq",500)
pipe.add(buzzer2)
buzzer2.link(adder)
pipe.set_state(gst.STATE_PLAYING)
raw_input("1kHz + 500Hz test sound playing simoultenously. Press <ENTER> to continue.")
buzzer.unlink(adder)
pipe.set_state(gst.STATE_PLAYING)
raw_input("Only 500Hz test sound. Press <ENTER> to stop.")
我自己找到了解决办法。我必须使用带有
Adder
的请求板,并使用GStreamer的pad blocking功能。下面是工作源代码,其中包含一些说明:
相关问题 更多 >
编程相关推荐