Adding on the fly volume normalization support. Code originally from mplayer, ported by syscrash, cleaned up by avuton, and further cleaned up by me (jat).

git-svn-id: https://svn.musicpd.org/mpd/trunk@4424 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
J. Alexander Treuman
2006-07-22 00:53:37 +00:00
parent c4d1344f8c
commit cf90f8194f
6 changed files with 35 additions and 1 deletions

View File

@@ -49,6 +49,7 @@ mpd_headers = \
metadataChunk.h \
mpd_types.h \
myfprintf.h \
normalize.h \
outputBuffer.h \
path.h \
pcm_utils.h \
@@ -93,6 +94,7 @@ mpd_SOURCES = \
main.c \
metadataChunk.c \
myfprintf.c \
normalize.c \
outputBuffer.c \
path.c \
pcm_utils.c \

View File

@@ -171,6 +171,7 @@ void initConf(void)
registerConfigParam(CONF_REPLAYGAIN_PREAMP, 0, 0);
registerConfigParam(CONF_METADATA_TO_USE, 0, 0);
registerConfigParam(CONF_ID3V1_ENCODING, 0, 0);
registerConfigParam(CONF_VOLUME_NORMALIZATION, 0, 0);
}
static void addBlockParam(ConfigParam * param, char *name, char *value,

View File

@@ -58,6 +58,7 @@
#define CONF_HTTP_PREBUFFER_SIZE "http_prebuffer_size"
#define CONF_METADATA_TO_USE "metadata_to_use"
#define CONF_ID3V1_ENCODING "id3v1_encoding"
#define CONF_VOLUME_NORMALIZATION "volume_normalization"
typedef struct _BlockParam {
char *name;

View File

@@ -22,6 +22,8 @@
#include "playerData.h"
#include "utils.h"
#include "log.h"
#include "normalize.h"
#include "conf.h"
#include <string.h>
@@ -76,6 +78,22 @@ int sendDataToOutputBuffer(OutputBuffer * cb, InputStream * inStream,
size_t datalen;
static char *convBuffer = NULL;
static long convBufferLen = 0;
static int normalEnable = -1;
ConfigParam *param;
if (normalEnable == -1) {
normalEnable = getBoolConfigParam(CONF_VOLUME_NORMALIZATION);
if (normalEnable == -1) {
/* not set */
normalEnable = 0;
} else if (normalEnable < 0) {
param = getConfigParam(CONF_VOLUME_NORMALIZATION);
WARNING("%s is not \"yes\" or \"no\" on line %i, "
"disabling\n", CONF_VOLUME_NORMALIZATION,
param->line);
normalEnable = 0;
}
}
if (cmpAudioFormat(&(cb->audioFormat), &(dc->audioFormat)) == 0) {
data = dataIn;
@@ -99,6 +117,8 @@ int sendDataToOutputBuffer(OutputBuffer * cb, InputStream * inStream,
if (replayGainInfo) {
doReplayGain(replayGainInfo, data, datalen, &cb->audioFormat);
} else if (normalEnable) {
normalizeData(data, datalen, &cb->audioFormat);
}
while (datalen) {