1
0
Fork 0
forked from len0rd/rockbox
foxbox/apps
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
..
bitmaps
gui scroll_engine: Major rework to support pixel-based scrolling and scroll callbacks. 2013-12-14 23:11:31 +01:00
hosted/android Get rid of some superfluous single-purpose functions in playback. 2013-07-13 00:08:51 -04:00
iap Updated IAP commands. 2013-11-10 18:41:24 +01:00
keymaps Introduce IHIFI760/960 targets. 2013-12-16 00:45:18 +04:00
lang DSP Compressor: Sidechain, Exponential Atk/Rls 2013-12-15 22:24:08 +01:00
menus DSP Compressor: Sidechain, Exponential Atk/Rls 2013-12-15 22:24:08 +01:00
player
plugins scroll_engine: Rename scroll_stop* functions to be more consistent with the lcd api. 2013-12-14 23:11:30 +01:00
radio scroll_engine: Rename scroll_stop* functions to be more consistent with the lcd api. 2013-12-14 23:11:30 +01:00
recorder Swap over a position of cursor while reaching the end of filename in keyboard 2013-07-09 18:43:10 +02:00
abrepeat.c
abrepeat.h
action.c touch devices: Disable touch on softlock. 2013-09-05 20:02:07 +02:00
action.h skin_engine: Make pressing the setting bar touch region work 2012-07-06 14:28:34 +10:00
alarm_menu.c
alarm_menu.h
appevents.h Get rid of some superfluous single-purpose functions in playback. 2013-07-13 00:08:51 -04:00
applimits.h
apps.make
audio_path.c ypr0: This patch adds radio support to Samsung YP-R0 2012-05-28 19:39:14 +02:00
audio_thread.c SWCODEC Audio: Add some INIT_ATTR's to get a few bytes back. 2013-06-29 22:29:23 -04:00
audio_thread.h Update software recording engine to latest codec interface. 2013-06-30 00:40:27 +02:00
beep.c Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
bookmark.c bookmark: add cancelling of autoload bookmark 2013-04-06 11:35:36 +02:00
bookmark.h
buffering.c SWCODEC Audio: Add some INIT_ATTR's to get a few bytes back. 2013-06-29 22:29:23 -04:00
buffering.h
codec_thread.c Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
codec_thread.h Update software recording engine to latest codec interface. 2013-06-30 00:40:27 +02:00
codecs.c Update software recording engine to latest codec interface. 2013-06-30 00:40:27 +02:00
core_asmdefs.c
cuesheet.c
cuesheet.h
debug_menu.c scroll_engine: Rename scroll_stop* functions to be more consistent with the lcd api. 2013-12-14 23:11:30 +01:00
debug_menu.h
enc_config.c
enc_config.h
features.txt apps: factor depth3d capability in features.txt 2013-09-25 14:31:39 +02:00
filetree.c Use crc32 of filename to resume tracks 2013-01-02 08:29:38 +01:00
filetree.h
filetypes.c Fix color of files with no extension. 2013-06-05 18:35:09 -04:00
filetypes.h
fracmul.h
keyboard.h
language.c
language.h
logfdisp.c
logfdisp.h
main.c Fix logdisk 2013-08-16 21:59:16 +02:00
menu.c Remove extraneous parens 2012-05-06 23:13:34 -04:00
menu.h
misc.c Updated IAP commands. 2013-11-10 18:41:24 +01:00
misc.h New GUI browser to select one (or more) folders. 2012-07-30 21:20:51 +02:00
mpeg.c Get rid of some superfluous single-purpose functions in playback. 2013-07-13 00:08:51 -04:00
mpeg.h
onplay.c Rename HAVE_PITCHSCREEN to HAVE_PITCHCONTROL 2012-05-09 14:32:38 +02:00
onplay.h
pcmbuf.c Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
pcmbuf.h Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
playback.c playback: Fix build with LOGF_ENABLE. 2013-11-10 15:36:18 +04:00
playback.h Get rid of some superfluous single-purpose functions in playback. 2013-07-13 00:08:51 -04:00
playlist.c Use crc32 of filename to resume tracks 2013-01-02 08:29:38 +01:00
playlist.h Use crc32 of filename to resume tracks 2013-01-02 08:29:38 +01:00
playlist_catalog.c
playlist_catalog.h
playlist_menu.h
playlist_viewer.c Fixing data abort (pc in strchr). when scrolling a big playlist very fast. 2012-07-19 00:00:41 +02:00
playlist_viewer.h
plugin.c Bump plugin api and sort. 2013-12-14 23:15:45 +01:00
plugin.h Bump plugin api and sort. 2013-12-14 23:15:45 +01:00
rbcodec_helpers.c Rename HAVE_PITCHSCREEN to HAVE_PITCHCONTROL 2012-05-09 14:32:38 +02:00
rbcodecconfig.h Change CODECFLAGS to a "simply-expanded" var to give the individual 2013-08-23 18:34:30 +02:00
rbcodecplatform.h rbcodec: abstract tdspeed buffer allocation 2012-05-07 10:29:07 +02:00
README
root_menu.c Introduce volume_{present,removable} and fix invalid calls in apps/ 2013-11-20 21:34:04 +01:00
root_menu.h
screen_access.c scroll_engine: Major rework to support pixel-based scrolling and scroll callbacks. 2013-12-14 23:11:31 +01:00
screen_access.h scroll_engine: Major rework to support pixel-based scrolling and scroll callbacks. 2013-12-14 23:11:31 +01:00
screens.c Fix more reds. 2013-12-15 00:47:21 +01:00
screens.h
scrobbler.c Get rid of some superfluous single-purpose functions in playback. 2013-07-13 00:08:51 -04:00
scrobbler.h Get rid of some superfluous single-purpose functions in playback. 2013-07-13 00:08:51 -04:00
settings.c scroll_engine: Rename scroll_stop* functions to be more consistent with the lcd api. 2013-12-14 23:11:30 +01:00
settings.h Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
settings_list.c DSP Compressor: Sidechain, Exponential Atk/Rls 2013-12-15 22:24:08 +01:00
settings_list.h EQ settings: Rework the settings to clean up the config file. 2013-02-09 13:05:32 +01:00
shortcuts.c Add set_sleeptimer_duration function in minutes 2012-10-06 11:59:13 +02:00
shortcuts.h
sound_menu.h
SOURCES Introduce IHIFI760/960 targets. 2013-12-16 00:45:18 +04:00
status.c
status.h
tagcache.c Fix possible readlink() buffer overflow 2013-01-15 22:04:18 +01:00
tagcache.h Fix database tool. 2012-07-31 10:33:27 +02:00
tagnavi.config
tagtree.c Get rid of some superfluous single-purpose functions in playback. 2013-07-13 00:08:51 -04:00
tagtree.h
talk.c Add comment to clarify calculation. 2012-06-05 22:53:21 +02:00
talk.h
tree.c
tree.h
usb_keymaps.c
usb_keymaps.h
voice_thread.c Enable setting of global output samplerate on certain targets. 2013-07-06 04:22:04 +02:00
voice_thread.h voice_thread_init was left INIT_ATTR but is being called too late. 2012-05-21 15:21:36 -04:00

For general information see: docs/README
For API information see: docs/API