From a421812c64b9e7e53275b9ba1a6450e4bef8c26a Mon Sep 17 00:00:00 2001 From: Saara Korhonen Date: Tue, 24 Jun 2025 12:40:10 +0300 Subject: [PATCH 1/3] DlgPrefWaveform: add setting to disable EQ gain influence on waveform Adds a checkbox to preferences to toggle if EQ knob gain affects waveform rendering. Allows displaying waveform amplitude regardless of EQ knob positions. --- src/preferences/dialog/dlgprefwaveform.cpp | 12 ++++++++++++ src/preferences/dialog/dlgprefwaveform.h | 1 + src/preferences/dialog/dlgprefwaveformdlg.ui | 9 ++++++++- .../renderers/waveformrenderersignalbase.cpp | 11 +++++++++++ src/waveform/renderers/waveformrenderersignalbase.h | 2 ++ src/waveform/waveformwidgetfactory.cpp | 11 +++++++++++ src/waveform/waveformwidgetfactory.h | 7 +++++++ 7 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/preferences/dialog/dlgprefwaveform.cpp b/src/preferences/dialog/dlgprefwaveform.cpp index d770f10e1249..32cad2dba7fb 100644 --- a/src/preferences/dialog/dlgprefwaveform.cpp +++ b/src/preferences/dialog/dlgprefwaveform.cpp @@ -149,6 +149,10 @@ DlgPrefWaveform::DlgPrefWaveform( &QCheckBox::clicked, this, &DlgPrefWaveform::slotSetWaveformOptionHighDetail); + connect(disableEqGainCheckBox, + &QCheckBox::clicked, + this, + &DlgPrefWaveform::slotSetDisableEq); connect(defaultZoomComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, @@ -280,6 +284,10 @@ void DlgPrefWaveform::slotUpdate() { updateEnableUntilMark(); updateWaveformGeneralOptionsEnabled(); + bool disableEqGain = m_pConfig->getValue( + ConfigKey("[Waveform]", "disable_eq_gain"), false); + disableEqGainCheckBox->setChecked(disableEqGain); + frameRateSpinBox->setValue(factory->getFrameRate()); frameRateSlider->setValue(factory->getFrameRate()); endOfTrackWarningTimeSpinBox->setValue(factory->getEndOfTrackWarningTime()); @@ -618,6 +626,10 @@ void DlgPrefWaveform::slotSetNormalizeOverview(bool normalize) { updateWaveformGainEnabled(); } +void DlgPrefWaveform::slotSetDisableEq(bool checked) { + WaveformWidgetFactory::instance()->setEqGainDisabled(checked); +} + void DlgPrefWaveform::slotSetOverviewMinuteMarkers(bool draw) { m_pConfig->setValue(ConfigKey("[Waveform]", "draw_overview_minute_markers"), draw); m_pOverviewMinuteMarkersControl->forceSet(draw); diff --git a/src/preferences/dialog/dlgprefwaveform.h b/src/preferences/dialog/dlgprefwaveform.h index 367dda8b396a..c5f96274b94e 100644 --- a/src/preferences/dialog/dlgprefwaveform.h +++ b/src/preferences/dialog/dlgprefwaveform.h @@ -45,6 +45,7 @@ class DlgPrefWaveform : public DlgPreferencePage, public Ui::DlgPrefWaveformDlg slotSetWaveformOptions(allshader::WaveformRendererSignalBase::Option::HighDetail, checked); } #endif + void slotSetDisableEq(bool checked); void slotSetWaveformOverviewType(); void slotSetDefaultZoom(int index); void slotSetZoomSynchronization(bool checked); diff --git a/src/preferences/dialog/dlgprefwaveformdlg.ui b/src/preferences/dialog/dlgprefwaveformdlg.ui index 01fc4e8ddef5..4793aa6e52bb 100644 --- a/src/preferences/dialog/dlgprefwaveformdlg.ui +++ b/src/preferences/dialog/dlgprefwaveformdlg.ui @@ -83,7 +83,14 @@ Select from different types of displays for the waveform, which differ primarily High details - + + + + + Disable EQ Gain in Waveform + + + diff --git a/src/waveform/renderers/waveformrenderersignalbase.cpp b/src/waveform/renderers/waveformrenderersignalbase.cpp index 4b48122cf84e..87f89e2bdda9 100644 --- a/src/waveform/renderers/waveformrenderersignalbase.cpp +++ b/src/waveform/renderers/waveformrenderersignalbase.cpp @@ -160,6 +160,11 @@ void WaveformRendererSignalBase::setup(const QDomNode& node, setHighVisualGain(highGain); }); + connect(pWaveformFactory, + &WaveformWidgetFactory::eqGainDisabledChanged, + this, + [this](bool disabled) { m_eqGainDisabled = disabled; }); + setAllChannelVisualGain(pWaveformFactory->getVisualGain(BandIndex::AllBand)); setLowVisualGain(pWaveformFactory->getVisualGain(BandIndex::Low)); setMidVisualGain(pWaveformFactory->getVisualGain(BandIndex::Mid)); @@ -209,6 +214,12 @@ void WaveformRendererSignalBase::getGains(float* pAllGain, } } + if (m_eqGainDisabled) { + lowVisualGain = m_lowVisualGain; + midVisualGain = m_midVisualGain; + highVisualGain = m_highVisualGain; + } + if (pLowGain != nullptr) { *pLowGain = lowVisualGain; } diff --git a/src/waveform/renderers/waveformrenderersignalbase.h b/src/waveform/renderers/waveformrenderersignalbase.h index 9b5e832e7bd1..452205ce969a 100644 --- a/src/waveform/renderers/waveformrenderersignalbase.h +++ b/src/waveform/renderers/waveformrenderersignalbase.h @@ -64,6 +64,8 @@ class WaveformRendererSignalBase : public QObject, public WaveformRendererAbstra CSAMPLE_GAIN m_midVisualGain; CSAMPLE_GAIN m_highVisualGain; + bool m_eqGainDisabled; + float m_axesColor_r, m_axesColor_g, m_axesColor_b, m_axesColor_a; float m_signalColor_r, m_signalColor_g, m_signalColor_b; float m_signalColor_h, m_signalColor_s, m_signalColor_v; diff --git a/src/waveform/waveformwidgetfactory.cpp b/src/waveform/waveformwidgetfactory.cpp index b5f367a2f341..8db0c1b06c88 100644 --- a/src/waveform/waveformwidgetfactory.cpp +++ b/src/waveform/waveformwidgetfactory.cpp @@ -363,6 +363,10 @@ bool WaveformWidgetFactory::setConfig(UserSettingsPointer config) { bool zoomSync = m_config->getValue(ConfigKey("[Waveform]", "ZoomSynchronization"), m_zoomSync); setZoomSync(zoomSync); + bool disableEqGain = m_config->getValue( + ConfigKey("[Waveform]", "disable_eq_gain"), m_eqGainDisabled); + setEqGainDisabled(disableEqGain); + int beatGridAlpha = m_config->getValue(ConfigKey("[Waveform]", "beatGridAlpha"), m_beatGridAlpha); setDisplayBeatGridAlpha(beatGridAlpha); @@ -664,6 +668,13 @@ void WaveformWidgetFactory::setZoomSync(bool sync) { } } +void WaveformWidgetFactory::setEqGainDisabled(bool disabled) { + m_eqGainDisabled = disabled; + m_config->setValue(ConfigKey("[Waveform]", "disable_eq_gain"), disabled); + + emit eqGainDisabledChanged(disabled); +} + void WaveformWidgetFactory::setDisplayBeatGridAlpha(int alpha) { m_beatGridAlpha = alpha; if (m_waveformWidgetHolders.size() == 0) { diff --git a/src/waveform/waveformwidgetfactory.h b/src/waveform/waveformwidgetfactory.h index 05e3ced526b4..1c851db727b0 100644 --- a/src/waveform/waveformwidgetfactory.h +++ b/src/waveform/waveformwidgetfactory.h @@ -191,6 +191,11 @@ class WaveformWidgetFactory : public QObject, void setZoomSync(bool sync); int isZoomSync() const { return m_zoomSync;} + bool isEqGainDisabled() const { + return m_eqGainDisabled; + }; + void setEqGainDisabled(bool disabled); + void setDisplayBeatGridAlpha(int alpha); int getBeatGridAlpha() const { return m_beatGridAlpha; } @@ -225,6 +230,7 @@ class WaveformWidgetFactory : public QObject, void overviewNormalizeChanged(); void visualGainChanged(double allChannelGain, double lowGain, double midGain, double highGain); + void eqGainDisabledChanged(bool value); void untilMarkShowBeatsChanged(bool value); void untilMarkShowTimeChanged(bool value); @@ -283,6 +289,7 @@ class WaveformWidgetFactory : public QObject, int m_endOfTrackWarningTime; double m_defaultZoom; bool m_zoomSync; + bool m_eqGainDisabled; double m_visualGain[BandCount]; bool m_overviewNormalized; From d389ab5bdc6db654d857b0fa4ff0ca0239be3527 Mon Sep 17 00:00:00 2001 From: Saara Korhonen Date: Tue, 24 Jun 2025 19:32:49 +0300 Subject: [PATCH 2/3] DlgPrefWaveform: rename and fix EQ waveform visualization option Flipped the setting logic to "visualize EQ waveform". Fixed a logic issue where dead code was not skipped. --- src/preferences/dialog/dlgprefwaveform.cpp | 14 +++++++------- src/preferences/dialog/dlgprefwaveform.h | 2 +- src/preferences/dialog/dlgprefwaveformdlg.ui | 4 ++-- .../renderers/waveformrenderersignalbase.cpp | 18 +++++++++--------- .../renderers/waveformrenderersignalbase.h | 2 +- src/waveform/waveformwidgetfactory.cpp | 14 +++++++------- src/waveform/waveformwidgetfactory.h | 10 +++++----- 7 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/preferences/dialog/dlgprefwaveform.cpp b/src/preferences/dialog/dlgprefwaveform.cpp index 32cad2dba7fb..9c220f3e307a 100644 --- a/src/preferences/dialog/dlgprefwaveform.cpp +++ b/src/preferences/dialog/dlgprefwaveform.cpp @@ -149,10 +149,10 @@ DlgPrefWaveform::DlgPrefWaveform( &QCheckBox::clicked, this, &DlgPrefWaveform::slotSetWaveformOptionHighDetail); - connect(disableEqGainCheckBox, + connect(visualizeEqGainCheckBox, &QCheckBox::clicked, this, - &DlgPrefWaveform::slotSetDisableEq); + &DlgPrefWaveform::slotSetVisualizeEq); connect(defaultZoomComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, @@ -284,9 +284,9 @@ void DlgPrefWaveform::slotUpdate() { updateEnableUntilMark(); updateWaveformGeneralOptionsEnabled(); - bool disableEqGain = m_pConfig->getValue( - ConfigKey("[Waveform]", "disable_eq_gain"), false); - disableEqGainCheckBox->setChecked(disableEqGain); + bool visualizeEqGain = m_pConfig->getValue( + ConfigKey("[Waveform]", "visualize_eq_gain"), false); + visualizeEqGainCheckBox->setChecked(visualizeEqGain); frameRateSpinBox->setValue(factory->getFrameRate()); frameRateSlider->setValue(factory->getFrameRate()); @@ -626,8 +626,8 @@ void DlgPrefWaveform::slotSetNormalizeOverview(bool normalize) { updateWaveformGainEnabled(); } -void DlgPrefWaveform::slotSetDisableEq(bool checked) { - WaveformWidgetFactory::instance()->setEqGainDisabled(checked); +void DlgPrefWaveform::slotSetVisualizeEq(bool checked) { + WaveformWidgetFactory::instance()->setVisualizeEqGain(checked); } void DlgPrefWaveform::slotSetOverviewMinuteMarkers(bool draw) { diff --git a/src/preferences/dialog/dlgprefwaveform.h b/src/preferences/dialog/dlgprefwaveform.h index c5f96274b94e..948cb3e972d7 100644 --- a/src/preferences/dialog/dlgprefwaveform.h +++ b/src/preferences/dialog/dlgprefwaveform.h @@ -45,7 +45,7 @@ class DlgPrefWaveform : public DlgPreferencePage, public Ui::DlgPrefWaveformDlg slotSetWaveformOptions(allshader::WaveformRendererSignalBase::Option::HighDetail, checked); } #endif - void slotSetDisableEq(bool checked); + void slotSetVisualizeEq(bool checked); void slotSetWaveformOverviewType(); void slotSetDefaultZoom(int index); void slotSetZoomSynchronization(bool checked); diff --git a/src/preferences/dialog/dlgprefwaveformdlg.ui b/src/preferences/dialog/dlgprefwaveformdlg.ui index 4793aa6e52bb..0f192895598b 100644 --- a/src/preferences/dialog/dlgprefwaveformdlg.ui +++ b/src/preferences/dialog/dlgprefwaveformdlg.ui @@ -85,9 +85,9 @@ Select from different types of displays for the waveform, which differ primarily - + - Disable EQ Gain in Waveform + Visualize EQ Gain diff --git a/src/waveform/renderers/waveformrenderersignalbase.cpp b/src/waveform/renderers/waveformrenderersignalbase.cpp index 87f89e2bdda9..41f78ea1132d 100644 --- a/src/waveform/renderers/waveformrenderersignalbase.cpp +++ b/src/waveform/renderers/waveformrenderersignalbase.cpp @@ -161,9 +161,11 @@ void WaveformRendererSignalBase::setup(const QDomNode& node, }); connect(pWaveformFactory, - &WaveformWidgetFactory::eqGainDisabledChanged, + &WaveformWidgetFactory::visualizeEqGainChanged, this, - [this](bool disabled) { m_eqGainDisabled = disabled; }); + [this](bool value) { m_visualizeEqGain = value; }); + + m_visualizeEqGain = pWaveformFactory->visualizeEqGain(); setAllChannelVisualGain(pWaveformFactory->getVisualGain(BandIndex::AllBand)); setLowVisualGain(pWaveformFactory->getVisualGain(BandIndex::Low)); @@ -188,7 +190,11 @@ void WaveformRendererSignalBase::getGains(float* pAllGain, CSAMPLE_GAIN lowVisualGain = 1.0, midVisualGain = 1.0, highVisualGain = 1.0; // Only adjust low/mid/high gains if EQs are enabled. - if (m_pEQEnabled && m_pEQEnabled->get() > 0.0) { + if (!m_visualizeEqGain) { + lowVisualGain = m_lowVisualGain; + midVisualGain = m_midVisualGain; + highVisualGain = m_highVisualGain; + } else if (m_pEQEnabled && m_pEQEnabled->get() > 0.0) { if (m_pLowFilterControlObject && m_pMidFilterControlObject && m_pHighFilterControlObject) { @@ -214,12 +220,6 @@ void WaveformRendererSignalBase::getGains(float* pAllGain, } } - if (m_eqGainDisabled) { - lowVisualGain = m_lowVisualGain; - midVisualGain = m_midVisualGain; - highVisualGain = m_highVisualGain; - } - if (pLowGain != nullptr) { *pLowGain = lowVisualGain; } diff --git a/src/waveform/renderers/waveformrenderersignalbase.h b/src/waveform/renderers/waveformrenderersignalbase.h index 452205ce969a..eb3cf2835149 100644 --- a/src/waveform/renderers/waveformrenderersignalbase.h +++ b/src/waveform/renderers/waveformrenderersignalbase.h @@ -64,7 +64,7 @@ class WaveformRendererSignalBase : public QObject, public WaveformRendererAbstra CSAMPLE_GAIN m_midVisualGain; CSAMPLE_GAIN m_highVisualGain; - bool m_eqGainDisabled; + bool m_visualizeEqGain; float m_axesColor_r, m_axesColor_g, m_axesColor_b, m_axesColor_a; float m_signalColor_r, m_signalColor_g, m_signalColor_b; diff --git a/src/waveform/waveformwidgetfactory.cpp b/src/waveform/waveformwidgetfactory.cpp index 8db0c1b06c88..000415a22865 100644 --- a/src/waveform/waveformwidgetfactory.cpp +++ b/src/waveform/waveformwidgetfactory.cpp @@ -363,9 +363,9 @@ bool WaveformWidgetFactory::setConfig(UserSettingsPointer config) { bool zoomSync = m_config->getValue(ConfigKey("[Waveform]", "ZoomSynchronization"), m_zoomSync); setZoomSync(zoomSync); - bool disableEqGain = m_config->getValue( - ConfigKey("[Waveform]", "disable_eq_gain"), m_eqGainDisabled); - setEqGainDisabled(disableEqGain); + bool visualizeEqGain = m_config->getValue( + ConfigKey("[Waveform]", "visualize_eq_gain"), m_visualizeEqGain); + setVisualizeEqGain(visualizeEqGain); int beatGridAlpha = m_config->getValue(ConfigKey("[Waveform]", "beatGridAlpha"), m_beatGridAlpha); setDisplayBeatGridAlpha(beatGridAlpha); @@ -668,11 +668,11 @@ void WaveformWidgetFactory::setZoomSync(bool sync) { } } -void WaveformWidgetFactory::setEqGainDisabled(bool disabled) { - m_eqGainDisabled = disabled; - m_config->setValue(ConfigKey("[Waveform]", "disable_eq_gain"), disabled); +void WaveformWidgetFactory::setVisualizeEqGain(bool value) { + m_visualizeEqGain = value; + m_config->setValue(ConfigKey("[Waveform]", "visualize_eq_gain"), value); - emit eqGainDisabledChanged(disabled); + emit visualizeEqGainChanged(value); } void WaveformWidgetFactory::setDisplayBeatGridAlpha(int alpha) { diff --git a/src/waveform/waveformwidgetfactory.h b/src/waveform/waveformwidgetfactory.h index 1c851db727b0..cae023d04146 100644 --- a/src/waveform/waveformwidgetfactory.h +++ b/src/waveform/waveformwidgetfactory.h @@ -191,10 +191,10 @@ class WaveformWidgetFactory : public QObject, void setZoomSync(bool sync); int isZoomSync() const { return m_zoomSync;} - bool isEqGainDisabled() const { - return m_eqGainDisabled; + bool visualizeEqGain() const { + return m_visualizeEqGain; }; - void setEqGainDisabled(bool disabled); + void setVisualizeEqGain(bool value); void setDisplayBeatGridAlpha(int alpha); int getBeatGridAlpha() const { return m_beatGridAlpha; } @@ -230,7 +230,7 @@ class WaveformWidgetFactory : public QObject, void overviewNormalizeChanged(); void visualGainChanged(double allChannelGain, double lowGain, double midGain, double highGain); - void eqGainDisabledChanged(bool value); + void visualizeEqGainChanged(bool value); void untilMarkShowBeatsChanged(bool value); void untilMarkShowTimeChanged(bool value); @@ -289,7 +289,7 @@ class WaveformWidgetFactory : public QObject, int m_endOfTrackWarningTime; double m_defaultZoom; bool m_zoomSync; - bool m_eqGainDisabled; + bool m_visualizeEqGain; double m_visualGain[BandCount]; bool m_overviewNormalized; From 8915755c0f044bf33831451c4c3477f7c07cb6cd Mon Sep 17 00:00:00 2001 From: Saara Korhonen Date: Tue, 24 Jun 2025 20:01:06 +0300 Subject: [PATCH 3/3] DlgPrefWaveform: default EQ visualization option to true --- src/preferences/dialog/dlgprefwaveform.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/preferences/dialog/dlgprefwaveform.cpp b/src/preferences/dialog/dlgprefwaveform.cpp index 9c220f3e307a..48f77f379c13 100644 --- a/src/preferences/dialog/dlgprefwaveform.cpp +++ b/src/preferences/dialog/dlgprefwaveform.cpp @@ -285,7 +285,7 @@ void DlgPrefWaveform::slotUpdate() { updateWaveformGeneralOptionsEnabled(); bool visualizeEqGain = m_pConfig->getValue( - ConfigKey("[Waveform]", "visualize_eq_gain"), false); + ConfigKey("[Waveform]", "visualize_eq_gain"), true); visualizeEqGainCheckBox->setChecked(visualizeEqGain); frameRateSpinBox->setValue(factory->getFrameRate());