Ich schrieb ein kleines Python-Skript, das ein Adder
-Plugin verwendet, um zwei Quellströme zusammen zu mischen.Hinzufügen und Entfernen von Audioquellen zu/von GStreamer-Pipeline unterwegs
Nach dem Start des Programms hören Sie einen 1 kHz-Ton, der vom -Plugin erzeugt wird. Wenn Sie die Eingabetaste drücken, wird ein weiterer 500 Hz Testton an die Adder
angeschlossen, so dass Sie sie zusammen hören. (Übrigens, ich verstehe nicht wirklich, warum sollte ich die Pipeline wieder spielen Zustand hier, um die Mischung zu hören. Gibt es eine Möglichkeit, ich kann neue Quellen anschließen, ohne die Pipeline neu starten?)
Wann Du drückst noch einmal Enter, der 1kHz-Ton sollte aus dem Mix genommen werden und der 500Hz-Ton sollte weiterspielen, stattdessen höre ich nichts mehr. Ich bekomme eine pulse pulsesink.c:528:gst_pulsering_stream_underflow_cb:<pulseaudio_output> Got underflow
in der Debug-Ausgabe als letzte Zeile. Ich weiß nicht wirklich, was ich als nächstes versuchen soll.
Hier ist der vollständige Quellcode:
#!/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.")