From: Steinar H. Gunderson Date: Mon, 22 Aug 2016 19:36:55 +0000 (+0200) Subject: Move the lo-cut into each bus. X-Git-Tag: 1.4.0~88 X-Git-Url: https://git.sesse.net/?p=nageru;a=commitdiff_plain;h=680d45fa2192cd399127b2d87b3185206320d59f Move the lo-cut into each bus. --- diff --git a/audio_mixer.cpp b/audio_mixer.cpp index 769dabf..03c894c 100644 --- a/audio_mixer.cpp +++ b/audio_mixer.cpp @@ -110,9 +110,10 @@ AudioMixer::AudioMixer(unsigned num_cards) compressor(OUTPUT_FREQUENCY), correlation(OUTPUT_FREQUENCY) { - locut.init(FILTER_HPF, 2); - - set_locut_enabled(global_flags.locut_enabled); + for (unsigned bus_index = 0; bus_index < MAX_BUSES; ++bus_index) { + locut[bus_index].init(FILTER_HPF, 2); + locut_enabled[bus_index] = global_flags.locut_enabled; + } set_gain_staging_db(global_flags.initial_gain_staging_db); set_gain_staging_auto(global_flags.gain_staging_auto); set_compressor_enabled(global_flags.compressor_enabled); @@ -357,6 +358,14 @@ vector AudioMixer::get_output(double pts, unsigned num_samples, Resamplin for (unsigned bus_index = 0; bus_index < input_mapping.buses.size(); ++bus_index) { fill_audio_bus(samples_card, input_mapping.buses[bus_index], num_samples, &samples_bus[0]); + // Cut away everything under 120 Hz (or whatever the cutoff is); + // we don't need it for voice, and it will reduce headroom + // and confuse the compressor. (In particular, any hums at 50 or 60 Hz + // should be dampened.) + if (locut_enabled[bus_index]) { + locut[bus_index].render(samples_bus.data(), samples_bus.size() / 2, locut_cutoff_hz * 2.0 * M_PI / OUTPUT_FREQUENCY, 0.5f); + } + // TODO: We should measure post-fader. deinterleave_samples(samples_bus, &left, &right); measure_bus_levels(bus_index, left, right); @@ -373,14 +382,6 @@ vector AudioMixer::get_output(double pts, unsigned num_samples, Resamplin } } - // Cut away everything under 120 Hz (or whatever the cutoff is); - // we don't need it for voice, and it will reduce headroom - // and confuse the compressor. (In particular, any hums at 50 or 60 Hz - // should be dampened.) - if (locut_enabled) { - locut.render(samples_out.data(), samples_out.size() / 2, locut_cutoff_hz * 2.0 * M_PI / OUTPUT_FREQUENCY, 0.5f); - } - { lock_guard lock(compressor_mutex); diff --git a/audio_mixer.h b/audio_mixer.h index 31611af..0c401d5 100644 --- a/audio_mixer.h +++ b/audio_mixer.h @@ -101,14 +101,14 @@ public: locut_cutoff_hz = cutoff_hz; } - void set_locut_enabled(bool enabled) + void set_locut_enabled(unsigned bus, bool enabled) { - locut_enabled = enabled; + locut_enabled[bus] = enabled; } - bool get_locut_enabled() const + bool get_locut_enabled(unsigned bus) { - return locut_enabled; + return locut_enabled[bus]; } float get_limiter_threshold_dbfs() const @@ -243,9 +243,9 @@ private: AudioDevice alsa_inputs[MAX_ALSA_CARDS]; // Under audio_mutex. std::vector available_alsa_cards; - StereoFilter locut; // Default cutoff 120 Hz, 24 dB/oct. std::atomic locut_cutoff_hz; - std::atomic locut_enabled{true}; + StereoFilter locut[MAX_BUSES]; // Default cutoff 120 Hz, 24 dB/oct. + std::atomic locut_enabled[MAX_BUSES]; // First compressor; takes us up to about -12 dBFS. mutable std::mutex compressor_mutex; diff --git a/mainwindow.cpp b/mainwindow.cpp index 99e8cc3..0237106 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -231,7 +231,15 @@ void MainWindow::mixer_created(Mixer *mixer) // TODO: Fetch all of the values these for completeness, // not just the enable knobs implied by flags. - ui->locut_enabled->setChecked(global_mixer->get_audio_mixer()->get_locut_enabled()); +#if 0 + // TODO: Reenable for simple audio. + ui->locut_enabled->setChecked(global_mixer->get_audio_mixer()->get_locut_enabled(0)); + connect(ui->locut_enabled, &QCheckBox::stateChanged, [this](int state){ + global_mixer->get_audio_mixer()->set_locut_enabled(0, state == Qt::Checked); + }); +#else + ui->locut_enabled->setVisible(false); +#endif ui->gainstaging_knob->setValue(global_mixer->get_audio_mixer()->get_gain_staging_db()); ui->gainstaging_auto_checkbox->setChecked(global_mixer->get_audio_mixer()->get_gain_staging_auto()); ui->compressor_enabled->setChecked(global_mixer->get_audio_mixer()->get_compressor_enabled()); @@ -247,9 +255,6 @@ void MainWindow::mixer_created(Mixer *mixer) connect(ui->locut_cutoff_knob, &QDial::valueChanged, this, &MainWindow::cutoff_knob_changed); cutoff_knob_changed(ui->locut_cutoff_knob->value()); - connect(ui->locut_enabled, &QCheckBox::stateChanged, [this](int state){ - global_mixer->get_audio_mixer()->set_locut_enabled(state == Qt::Checked); - }); connect(ui->gainstaging_knob, &QAbstractSlider::valueChanged, this, &MainWindow::gain_staging_knob_changed); connect(ui->gainstaging_auto_checkbox, &QCheckBox::stateChanged, [this](int state){ @@ -334,6 +339,11 @@ void MainWindow::setup_audio_expanded_view() // TODO: Set the fader position. ui->buses->addWidget(channel); + ui_audio_expanded_view->locut_enabled->setChecked(global_mixer->get_audio_mixer()->get_locut_enabled(bus_index)); + connect(ui->locut_enabled, &QCheckBox::stateChanged, [this, bus_index](int state){ + global_mixer->get_audio_mixer()->set_locut_enabled(bus_index, state == Qt::Checked); + }); + slave_fader(audio_miniviews[bus_index]->fader, ui_audio_expanded_view->fader); } }