Fix Mixer: Master channel's mute button has no effect - #34747
Fix Mixer: Master channel's mute button has no effect#34747tharos-devs wants to merge 2 commits into
Conversation
MixerChannelItem::setMuted() only emits soloMuteStateChanged, never controlParamsChanged. buildMasterChannelItem() only connected to controlParamsChanged (unlike instrument/aux/video channels, which all also connect soloMuteStateChanged), so toggling mute on the Master channel updated the UI but never reached the audio engine.
The master channel's mute button never applies force-mute logic (that concept only exists for instrument tracks when another track is soloed), so the call added in 533592c was both wrong and referenced a nonexistent controller method. Just push the mute state through.
mathesoncalum
left a comment
There was a problem hiding this comment.
There's definitely a missing connection here so this is the right idea, but this change alone won't ensure that muting the master channel persists when the score is saved/reopened (that's not a recent regression to my knowledge, but we should fix it).
On that note I'm actually noticing quite a few problems in the mixer right now relating to dirty state, save/reopen, etc. With this in mind @zacjansheski before we start refining this PR could you do a quick sweep of the mixer in 5.0 and report back any problems you find? For example I've noticed that moving the faders doesn't mark the score as edited which looks like a regression against 4.7:
faders.mov
Once we have a better idea of the bigger picture then we'll push ahead with this PR.
|
Thanks for flagging this — you're right, mute-state persistence across save/reopen is a separate issue from the one addressed in this PR. As a starting point for the mixer sweep: while looking into Master-channel-specific issues, I found another "missing connection" bug of the same kind — VST3 FX editor windows never open for plugins added to the Master channel's FX slots (double-clicking does nothing), even though it works fine on instrument tracks. This was already tracked as #33872, its root cause has been identified, and I've just proposed a fix in PR #34763. I'll keep digging into Master/mixer issues and see what else can be proposed. |
|
@tharos-devs please wait for @zacjansheski to report back to us before making any more changes or opening any more PRs/issues - you already have quite a few in progress. |
|
Follow-up after digging further into the mixer sweep, as promised. What's fixedApplied this PR (#34747), #34676 (volume/pan/solo reset) and #34763 (VST3 FX editor on Master) together on top of main:
What's still brokenMaster channel mute still does not persist across save/reopen, and does not mark the file as needing save — this PR fixes the live/runtime side (muting now actually mutes), but doesn't touch file persistence, which is a separate gap. Root cause: Aux send level (the knob) and the aux-send active toggle (e.g. the "Reverb" button) don't persist either, on any channel type — instrument, aux, or Master. Their Separately, not really a bug but worth flagging: the Metronome track's Mute button in the Mixer doesn't behave like every other track's mute — it's wired to Next stepsI can propose a fix for each of the three points above, but I won't submit anything (commits, PRs, or issues) without explicit go-ahead first. Standing by for @zacjansheski's sweep report and your direction on how you'd like this prioritized. |
|
Another addition to the "What's still broken" list — a naming inconsistency between an Aux channel's own name and its "Aux send" button. An Aux channel's name and its "Aux send" button (shown on every instrument track) should be the same thing, and usually are — but not always. For Aux 2, both are consistent: the channel is named "Aux 2", and every instrument's "Aux send 2" button also reads "Aux 2". For Aux 1, they disagree: the channel itself is named "Aux 1", but every instrument's "Aux send 1" button instead reads "Reverb". Either the channel should be named "Reverb" to match its own send button, or the send button should read "Aux 1" to match the channel — right now they don't agree, unlike Aux 2. Root cause: the channel's own name and its send-button label are computed independently, by two different code paths in |


Resolves: #33239
The Mute button on the Mixer's Master channel updated the UI but never
actually silenced the audio.
MixerChannelItem::setMuted()only emitssoloMuteStateChanged(nevercontrolParamsChanged).MixerPanelModel::buildMasterChannelItem()onlyconnected to
controlParamsChanged/fxChainParamsChanged/auxSendsParamsChanged— unlike every other channel builder (instrument, aux), which also
connect
soloMuteStateChanged. So toggling Master mute never reachedplayback()->setMasterControlParams(...), and therefore never reached theaudio engine.
The audio engine side already works correctly when actually invoked
(
AudioContext::onControlParamsChanged()→ControlNode::setMuted()→node disabled), so the fix only adds the missing
soloMuteStateChangedconnection in
buildMasterChannelItem(), mirroring theforceMutelogicalready used in the existing
controlParamsChangedhandler.