wwmm / easyeffects

Limiter, compressor, convolver, equalizer and auto volume and many other plugins for PipeWire applications
GNU General Public License v3.0
6.57k stars 270 forks source link

Feature request: equalizer UI improvements #2935

Closed diggit closed 8 months ago

diggit commented 8 months ago

Hi, Easy effects are really awesome! It can make my laptop sound significantly better. While I was tuning equalizer, I realized there are some "quality of life" UI improvements that could be done.

Increase/decrease all bands gain

When I am happy with my equalizer preset, I often end up with some non 1 output gain. I'd like to adjust all bands at once to get output gain equal to 1. Proposal: Add two buttons increasing/decreasing all bands by 0.1 dB

Zoom in band gains

Range +- 10 dB is enough for me. Range +- 35 dB make is difficult to see small difference. image Proposal: Add one more scale/buttons to configure gains scales range.

Finer/configurable band gain scroll step

Using mouse wheel for adjustment is convenient, but current step of 1 dB is too coarse. Range: Add buttons/drop-down/... to select scroll step.

I can try to implement these changes and other PR if you agree with such changes. GTK is new to me, but I have some experience with C++. I suppose all changes would be in src/equalizer_ui.cpp

wwmm commented 8 months ago

Proposal: Add two buttons increasing/decreasing all bands by 0.1 dB

Using mouse wheel for adjustment is convenient, but current step of 1 dB is too coarse. Range: Add buttons/drop-down/... to select scroll step.

Each band menu already has a gain spinbutton exactly to set its value with more precision. It is not necessary to add one more button to set the gain. Specially considering that there is also the one available in the native plugin window.

Range +- 10 dB is enough for me. Range +- 35 dB make is difficult to see small difference.

This is the range of the equalizer library we use and it is probably also the value the native plugin window is aplying. Trying to make too many things different from the native window will makes things more complicated and potentially confuse people that use the two interfaces.

diggit commented 8 months ago

1) So the option to increase/decrease all band gains at once is also not interesting? This is missing in native window and it would make life easier, because gain axis zooming (in native window) zooms only to 0 dB level. 2) Ok, finer control using scroll wheel is possible from Gain spin button in band settings. Eve though it's extra click for each band and then another to leave the menu. 3) Native window is able to zoom gain axis. This feature is missing in GTK interface.

wwmm commented 8 months ago

So the option to increase/decrease all band gains at once is also not interesting?

I think that very few situations require being able to set all bands to an arbitrary value at once. In most cases people just want to be able to reset all the gains to 0 dB at once and this can already be done. In all these years it is the first time I see this feature being discussed. So it does not seem it will see much use out there.

That being said we could consider expanding the "flat response" feature to something that had a configurable target other than 0 dB. But I still do not see what is the real advantage of setting all of them at once to a gain that is not zero.

Native window is able to zoom gain axis. This feature is missing in GTK interface.

Yes. But we already have too many gtk widgets fighting for space in that window. And we will probably also have to make changes to the preset files and add these range controls there. It does not make sense to load a preset that has one band with gain set to let's say 30 dB when the custom range stops at 10 dB. So these corner cases will have to be handled. I do not see a subjective visual feature being worth the additional code complexity and maintenance.

diggit commented 8 months ago

But I still do not see what is the real advantage of setting all of them at once to a gain that is not zero.

That is not what I meant. I just wanted to get rid of the need for non 0dB output gain, by being able to moe all band gains in some direction.

Yes. But we already have too many gtk widgets fighting for space in that window. And we will probably also have to make changes to the preset files and add these range controls there. It does not make sense to load a preset that has one band with gain set to let's say 30 dB when the custom range stops at 10 dB. So these corner cases will have to be handled. I do not see a subjective visual feature being worth the additional code complexity and maintenance.

One combo box or vertical scale like band gains would fit there, but I understand you want to keep UI simple. Yes, corner cases and maintenance could would some time.

BTW equalizer output gains in native window vs GTK UI are not the same thing. Is that intentional?

wwmm commented 8 months ago

BTW equalizer output gains in native window vs GTK UI are not the same thing. Is that intentional?

Usually we try to keep the controls as close as possible to the ones used by the plugins we wrap. But I've made an exception for the input/output gains. The reason is that not all plugins have them and the ones that do have different ranges when created by different developers. At some point I saw an opportunity to handle all the input/output gains in a simpler way using the same code but without forcing a common denominator for all plugins it would have been impossible to achieve it.

One combo box or vertical scale like band gains would fit there, but I understand you want to keep UI simple.

I try to keep the ui simple if possible but there are already plenty of cases in EE window where this was not possible. The additional code that would have to be added under the hoods together with the lack of space in the ui that gives me the feeling of too much pain for little gain. When a preset is loaded the values go first to our gsettings database. Then gsettings broadcasts all the new values to anyone listening to a given parameter change. There are connections from inside EasyEffects but there can also be external connections from third party programs.

Inside EE the main destinations are the GTK ui and the plugin instance that is actually applying effects. The range restriction you are thinking about is more or less straightforward to implement on the gtk side. But it will not forbid a larger/smaller gain value from a preset file from getting to the plugin instance when the value is coming from a preset or from a external third party tool connected to our gsettings database. Ensuring consistency between the plugin instance and the range forced in the gtk widget will require more work than it may seem at first sight.

violetmage commented 8 months ago

@diggit It is actually possible to "zoom" the gain sliders, gtk sliders have an interesting feature where if you click and hold, without moving, the slider knob "balloons", and then the precision is increased.

wwmm commented 8 months ago

@diggit It is actually possible to "zoom" the gain sliders, gtk sliders have an interesting feature where if you click and hold, without moving, the slider knob "ballons", and then the precision is increased.

I always forget this is possible.

diggit commented 8 months ago

Thanks for all the feedback. I understand your points.