GStreamer: ввести задержку / разрыв / сдвиг в аудио
У меня есть следующие настройки конвейера в gstreamer:
два импульсных аудиоисточника (pulsesrc) от двух отдельных аудиоинтерфейсов USB и один импульсный аудиоисточник (Pulsesink). Я объединяю два входящих аудиопотока, используя компонент сумматора. К сожалению, между двумя аудиоканалами есть небольшая задержка.
pulsesrc1 --- queue --- audioconvert --- audioresample --- |
| adder --- queue --- | pulsesink
pulsesrc2 --- queue --- audioconvert --- audioresample --- |
Я использую системное время / часы для синхронизации. Оба аудиоинтерфейса подключены к одному и тому же usb-концентратору. Я предполагаю, что аудио уже имеет небольшую задержку, прежде чем оно даже будет воспринято источниками (из-за разных часов).
Вот почему я хотел бы ввести задержку / разрыв / сдвиг в первый аудиоканал (2-й отстает немного), чтобы компенсировать это.
До сих пор я пытался установить свойство "min-threshold-time" первой очереди. К сожалению, конвейер компенсирует эту задержку, и оба аудиопотока одинаково задерживаются. Я также проверил элемент "audioecho". К сожалению, отсутствует свойство "сухой / мокрый". Это означает, что исходный сигнал всегда воспроизводится в исходное время, а затем включается хвост задержки (что мне совсем не помогает).
Есть еще идеи, как решить эту проблему? Может быть, добавить разрыв молчания? Или другие параметры, которые я мог пропустить.
Я реализовал этот конвейер, используя Python. Заранее спасибо!
1 ответ
Вы можете использовать минимальное пороговое время / байты в очереди, чтобы задержать отправку данных по остальной части конвейера? Я думаю, что это должно работать. Только если это не пойдет на это:
http://gentrans.sourceforge.net/docs/head/gst-entrans-plugins/html/gst-entrans-plugins-shift.html
или измените плагин Frie0r задержки для аудио.