rockbox/lib/rbcodec/dsp
Ryan Billing d0918b98fa DSP Compressor: Sidechain, Exponential Atk/Rls
This is an improvement to the current compressor which I have added
to my own Sansa Fuze V2 build.  I am submitting here in case others
find it interesting.

Features added to the existing compressor:
Attack, Look-ahead, Sidechain Filtering.
Exponential attack and release characteristic response.

Benefits from adding missing features:
Attack:
Preserve perceived "brightness" of tone by letting onset transients
come through at a higher level than the rest of the compressed program
material.

Look-ahead:
With Attack comes clipping on the leading several cycles of a transient
onset.  With look-ahead function, this can be pre-emptively mitigated with
a slower gain change (less distortion).  Look-ahead limiting is implemented
to prevent clipping while keeping gain change ramp to an interval near 3ms
instead of instant attack.

The existing compressor implementation distorts the leading edge of a
transient by causing instant gain change, resulting in log() distortion.
This sounds "woofy" to me.

Exponential Attack/Release:
eMore natural sounding.  On attack, this is a true straight line of 10dB per
attack interval.  Release is a little different, however, sounds natural as
an analog compressor.

Sidechain Filtering:
Mild high-pass filter reduces response to low frequency onsets.  For example,
a hard kick drum is less likely to make the whole of the program material
appear to fade in and out.  Combined with a moderate attack time, such a
transient will ride through with minimal audible artifact.

Overall these changes make dynamic music sound more "open", more natural.  The
goal of a compressor is to make dyanamic music sound louder without necessarily
sounding as though it has been compressed.  I believe these changes come closer to this goal.

Enjoy.  If not, I am enjoying it

Change-Id: I664eace546c364b815b4dc9ed4a72849231a0eb2
Reviewed-on: http://gerrit.rockbox.org/626
Tested: Purling Nayuki <cyq.yzfl@gmail.com>
Reviewed-by: Michael Giacomelli <giac2000@hotmail.com>
2013-12-15 22:24:08 +01:00
..
channel_mode.c Remove explicit config.h and system.h includes from DSP code. 2013-05-27 03:23:33 -04:00
channel_mode.h Fundamentally rewrite much of the audio DSP. 2012-04-29 10:00:56 +02:00
compressor.c DSP Compressor: Sidechain, Exponential Atk/Rls 2013-12-15 22:24:08 +01:00
compressor.h DSP Compressor: Sidechain, Exponential Atk/Rls 2013-12-15 22:24:08 +01:00
crossfeed.c Fix FS#12889 : Audible pop right after setting Repeat/Shuffle 2013-08-16 09:28:36 -04:00
crossfeed.h New crossfeed algorithm for Rockbox: "Meier" crossfeed 2012-05-28 11:34:15 +02:00
dsp_arm.S Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
dsp_arm_v6.S Fundamentally rewrite much of the audio DSP. 2012-04-29 10:00:56 +02:00
dsp_cf.S Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
dsp_core.c Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
dsp_core.h Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
dsp_filter.c Remove explicit config.h and system.h includes from DSP code. 2013-05-27 03:23:33 -04:00
dsp_filter.h Fundamentally rewrite much of the audio DSP. 2012-04-29 10:00:56 +02:00
dsp_misc.c Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
dsp_misc.h Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
dsp_proc_database.h Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
dsp_proc_entry.h Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
dsp_proc_settings.h Rename HAVE_PITCHSCREEN to HAVE_PITCHCONTROL 2012-05-09 14:32:38 +02:00
dsp_sample_input.c Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
dsp_sample_io.h Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
dsp_sample_output.c Remove explicit config.h and system.h includes from DSP code. 2013-05-27 03:23:33 -04:00
eq.c Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
eq.h EQ settings: Rework the settings to clean up the config file. 2013-02-09 13:05:32 +01:00
pga.c Remove explicit config.h and system.h includes from DSP code. 2013-05-27 03:23:33 -04:00
pga.h Implement universal in-PCM-driver software volume control. 2013-04-11 22:55:16 +02:00
resample.c Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
tdspeed.c Remove explicit config.h and system.h includes from DSP code. 2013-05-27 03:23:33 -04:00
tdspeed.h rbcodec: abstract tdspeed buffer allocation 2012-05-07 10:29:07 +02:00
tone_controls.c Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
tone_controls.h Fundamentally rewrite much of the audio DSP. 2012-04-29 10:00:56 +02:00