]> git.sesse.net Git - nageru/commitdiff
Move the lo-cut into each bus.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 22 Aug 2016 19:36:55 +0000 (21:36 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 19 Oct 2016 22:55:44 +0000 (00:55 +0200)
audio_mixer.cpp
audio_mixer.h
mainwindow.cpp

index 769dabfa74a0831cb6678a52f15d245d2c4ca6f2..03c894ce89f3680e6018e0c7adc732950f6ef4ca 100644 (file)
@@ -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<float> 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<float> 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<mutex> lock(compressor_mutex);
 
index 31611af095151b4f65b2cc40f7836ed39b06887d..0c401d5e6b858f9f9a8c30e5eed5b5865a8a6d80 100644 (file)
@@ -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<ALSAInput::Device> available_alsa_cards;
 
-       StereoFilter locut;  // Default cutoff 120 Hz, 24 dB/oct.
        std::atomic<float> locut_cutoff_hz;
-       std::atomic<bool> locut_enabled{true};
+       StereoFilter locut[MAX_BUSES];  // Default cutoff 120 Hz, 24 dB/oct.
+       std::atomic<bool> locut_enabled[MAX_BUSES];
 
        // First compressor; takes us up to about -12 dBFS.
        mutable std::mutex compressor_mutex;
index 99e8cc328bfeb1f77c58cd47dd7a4776cede46dd..02371060cae3b3f065d42e7fa6a232392ea3e94e 100644 (file)
@@ -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);
        }
 }