num_samples,
rate_adjustment_policy);
}
+
+ float volume = from_db(cards[card_index].fader_volume_db);
if (card_index == 0) {
for (unsigned i = 0; i < num_samples * 2; ++i) {
- samples_out[i] = samples_card[i];
+ samples_out[i] = samples_card[i] * volume;
}
} else {
for (unsigned i = 0; i < num_samples * 2; ++i) {
- samples_out[i] += samples_card[i];
+ samples_out[i] += samples_card[i] * volume;
}
}
}
// something we get out per-sample.
//
// Note that there's a feedback loop here, so we choose a very slow filter
- // (half-time of 100 seconds).
+ // (half-time of 30 seconds).
double target_loudness_factor, alpha;
double loudness_lu = loudness_lufs - ref_level_lufs;
double current_makeup_lu = to_db(final_makeup_gain);
- target_loudness_factor = from_db(-loudness_lu);
+ target_loudness_factor = final_makeup_gain * from_db(-loudness_lu);
// If we're outside +/- 5 LU uncorrected, we don't count it as
// a normal signal (probably silence) and don't change the
} else {
// Formula adapted from
// https://en.wikipedia.org/wiki/Low-pass_filter#Simple_infinite_impulse_response_filter.
- const double half_time_s = 100.0;
+ const double half_time_s = 30.0;
const double fc_mul_2pi_delta_t = 1.0 / (half_time_s * OUTPUT_FREQUENCY);
alpha = fc_mul_2pi_delta_t / (fc_mul_2pi_delta_t + 1.0);
}