forked from len0rd/rockbox
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> |
||
|---|---|---|
| .. | ||
| bitmaps | ||
| gui | ||
| hosted/android | ||
| iap | ||
| keymaps | ||
| lang | ||
| menus | ||
| player | ||
| plugins | ||
| radio | ||
| recorder | ||
| abrepeat.c | ||
| abrepeat.h | ||
| action.c | ||
| action.h | ||
| alarm_menu.c | ||
| alarm_menu.h | ||
| appevents.h | ||
| applimits.h | ||
| apps.make | ||
| audio_path.c | ||
| audio_thread.c | ||
| audio_thread.h | ||
| beep.c | ||
| bookmark.c | ||
| bookmark.h | ||
| buffering.c | ||
| buffering.h | ||
| codec_thread.c | ||
| codec_thread.h | ||
| codecs.c | ||
| core_asmdefs.c | ||
| cuesheet.c | ||
| cuesheet.h | ||
| debug_menu.c | ||
| debug_menu.h | ||
| enc_config.c | ||
| enc_config.h | ||
| features.txt | ||
| filetree.c | ||
| filetree.h | ||
| filetypes.c | ||
| filetypes.h | ||
| fracmul.h | ||
| keyboard.h | ||
| language.c | ||
| language.h | ||
| logfdisp.c | ||
| logfdisp.h | ||
| main.c | ||
| menu.c | ||
| menu.h | ||
| misc.c | ||
| misc.h | ||
| mpeg.c | ||
| mpeg.h | ||
| onplay.c | ||
| onplay.h | ||
| pcmbuf.c | ||
| pcmbuf.h | ||
| playback.c | ||
| playback.h | ||
| playlist.c | ||
| playlist.h | ||
| playlist_catalog.c | ||
| playlist_catalog.h | ||
| playlist_menu.h | ||
| playlist_viewer.c | ||
| playlist_viewer.h | ||
| plugin.c | ||
| plugin.h | ||
| rbcodec_helpers.c | ||
| rbcodecconfig.h | ||
| rbcodecplatform.h | ||
| README | ||
| root_menu.c | ||
| root_menu.h | ||
| screen_access.c | ||
| screen_access.h | ||
| screens.c | ||
| screens.h | ||
| scrobbler.c | ||
| scrobbler.h | ||
| settings.c | ||
| settings.h | ||
| settings_list.c | ||
| settings_list.h | ||
| shortcuts.c | ||
| shortcuts.h | ||
| sound_menu.h | ||
| SOURCES | ||
| status.c | ||
| status.h | ||
| tagcache.c | ||
| tagcache.h | ||
| tagnavi.config | ||
| tagtree.c | ||
| tagtree.h | ||
| talk.c | ||
| talk.h | ||
| tree.c | ||
| tree.h | ||
| usb_keymaps.c | ||
| usb_keymaps.h | ||
| voice_thread.c | ||
| voice_thread.h | ||
For general information see: docs/README For API information see: docs/API