summaryrefslogtreecommitdiff
path: root/replaygain.c
diff options
context:
space:
mode:
authorGravatar Jan D. Behrens <zykure@web.de>2011-09-01 12:36:13 +0200
committerGravatar waker <wakeroid@gmail.com>2011-10-02 10:14:42 +0200
commit290bb2255d8e21ba79521d033c5fcfd50acd67b4 (patch)
treeeb4e28c46c1bcc2bd8758d12fc2139ff7e43416e /replaygain.c
parent221b91c86953434cd2a56a5af76928e42cc03d8c (diff)
Add-global-preamp-in-addition-to-replaygain-preamp Global preamp is applied to all tracks, while replaygain preamp is only applied to tracks with rg info.
Diffstat (limited to 'replaygain.c')
-rw-r--r--replaygain.c43
1 files changed, 27 insertions, 16 deletions
diff --git a/replaygain.c b/replaygain.c
index 887580f1..b2791b4c 100644
--- a/replaygain.c
+++ b/replaygain.c
@@ -24,13 +24,16 @@
static int conf_replaygain_mode = 0;
static int conf_replaygain_scale = 1;
static float conf_replaygain_preamp = 0;
+static float conf_global_preamp = 0;
static float rg_albumgain = 1;
static float rg_albumpeak = 1;
static float rg_trackgain = 1;
static float rg_trackpeak = 1;
-static float rg_albumgain_preamp = 1;
-static float rg_trackgain_preamp = 1;
+static float rg_albumgain_full_preamp = 1;
+static float rg_trackgain_full_preamp = 1;
+static float rg_albumgain_global_preamp = 1;
+static float rg_trackgain_global_preamp = 1;
void
replaygain_apply (ddb_waveformat_t *fmt, playItem_t *it, char *bytes, int bytesread) {
@@ -53,12 +56,15 @@ replaygain_apply (ddb_waveformat_t *fmt, playItem_t *it, char *bytes, int bytesr
}
void
-replaygain_set (int mode, int scale, float preamp) {
+replaygain_set (int mode, int scale, float preamp, float global_preamp) {
conf_replaygain_mode = mode;
conf_replaygain_scale = scale;
conf_replaygain_preamp = db_to_amp (preamp);
- rg_albumgain_preamp = rg_albumgain * conf_replaygain_preamp;
- rg_trackgain_preamp = rg_trackgain * conf_replaygain_preamp;
+ conf_global_preamp = db_to_amp (global_preamp);
+ rg_albumgain_full_preamp = rg_albumgain * conf_replaygain_preamp * conf_global_preamp;
+ rg_trackgain_full_preamp = rg_trackgain * conf_replaygain_preamp * conf_global_preamp;
+ rg_albumgain_global_preamp = rg_albumgain * conf_global_preamp;
+ rg_trackgain_global_preamp = rg_trackgain * conf_global_preamp;
}
void
@@ -76,8 +82,10 @@ replaygain_set_values (float albumgain, float albumpeak, float trackgain, float
}
rg_albumgain = db_to_amp (albumgain);
rg_trackgain = db_to_amp (trackgain);
- rg_albumgain_preamp = rg_albumgain * conf_replaygain_preamp;
- rg_trackgain_preamp = rg_trackgain * conf_replaygain_preamp;
+ rg_albumgain_full_preamp = rg_albumgain * conf_replaygain_preamp * conf_global_preamp;
+ rg_trackgain_full_preamp = rg_trackgain * conf_replaygain_preamp * conf_global_preamp;
+ rg_albumgain_global_preamp = rg_albumgain * conf_global_preamp;
+ rg_trackgain_global_preamp = rg_trackgain * conf_global_preamp;
rg_albumpeak = albumpeak;
rg_trackpeak = trackpeak;
}
@@ -87,9 +95,10 @@ get_int_volume (void) {
int vol = 1000;
if (conf_replaygain_mode == 1) {
if (rg_trackgain == 1) {
- return -1;
+ vol = rg_trackgain_global_preamp * 1000;
+ } else {
+ vol = rg_trackgain_full_preamp * 1000;
}
- vol = rg_trackgain * 1000;
if (conf_replaygain_scale) {
if (vol * rg_trackpeak > 1000) {
vol = 1000 / rg_trackpeak;
@@ -98,16 +107,16 @@ get_int_volume (void) {
}
else if (conf_replaygain_mode == 2) {
if (rg_albumgain == 1) {
- return -1;
+ vol = rg_albumgain_global_preamp * 1000;
+ } else {
+ vol = rg_albumgain_full_preamp * 1000;
}
- vol = rg_albumgain * 1000;
if (conf_replaygain_scale) {
if (vol * rg_albumpeak > 1000) {
vol = 1000 / rg_albumpeak;
}
}
}
- vol *= conf_replaygain_preamp;
return vol;
}
@@ -214,9 +223,10 @@ apply_replay_gain_float32 (playItem_t *it, char *bytes, int size) {
float vol = 1.f;
if (conf_replaygain_mode == 1) {
if (rg_trackgain == 1) {
- return;
+ vol = rg_trackgain_global_preamp;
+ } else {
+ vol = rg_trackgain_full_preamp;
}
- vol = rg_trackgain_preamp;
if (conf_replaygain_scale) {
if (vol * rg_trackpeak > 1.f) {
vol = 1.f / rg_trackpeak;
@@ -225,9 +235,10 @@ apply_replay_gain_float32 (playItem_t *it, char *bytes, int size) {
}
else if (conf_replaygain_mode == 2) {
if (rg_albumgain == 1) {
- return;
+ vol = rg_albumgain_global_preamp;
+ } else {
+ vol = rg_albumgain_full_preamp;
}
- vol = rg_albumgain_preamp;
if (conf_replaygain_scale) {
if (vol * rg_albumpeak > 1.f) {
vol = 1.f / rg_albumpeak;