diff options
Diffstat (limited to 'src/replayGain.c')
-rw-r--r-- | src/replayGain.c | 130 |
1 files changed, 68 insertions, 62 deletions
diff --git a/src/replayGain.c b/src/replayGain.c index 296b321cd..5c0664563 100644 --- a/src/replayGain.c +++ b/src/replayGain.c @@ -25,68 +25,71 @@ #include <string.h> #include <math.h> #include <stdlib.h> - + /* Added 4/14/2004 by AliasMrJones */ static int replayGainState = REPLAYGAIN_OFF; static float replayGainPreamp = 1.0; -void initReplayGainState(void) { - ConfigParam * param = getConfigParam(CONF_REPLAYGAIN); +void initReplayGainState(void) +{ + ConfigParam *param = getConfigParam(CONF_REPLAYGAIN); - if(!param) return; + if (!param) + return; - if(strcmp(param->value, "track") == 0) { + if (strcmp(param->value, "track") == 0) { replayGainState = REPLAYGAIN_TRACK; - } - else if(strcmp(param->value, "album") == 0) { + } else if (strcmp(param->value, "album") == 0) { replayGainState = REPLAYGAIN_ALBUM; - } - else { + } else { ERROR("replaygain value \"%s\" at line %i is invalid\n", - param->value, param->line); + param->value, param->line); exit(EXIT_FAILURE); } param = getConfigParam(CONF_REPLAYGAIN_PREAMP); - if(param) { - char * test; + if (param) { + char *test; float f = strtod(param->value, &test); - if(*test != '\0') { + if (*test != '\0') { ERROR("Replaygain preamp \"%s\" is not a number at " - "line %i\n", param->value, param->line); + "line %i\n", param->value, param->line); exit(EXIT_FAILURE); } - if(f < -15 || f > 15) { + if (f < -15 || f > 15) { ERROR("Replaygain preamp \"%s\" is not between -15 and" - "15 at line %i\n", - param->value, param->line); + "15 at line %i\n", param->value, param->line); exit(EXIT_FAILURE); } - replayGainPreamp = pow(10, f/20.0); + replayGainPreamp = pow(10, f / 20.0); } } -static float computeReplayGainScale(float gain, float peak) { +static float computeReplayGainScale(float gain, float peak) +{ float scale; - if(gain == 0.0) return(1); - scale = pow(10.0, gain/20.0); - scale*= replayGainPreamp; - if(scale > 15.0) scale = 15.0; + if (gain == 0.0) + return (1); + scale = pow(10.0, gain / 20.0); + scale *= replayGainPreamp; + if (scale > 15.0) + scale = 15.0; if (scale * peak > 1.0) { scale = 1.0 / peak; } - return(scale); + return (scale); } -ReplayGainInfo * newReplayGainInfo(void) { - ReplayGainInfo * ret = malloc(sizeof(ReplayGainInfo)); +ReplayGainInfo *newReplayGainInfo(void) +{ + ReplayGainInfo *ret = malloc(sizeof(ReplayGainInfo)); ret->albumGain = 0.0; ret->albumPeak = 0.0; @@ -100,62 +103,65 @@ ReplayGainInfo * newReplayGainInfo(void) { return ret; } -void freeReplayGainInfo(ReplayGainInfo * info) { +void freeReplayGainInfo(ReplayGainInfo * info) +{ free(info); } -void doReplayGain(ReplayGainInfo * info, char * buffer, int bufferSize, - AudioFormat * format) +void doReplayGain(ReplayGainInfo * info, char *buffer, int bufferSize, + AudioFormat * format) { - mpd_sint16 * buffer16; - mpd_sint8 * buffer8; + mpd_sint16 *buffer16; + mpd_sint8 *buffer8; mpd_sint32 temp32; float scale; - if(replayGainState == REPLAYGAIN_OFF || !info) return; + if (replayGainState == REPLAYGAIN_OFF || !info) + return; - if(info->scale < 0) { - switch(replayGainState) { + if (info->scale < 0) { + switch (replayGainState) { case REPLAYGAIN_TRACK: info->scale = computeReplayGainScale(info->trackGain, - info->trackPeak); + info->trackPeak); break; default: info->scale = computeReplayGainScale(info->albumGain, - info->albumPeak); + info->albumPeak); break; } } - if(info->scale <= 1.01 && info->scale >= 0.99) return; + if (info->scale <= 1.01 && info->scale >= 0.99) + return; - buffer16 = (mpd_sint16 *)buffer; - buffer8 = (mpd_sint8 *)buffer; + buffer16 = (mpd_sint16 *) buffer; + buffer8 = (mpd_sint8 *) buffer; scale = info->scale; - switch(format->bits) { - case 16: - while(bufferSize > 0){ - temp32 = *buffer16; - temp32 *= scale; - *buffer16 = temp32>32767 ? 32767 : - (temp32<-32768 ? -32768 : temp32); - buffer16++; - bufferSize-=2; - } - break; - case 8: - while(bufferSize>0){ - temp32 = *buffer8; - temp32 *= scale; - *buffer8 = temp32>127 ? 127 : - (temp32<-128 ? -128 : temp32); - buffer8++; - bufferSize--; - } - break; - default: - ERROR("%i bits not supported by doReplaygain!\n", format->bits); + switch (format->bits) { + case 16: + while (bufferSize > 0) { + temp32 = *buffer16; + temp32 *= scale; + *buffer16 = temp32 > 32767 ? 32767 : + (temp32 < -32768 ? -32768 : temp32); + buffer16++; + bufferSize -= 2; + } + break; + case 8: + while (bufferSize > 0) { + temp32 = *buffer8; + temp32 *= scale; + *buffer8 = temp32 > 127 ? 127 : + (temp32 < -128 ? -128 : temp32); + buffer8++; + bufferSize--; + } + break; + default: + ERROR("%i bits not supported by doReplaygain!\n", format->bits); } } |