Добавление и удаление источников звука в / из конвейера GStreamer на ходу

Я написал небольшой скрипт Python, который использует плагин Adder для смешивания двух исходных потоков вместе.

После запуска программы вы слышите тон 1 кГц, генерируемый плагин audiotestsrc . Когда вы нажимаете Enter, еще один тестовый сигнал частотой 500 Гц подключается к сумматору , так что вы слышите их вместе. (Кстати, я действительно не понимаю, почему я должен снова установить конвейер в состояние воспроизведения, чтобы услышать микс. Есть ли способ подключить новые источники без перезапуска конвейера?)

Когда вы снова нажимаете Enter, тон 1 кГц должен быть удален из микса, а тон 500 Гц должен продолжать воспроизводиться, но вместо этого я ничего не слышу больше. Я получаю импульсный импульс . Pulsesink.c: 528: gst_pulsering_stream_underflow_cb: В последней строке отладочного вывода обнаружено недополнение . Я действительно не знаю, что попробовать дальше.

Вот полный исходный код:

#!/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.")
5
задан NagyI 10 October 2010 в 16:31
поделиться