GNOME Bugzilla – Bug 647561
volume: need a way to control the volume of individual channels of a multi-channel source
Last modified: 2018-11-03 11:18:40 UTC
The volume element is currently not able to control each channel individually. I tried to replace the playbin2's audio-sink, to use deinterleave/interleave, but did not succeed (I've got some warnings about the channel layout). Improving the volume element would dramatically ease such use case.
Volume could implement the GstChildProxy iface and have per channel dummies that have volume/mute properties. Then one can write: gst-launch ... ! volume channel0::volume=0.5 channel1::volume=1.7 ... ! .. Reflecting that in the volume elements gst-mixer iface implementation might be overkill. Also wonder if the child-names should be "channel{0,1,2,3..} or the audiochannel names, such as "left,right,front,...".
Let's move this to -base/volume for now.
With such a solution, will I be able to use something such as: g_object_set (the_volume, "channel0::volume", 0.1, NULL); (sorry, but I'm not a glib expert, so some features are yet obscures to me...)
(In reply to comment #3) > With such a solution, will I be able to use something such as: > g_object_set (the_volume, "channel0::volume", 0.1, NULL); > > (sorry, but I'm not a glib expert, so some features are yet obscures to me...) Almost, you will have to use: gst_child_proxy_set(the_volume, "channel0::volume", 0.1, "channel1::volume", 0.5, ... NULL);
Oh... I use gstreamer with clutter, and so I was wondering if I could connect clutter animations with such an improved volume element. So, I guess that the answer is "no". But, well, it can be done in some other ways...
(In reply to comment #5) > Oh... I use gstreamer with clutter, and so I was wondering if I could connect > clutter animations with such an improved volume element. So, I guess that the > answer is "no". But, well, it can be done in some other ways... we have a property-animation feature in gstreamer too (GstController). But maybe lets discuss that on the list or in irc. You could also do: child = gst_child_proxy_get_child_by_name(volume, "channel0"); g_object_set(child, "volume", 0.5, NULL); g_object_unref(child);
-- GitLab Migration Automatic Message -- This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity. You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/46.