我有一个固定的立体声麦克风和一个旋转的相机。
如何在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
一切正常。现在,如果我想交换接收器,以使LEFT / RIGHT输出变为RIGHT / LEFT,则什么也不会发生。我在documentation上看到这可能行不通,它说“ “尚不支持更改输入上限”。
如果出于某些原因您希望在应该更改的地方查看代码:
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");
}
但是,当然,如果不支持此功能,则遵循该路线没有意义。
因此,还有另一个插件/元素可以让我动态交换左右声道吗?
答案 0 :(得分:0)
audioconvert
元素具有mix-matrix
属性。看起来您可以根据需要进行处理。查看有关该属性的文档:
对于立体声切换,我相信它看起来像这样:
mix-matrix="<<(float)0.0, (float)1.0>, <(float)1.0, (float)0.0>>"
我还没尝试过。