]> git.sesse.net Git - nageru/commitdiff
If the channel is mono anyway (same source for left and right), don't bother applying...
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Tue, 1 May 2018 08:36:14 +0000 (10:36 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Tue, 1 May 2018 08:36:14 +0000 (10:36 +0200)
audio_mixer.cpp
audio_mixer.h
mainwindow.cpp
mainwindow.h

index 6f6190a433f20d0b84bc2f85239cbc50ae354bd1..9e7dd59a0dbc64ab6398e30824c8dae6d676b912 100644 (file)
@@ -453,7 +453,10 @@ void AudioMixer::fill_audio_bus(const map<DeviceSpec, vector<float>> &samples_ca
                //   L' = R - D
                //   R' = L + D
                float w = 0.5f * stereo_width + 0.5f;
-               if (fabs(w) < 1e-3) {
+               if (bus.source_channel[0] == bus.source_channel[1]) {
+                       // Mono anyway, so no need to bother.
+                       w = 1.0f;
+               } else if (fabs(w) < 1e-3) {
                        // Perfect inverse.
                        swap(lsrc, rsrc);
                        swap(lstride, rstride);
@@ -1175,4 +1178,18 @@ void AudioMixer::reset_peak(unsigned bus_index)
        }
 }
 
+bool AudioMixer::is_mono(unsigned bus_index)
+{
+       lock_guard<timed_mutex> lock(audio_mutex);
+       const InputMapping::Bus &bus = input_mapping.buses[bus_index];
+       if (bus.device.type == InputSourceType::SILENCE) {
+               return true;
+       } else {
+               assert(bus.device.type == InputSourceType::CAPTURE_CARD ||
+                      bus.device.type == InputSourceType::ALSA_INPUT ||
+                      bus.device.type == InputSourceType::FFMPEG_VIDEO_INPUT);
+               return bus.source_channel[0] == bus.source_channel[1];
+       }
+}
+
 AudioMixer *global_audio_mixer = nullptr;
index 919cef01e483672957db421f871ab65cf10d8a30..9793646c9bac3493651e39643a610c7df75c5d0f 100644 (file)
@@ -142,6 +142,8 @@ public:
                return locut_enabled[bus];
        }
 
+       bool is_mono(unsigned bus_index);
+
        void set_stereo_width(unsigned bus_index, float width)
        {
                stereo_width[bus_index] = width;
index ead7a872422c9d676ff66fa210e7324dde7b3511..b20e3222cda213e1cc994f128996aa5a5cf90975 100644 (file)
@@ -557,7 +557,7 @@ void MainWindow::setup_audio_expanded_view()
                ui_audio_expanded_view->bus_desc_label->setFullText(
                        QString::fromStdString(get_bus_desc_label(mapping.buses[bus_index])));
                audio_expanded_views[bus_index] = ui_audio_expanded_view;
-               update_stereo_label(bus_index, lrintf(100.0f * global_audio_mixer->get_stereo_width(bus_index)));
+               update_stereo_knob_and_label(bus_index, lrintf(100.0f * global_audio_mixer->get_stereo_width(bus_index)));
                update_eq_label(bus_index, EQ_BAND_TREBLE, global_audio_mixer->get_eq(bus_index, EQ_BAND_TREBLE));
                update_eq_label(bus_index, EQ_BAND_MID, global_audio_mixer->get_eq(bus_index, EQ_BAND_MID));
                update_eq_label(bus_index, EQ_BAND_BASS, global_audio_mixer->get_eq(bus_index, EQ_BAND_BASS));
@@ -825,13 +825,32 @@ void MainWindow::eq_knob_changed(unsigned bus_index, EQBand band, int value)
        update_eq_label(bus_index, band, gain_db);
 }
 
-void MainWindow::update_stereo_label(unsigned bus_index, int stereo_width_percent)
+void MainWindow::update_stereo_knob_and_label(unsigned bus_index, int stereo_width_percent)
 {
-       char buf[256];
-       snprintf(buf, sizeof(buf), "Stereo: %d%%", stereo_width_percent);
+       Ui::AudioExpandedView *view = audio_expanded_views[bus_index];
+
+       if (global_audio_mixer->is_mono(bus_index)) {
+               view->stereo_width_knob->setEnabled(false);
+               view->stereo_width_label->setEnabled(false);
+       } else {
+               view->stereo_width_knob->setEnabled(true);
+               view->stereo_width_label->setEnabled(true);
+       }
+       view->stereo_width_knob->setValue(stereo_width_percent);
+       update_stereo_label(bus_index, stereo_width_percent);
+}
 
+void MainWindow::update_stereo_label(unsigned bus_index, int stereo_width_percent)
+{
        Ui::AudioExpandedView *view = audio_expanded_views[bus_index];
-       view->stereo_width_label->setText(buf);
+
+       if (global_audio_mixer->is_mono(bus_index)) {
+               view->stereo_width_label->setText("Mono");
+       } else {
+               char buf[256];
+               snprintf(buf, sizeof(buf), "Stereo: %d%%", stereo_width_percent);
+               view->stereo_width_label->setText(buf);
+       }
 }
 
 void MainWindow::update_eq_label(unsigned bus_index, EQBand band, float gain_db)
index ea0fcdfa15446c02aa26e46dc82d037a209a2517..36be4b8be01a90dbff75d095c1af61b5bc1aa7d1 100644 (file)
@@ -129,6 +129,7 @@ private:
        bool eventFilter(QObject *watched, QEvent *event) override;
        void closeEvent(QCloseEvent *event) override;
        void update_cutoff_labels(float cutoff_hz);
+       void update_stereo_knob_and_label(unsigned bus_index, int stereo_width_percent);
        void update_stereo_label(unsigned bus_index, int stereo_width_percent);
        void update_eq_label(unsigned bus_index, EQBand band, float gain_db);
        void setup_theme_menu();