Как динамически поменять местами левый / правый аудиовыход в Gstreamer - PullRequest
0 голосов
/ 28 января 2019

У меня есть стереомикрофон с фиксированным положением и вращающаяся камера.

Как динамически менять местами аудиоканалы в GStreamer, чтобы в наушниках LEFT / RIGHT выводил либо LEFT / RIGHT, либо RIGHT / LEFT.

В настоящее время я могу поменять их при запуске, но после запуска потока я не могу его изменить.

Мой конвейер в C будет выглядеть так:

gst-launch-1.0 alsasrc device=plughw:1,0  buffer-time=35000 ! 
    audio/x-raw,channels=2 ! audioamplify amplification=10.0 ! 
    deinterleave name=d interleave name=i ! pulsesink  d.src_0 ! 
    queue ! volume volume=1 ! i.sink_0 d.src_1 ! queue ! 
    volume volume=1 ! i.sink_1

Это все отлично работает.Теперь, если я хочу поменять приемники, чтобы выходной сигнал ВЛЕВО / ВПРАВО становился ВПРАВО / ВЛЕВО, ничего не происходит.В документации я вижу, что это, вероятно, не сработает, и там сказано: "Смена заглавных букв ввода _ еще не поддерживается".

Если по какой-то причинеВы хотели бы видеть код, в котором он должен измениться:

void cb_interleave_pad(GstElement *element, GstPad *pad, dizzy_elements *data) {
    gst_element_unlink(data->volume_1, data->interleave);
    gst_element_unlink(data->volume_2, data->interleave);
    gst_element_link_pads(data->volume_1, "src", data->interleave, "sink_1");
    gst_element_link_pads(data->volume_2, "src", data->interleave, "sink_0");
}

void cb_interleave_pad_reverse(GstElement *element, GstPad *pad, dizzy_elements *data) {
    gst_element_unlink(data->volume_1, data->interleave);
    gst_element_unlink(data->volume_2, data->interleave);
    gst_element_link_pads(data->volume_1, "src", data->interleave, "sink_0");
    gst_element_link_pads(data->volume_2, "src", data->interleave, "sink_1");
}

Но, конечно, если эта функция не поддерживается, не имеет смысла следовать по этому маршруту.

Следовательно, есть ли другой плагин / элемент, который позволяет мне динамически менять левый и правый аудиоканалы?

1 Ответ

0 голосов
/ 29 января 2019

Элемент audioconvert имеет свойство mix-matrix.Похоже, что вы можете делать с ним, что вы хотите.Посмотрите документацию по этому свойству:

https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-audioconvert.html

Для переключения стерео я считаю, что это будет выглядеть так:

mix-matrix="<<(float)0.0, (float)1.0>, <(float)1.0, (float)0.0>>"

Я не пробовал, хотя.

...