-
-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
LOMM (upward/downward multiband compressor) #6925
Conversation
That it's very good stuff! Thanks for the effort. Some thoughts after testing it:
|
It doesn't really have to stand for anything, it's mainly a reference to OTT and an ongoing meme in the LMMS Discord server about LoMMuS. Though Punch who thought of the name originally recommended "LMMS's Own Multiband Maximizer", we can go with that.
Yes. The purpose of Depth is to control the compression amount alone. Mix is the knob to use if you want to control the amount of all of the plugin's processing. A Depth of zero causes the compression to do nothing, but the rest of the plugin's processing still applies. The output volume link button to the right of the Depth button controls whether it impacts the output volume, and is there because I found Depth scaling the output volume generally makes the knob far more convenient to automate (due to the Depth value having a large impact on the resulting volume).
You aren't the first person to say this, it's good feedback. I'll change the message.
Knee and RMS are standard controls you'll see in most compressor plugins. These knobs have the same function here as they do in all other compressors. They aren't relevant to how the bands are mixed. Knee controls the knee size of the compression curve, while RMS controls the RMS size of the sidechain reading. But I did just realize I completely forgot to add tooltips to this plugin (oops), so I'll be sure to do that. My bad. |
The plugin now has the tooltips I somehow forgot, everything should be much easier to navigate. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Did not test the actual plugin, but in terms of the code:
- You might want to format the newly added files in their entirety. There seem to be formatting issues in a few places.
- Might want to take a look at making CodeFactor happy. CodeFactor is complaining about the format and certain methods being too complex. Try and take a look for yourself and see if you can split some of them into functions. I think a good starting point would be with
LOMMEffect::processAudioBuffer
. - I would advise using
std::array
instead of C-style arrays.std::array
knows about its own size in contrast to C-style arrays, which allows us to use for loops with them in an easy way. With C-style arrays, you have to remember what the size of it was or usesizeof
, which leaves room for error.
for (int i = 0; i < 2; ++i) | ||
{ | ||
for (int j = 0; j < 3; ++j) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I recommend using more descriptive name for loop variables, e.g., ch
and band
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Normally I'd agree, but the large majority of variable usage throughout this function uses i
and j
as array indices, so changing them to more descriptive labels results in a surprisingly large deficit in the readability of the entire code. I added comments to the loops to make sure the variables' purposes are obvious, let me know if you still think this change should be made.
I did only a really brief testing but it seems to be great. GUI looks cool too, i only have a small concern LMMS tends to already have lots of green shades and the numbers in LOMM have yet another one, they clash a little and stand out a lot imo. Hoping it's just a minor change like a color code change, would it be possible to just use the same palette as the rest of the LMMS LCDspinboxes for consistency? I've attached a couple images below to make it clearer what i mean, on the right there's the current green shade, on the left a poor edit reusing the existing one |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The code is fine with me. Haven't done any testing, but many people have and no major complaints seemed to pop up.
please merge thx |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tests fine. Cool machine!
Game changer! 👊 |
LOMM.
UI background designed by our pal Grimnir (@grimnomancy) on Discord.
Okay cool so what is it
LOMM was originally intended to just be a super quickly-made OTT replacement for LMMS, but as it goes with literally everything I make, it wound up spiraling into a significantly larger project which puts OTT to shame. That's super cool, given OTT might actually be the most-used VST on the planet.
Unlike OTT, LOMM is built to provide absurdly clean and clear compression, with no crossover phase issues, no unwanted distortion or artifacts, and with algorithms even designed with the master bus in mind. However, if the user so pleases, they can completely ruin this and crank this plugin up to comically destructive levels OTT isn't even capable of approaching. The parameters provided are versatile enough to appeal to any use case a musician could possibly want, whether it be applying gorgeously subtle touch-ups to a song that sounds timbrally lacking, to transforming even the weakest of sounds into terrifyingly powerful sonic brick walls.
LOMM is an upward/downward multiband compressor.
"Upward/downward" means it compresses the audio both upward and downward. Most compressors are only downward, meaning if the measured volume of the audio goes above a certain threshold, the volume is proportionally decreased to decrease its dynamic range. However, LOMM is also capable of upward compression, meaning if the volume goes below a certain threshold, its volume will be proportionally increased. This can bring out many of the quieter and subtler textures and timbres within a sound.
"Multiband" means the audio is split into separate frequency bands, before one copy of the effect is applied to each band individually. This is an incredibly valuable attribute for a compressor, since the behavior of one frequency range won't interfere with the compression needed for another frequency range.
Stuff
List of stuff:
Band Stuff
The bands each have their own stuff. IN and OUT control the input and output volume of each band, essentially equivalent to a Crossover EQ on each side. Threshold controls the point at which the compression begins to engage for both higher and lower volumes. Ratio controls the amount of gain change applied relative to how far past the threshold the audio is located. ATK and REL control the attack and release of each band individually. The large "X Band" labels can also be clicked to enable or disable a band entirely (muting its output, unlike the crossover split toggles which merge the audio into another band instead).
Yo wait it's animated
Yes, despite Qt, it's animated. And, you can even interact with it.
The red area represents the threshold for the upward compression, and the yellow area represents the threshold for the downward compression. You can drag these left and right to set the threshold, and middle click them to reset them to their default value. You can also drag the empty area between the two areas to adjust both simultaneously.
You'll see two lines move to match with the audio being sent through the plugin. The smaller grey line represents the input volume (after being sent through RMS and attack/release and so on), and the larger white line represents the output volume (after the gain change is applied).
Insert eloquent outro here
plz merge quickly or i will die
amogus
oh yeah lmms development is also literally my only source of income and i can't afford food so
https://www.patreon.com/lostrobot
if you're able
thanks
very grateful
EDIT: Here's a quick and simple demo video to give an idea of a few of its abilities:
https://www.youtube.com/watch?v=AIMQfIdDL6k
Its general usage is quite similar to Ableton's Multiband Dynamics.