Project

General

Profile

audacious_git.diff

Thomas Uwe Grüttmüller, January 04, 2018 05:01

View differences:

src/libaudcore/audio.h.in
35 35
    float track_peak; /* 0-1 */
36 36
    float album_gain; /* dB */
37 37
    float album_peak; /* 0-1 */
38
    int track_gain_is_set; /* true or false */
39
    int album_gain_is_set; /* true or false */
38 40
};
39 41

  
40 42
struct StereoVolume {
src/libaudcore/output.cc
63 63
static bool s_input; /* input plugin connected */
64 64
static bool s_output; /* primary output plugin connected */
65 65
static bool s_secondary; /* secondary output plugin connected */
66
static bool s_gain; /* replay gain info set */
67 66
static bool s_paused; /* paused */
68 67
static bool s_flushed; /* flushed, writes ignored until resume */
69 68
static bool s_resetting; /* resetting output system */
......
271 270
        return;
272 271

  
273 272
    float factor = powf (10, aud_get_double (0, "replay_gain_preamp") / 20);
274

  
275
    if (s_gain)
273
    float peak;
274
    auto mode = (ReplayGainMode) aud_get_int (0, "replay_gain_mode");
275
    if (
276
        ((mode == ReplayGainMode::Album) ||
277
         (mode == ReplayGainMode::Automatic &&
278
          (! aud_get_bool (0, "shuffle") || aud_get_bool (0, "album_shuffle")))) &&
279
           (gain_info.album_gain_is_set))
276 280
    {
277
        float peak;
278

  
279
        auto mode = (ReplayGainMode) aud_get_int (0, "replay_gain_mode");
280
        if ((mode == ReplayGainMode::Album) ||
281
            (mode == ReplayGainMode::Automatic &&
282
             (! aud_get_bool (0, "shuffle") || aud_get_bool (0, "album_shuffle"))))
283
        {
284
            factor *= powf (10, gain_info.album_gain / 20);
285
            peak = gain_info.album_peak;
286
        }
287
        else
281
        factor *= powf (10, gain_info.album_gain / 20);
282
        peak = gain_info.album_peak;
283
        if (aud_get_bool (0, "enable_clipping_prevention") && peak * factor > 1)
284
            factor = 1 / peak;
285
    }
286
    else
287
    {
288
        if (gain_info.track_gain_is_set)
288 289
        {
289 290
            factor *= powf (10, gain_info.track_gain / 20);
290 291
            peak = gain_info.track_peak;
292
            if (aud_get_bool (0, "enable_clipping_prevention") && peak * factor > 1)
293
                factor = 1 / peak;
291 294
        }
292

  
293
        if (aud_get_bool (0, "enable_clipping_prevention") && peak * factor > 1)
294
            factor = 1 / peak;
295
        else
296
            factor *= powf (10, aud_get_double (0, "default_gain") / 20);
295 297
    }
296
    else
297
        factor *= powf (10, aud_get_double (0, "default_gain") / 20);
298 298

  
299 299
    if (factor < 0.99 || factor > 1.01)
300 300
        audio_amplify (data.begin (), 1, data.len (), & factor);
......
427 427
    }
428 428

  
429 429
    s_input = true;
430
    s_gain = s_paused = s_flushed = false;
430
    s_paused = s_flushed = false;
431 431
    seek_time = start_time;
432 432

  
433 433
    in_filename = filename;
......
464 464
    if (s_input)
465 465
    {
466 466
        gain_info = info;
467
        s_gain = true;
468 467

  
469 468
        AUDINFO ("Replay Gain info:\n");
470 469
        AUDINFO (" album gain: %f dB\n", info.album_gain);
src/libaudcore/tuple.cc
618 618
            gain.track_peak = get_int (TrackPeak) / (float) peak_unit;
619 619
    }
620 620

  
621
    gain.album_gain_is_set = (data->is_set (AlbumGain)) ? 1 : 0;
622
    gain.track_gain_is_set = (data->is_set (TrackGain)) ? 1 : 0;
623

  
621 624
    return gain;
622 625
}
623 626