我写了一个小 Python 脚本,它使用一个Adder
插件将两个源流混合在一起。
audiotestsrc
启动程序后,您会听到插件生成的 1kHz 音调。当您按下 Enter 时,另一个 500Hz 的测试音会连接到 ,Adder
因此您可以一起听到它们。(顺便说一句,我真的不明白为什么要在这里再次将管道设置为播放状态以听到混音。有什么方法可以插入新的源而无需重新启动管道?)
当您再次按 Enter 时,应从混音中删除 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.")