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;
}
}
}
// See comments inside get_output().
void set_current_loudness(double level_lufs) { loudness_lufs = level_lufs; }
+ void set_fader_volume(unsigned card_index, float level_db) { cards[card_index].fader_volume_db = level_db; }
+
void set_locut_cutoff(float cutoff_hz)
{
locut_cutoff_hz = cutoff_hz;
std::mutex audio_mutex;
std::unique_ptr<ResamplingQueue> resampling_queue; // Under audio_mutex.
int64_t next_local_pts = 0; // Beginning of next frame, in TIMEBASE units. Under audio_mutex.
+ std::atomic<float> fader_volume_db{0.0f};
};
CaptureCard cards[MAX_CARDS];
void MainWindow::mini_fader_changed(Ui::AudioMiniView *ui, int channel, int value)
{
- float volume_dbfs = value * 0.1f;
+ float volume_db = value * 0.1f;
char buf[256];
- snprintf(buf, sizeof(buf), "%+.1f dB", volume_dbfs);
+ snprintf(buf, sizeof(buf), "%+.1f dB", volume_db);
ui->fader_label->setText(buf);
+
+ global_mixer->get_audio_mixer()->set_fader_volume(channel, volume_db);
}
void MainWindow::reset_meters_button_clicked()