Rockbox mail archiveSubject: Dynamic Range Compressor revisited
Dynamic Range Compressor revisited
From: Ryan Billing <ryjobil_at_gmail.com>
Date: Tue, 24 Sep 2013 22:38:44 -0700
I left a forum post generally outlining what I have in mind, but have
finally brought the idea to reality and have done some initial testing
to show myself it generally does what I expect. Find below a summary of
what I have been hacking at.
The change to the compressor revolves around making the compressor sound
more natural. The point of a good compressor is to achieve an overall
perception of loudness on dynamic music without making it sound
My initial observation of the compressor as implemented is a sound that
is distorted on the transients and mechanical on the release -- for me
completely unusable except for voice recordings. For most users, I think
they are just happy there IS a compressor, and that they can make
dynamic music LOUD in noisy environments (such as a car). Probably some
people will need to be sold on the idea that there is any need for
The changes of note (to the average user) is this:
Attack Time -- The goal is to preserve some dynamic life, particularly
at sudden dynamic onsets.
Exponential attack/release -- benefit from the natural-sounding
characteristic found in analog compressors.
To my own ears, the response is "alive", natural sounding. Percussive
instruments become more bright, real.
More details are in my commit message, and the most detail in the code,
and comments in the code.
There is one kludge I need to clean up, and that is the bit format. I
just happened to hard-code the gain for the limiter, but I really need
to have that final bit shift informed by the DSP format struct or it
will be broken in any case where the bit format differs from my test
case (Sansa Fuze V2, ogg vorbis format music).
I mention that because if any of you try this, and it sounds either
really quiet, or horribly distorted, it's because the format is
different than how it is hard-coded, and for that I apologize. I will
fix it in the next push if anybody shows interest in my added features.
Otherwise I will probably abstain from fixing it unless I personally get
into trouble with this kludge.
For now, I want to stick my probes out and find out whether there is
enough interest in this to make it worth my time to clean up the details
(memory usage, efficiency optimizations, code formatting, etc).
Thank you to any who give this a try.
Received on 2013-09-25