gpt4 book ai didi

audio - 如何在 Gstreamer 中动态交换左/右音频输出

转载 作者:行者123 更新时间:2023-12-03 00:28:04 25 4
gpt4 key购买 nike

我有一个固定位置的立体声麦克风和一个旋转摄像头。

如何在 GStreamer 中动态交换音频 channel ,以便 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");
}

但是当然,如​​果不支持此功能,则遵循该路线是没有意义的。

因此,是否有另一个插件/元素可以让我动态交换左右声道?

最佳答案

audioconvert元素有 mix-matrix属性(property)。这看起来你可以用它做你想做的事。查看有关该属性的文档:

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>>"

我还没有尝试过。

关于audio - 如何在 Gstreamer 中动态交换左/右音频输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54401043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com