diff --git a/src/gui/src/Mixer/Mixer.cpp b/src/gui/src/Mixer/Mixer.cpp index 6ae3ef211..899bb687d 100644 --- a/src/gui/src/Mixer/Mixer.cpp +++ b/src/gui/src/Mixer/Mixer.cpp @@ -232,20 +232,26 @@ void Mixer::muteClicked(ComponentMixerLine* ref) bool isMuteClicked = ref->isMuteClicked(); auto pCompo = pSong->getDrumkit()->getComponent( ref->getComponentID() ); - - pCompo->set_muted( isMuteClicked ); - Hydrogen::get_instance()->setIsModified( true ); + if ( isMuteClicked != pCompo->is_muted() ) { + pCompo->set_muted( isMuteClicked ); + Hydrogen::get_instance()->setIsModified( true ); + } } void Mixer::soloClicked(ComponentMixerLine* ref) { + auto pSong = Hydrogen::get_instance()->getSong(); bool isSoloClicked = ref->isSoloClicked(); int nLine = findCompoMixerLineByRef(ref); ComponentMixerLine* pComponentMixerLine = m_pComponentMixerLine[nLine]; - - pComponentMixerLine->setSoloClicked( isSoloClicked ); - Hydrogen::get_instance()->setIsModified( true ); + auto pCompo = pSong->getDrumkit()->getComponent( ref->getComponentID() ); + + if ( isSoloClicked != pCompo->is_soloed() ) { + pCompo->set_soloed( isSoloClicked ); + pComponentMixerLine->setSoloClicked( isSoloClicked ); + Hydrogen::get_instance()->setIsModified( true ); + } } void Mixer::volumeChanged(ComponentMixerLine* ref) @@ -255,8 +261,10 @@ void Mixer::volumeChanged(ComponentMixerLine* ref) auto pCompo = pSong->getDrumkit()->getComponent( ref->getComponentID() ); - pCompo->set_volume( newVolume ); - Hydrogen::get_instance()->setIsModified( true ); + if ( newVolume != pCompo->get_volume() ) { + pCompo->set_volume( newVolume ); + Hydrogen::get_instance()->setIsModified( true ); + } } void Mixer::soloClicked(MixerLine* ref) @@ -737,9 +745,14 @@ void Mixer::knobChanged(MixerLine* ref, int nKnob) { ERRORLOG( "No instrument selected" ); return; } + float fLevel = ref->getFXLevel(nKnob); + + if ( pSelectedInstrument->get_fx_level( nKnob) != fLevel ) { + pSelectedInstrument->set_fx_level( fLevel, nKnob ); + + pHydrogen->setIsModified( true ); + } - pSelectedInstrument->set_fx_level( ref->getFXLevel(nKnob), nKnob ); - QString sMessage = tr( "Set FX %1 level [%2] of instrument" ) .arg( nKnob ) .arg( ref->getFXLevel(nKnob), 0, 'f', 2 ); @@ -751,7 +764,6 @@ void Mixer::knobChanged(MixerLine* ref, int nKnob) { ( HydrogenApp::get_instance() )-> showStatusBarMessage( sMessage, sCaller ); - pHydrogen->setIsModified( true ); } @@ -847,7 +859,11 @@ void Mixer::ladspaVolumeChanged( LadspaFXMixerLine* ref) if (ref == m_pLadspaFXLine[ nFX ] ) { LadspaFX *pFX = Effects::get_instance()->getLadspaFX(nFX); if ( pFX != nullptr ) { - pFX->setVolume( ref->getVolume() ); + float fVolume = ref->getVolume(); + if ( pFX->getVolume() != fVolume ) { + pFX->setVolume( fVolume ); + Hydrogen::get_instance()->setIsModified( true ); + } QString sMessage = tr( "Set volume [%1] of FX" ) .arg( ref->getVolume(), 0, 'f', 2 ); @@ -858,7 +874,6 @@ void Mixer::ladspaVolumeChanged( LadspaFXMixerLine* ref) HydrogenApp::get_instance()-> showStatusBarMessage( sMessage, sCaller ); - Hydrogen::get_instance()->setIsModified( true ); } } } diff --git a/src/gui/src/Mixer/MixerLine.cpp b/src/gui/src/Mixer/MixerLine.cpp index eb9b01eb6..dcecd6528 100644 --- a/src/gui/src/Mixer/MixerLine.cpp +++ b/src/gui/src/Mixer/MixerLine.cpp @@ -201,20 +201,17 @@ void MixerLine::updateMixerLine() } void MixerLine::muteBtnClicked() { - Hydrogen::get_instance()->setIsModified( true ); emit muteBtnClicked(this); } void MixerLine::soloBtnClicked() { - Hydrogen::get_instance()->setIsModified( true ); emit soloBtnClicked(this); } void MixerLine::faderChanged( WidgetWithInput *pRef ) { assert( pRef ); - - Hydrogen::get_instance()->setIsModified( true ); + emit volumeChanged(this); WidgetWithInput* pFader = static_cast( pRef ); @@ -495,8 +492,7 @@ void ComponentMixerLine::soloBtnClicked() { void ComponentMixerLine::faderChanged( WidgetWithInput *pRef ) { assert( pRef ); - - Hydrogen::get_instance()->setIsModified( true ); + emit volumeChanged(this); WidgetWithInput* pFader = static_cast( pRef ); @@ -684,8 +680,6 @@ void MasterMixerLine::faderChanged( WidgetWithInput *pRef ) emit volumeChanged(this); - Hydrogen::get_instance()->setIsModified( true ); - double value = (double) pFader->getValue(); ( HydrogenApp::get_instance() )-> showStatusBarMessage( tr( "Set master volume [%1]" ) diff --git a/src/gui/src/Mixer/MixerLine.h b/src/gui/src/Mixer/MixerLine.h index 6913e284a..a533b3fbc 100644 --- a/src/gui/src/Mixer/MixerLine.h +++ b/src/gui/src/Mixer/MixerLine.h @@ -98,7 +98,7 @@ class MixerLine: public PixmapWidget, public H2Core::Object void setSoloClicked(bool isClicked); float getVolume(); - void setVolume(float value); + void setVolume( float value ); void setPeak_L( float peak ); float getPeak_L();