Skip to content

Commit

Permalink
Merge pull request #25021 from mathesoncalum/24985-new_part_muting
Browse files Browse the repository at this point in the history
Fix #24985: Ensure newly added instruments are muted in excerpts
  • Loading branch information
RomanPudashkin authored Oct 15, 2024
2 parents c1f39cd + 559bfc2 commit cb2cee5
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/playback/internal/playbackcontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -980,6 +980,7 @@ void PlaybackController::doAddTrack(const InstrumentTrackId& instrumentTrackId,

m_instrumentTrackIdMap.insert({ instrumentTrackId, trackId });

const bool trackNewlyAdded = !audioSettings()->trackHasExistingOutputParams(instrumentTrackId);
audioSettings()->setTrackInputParams(instrumentTrackId, appliedParams.in);
audioSettings()->setTrackOutputParams(instrumentTrackId, appliedParams.out);

Expand All @@ -989,6 +990,10 @@ void PlaybackController::doAddTrack(const InstrumentTrackId& instrumentTrackId,

m_trackAdded.send(trackId);

if (trackNewlyAdded) {
onTrackNewlyAdded(instrumentTrackId);
}

if (shouldLoadDrumset(originMeta, appliedParams.in.resourceMeta)) {
m_drumsetLoader.loadDrumset(m_notation, instrumentTrackId, appliedParams.in.resourceMeta);
}
Expand Down Expand Up @@ -1133,6 +1138,19 @@ void PlaybackController::removeTrack(const InstrumentTrackId& instrumentTrackId)
m_instrumentTrackIdMap.erase(instrumentTrackId);
}

void PlaybackController::onTrackNewlyAdded(const InstrumentTrackId& instrumentTrackId)
{
for (const IExcerptNotationPtr& excerpt : m_masterNotation->excerpts()) {
if (const INotationPtr& notation = excerpt->notation()) {
if (notation == m_notation) {
continue;
}
const INotationSoloMuteState::SoloMuteState soloMuteState = { /*mute*/ true, /*solo*/ false };
notation->soloMuteState()->setTrackSoloMuteState(instrumentTrackId, soloMuteState);
}
}
}

void PlaybackController::setupNewCurrentSequence(const TrackSequenceId sequenceId)
{
playback()->tracks()->removeAllTracks(m_currentSequenceId);
Expand Down
2 changes: 2 additions & 0 deletions src/playback/internal/playbackcontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,8 @@ class PlaybackController : public IPlaybackController, public muse::actions::Act
void removeNonExistingTracks();
void removeTrack(const engraving::InstrumentTrackId& instrumentTrackId);

void onTrackNewlyAdded(const engraving::InstrumentTrackId& instrumentTrackId);

muse::audio::secs_t playedTickToSecs(int tick) const;

notation::INotationPtr m_notation;
Expand Down
5 changes: 5 additions & 0 deletions src/project/internal/projectaudiosettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,11 @@ void ProjectAudioSettings::clearTrackInputParams()
m_settingsChanged.notify();
}

bool ProjectAudioSettings::trackHasExistingOutputParams(const InstrumentTrackId& partId) const
{
return muse::contains(m_trackOutputParamsMap, partId);
}

const AudioOutputParams& ProjectAudioSettings::trackOutputParams(const InstrumentTrackId& partId) const
{
auto search = m_trackOutputParamsMap.find(partId);
Expand Down
1 change: 1 addition & 0 deletions src/project/internal/projectaudiosettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ class ProjectAudioSettings : public IProjectAudioSettings
void setTrackInputParams(const engraving::InstrumentTrackId& partId, const muse::audio::AudioInputParams& params) override;
void clearTrackInputParams() override;

bool trackHasExistingOutputParams(const engraving::InstrumentTrackId& partId) const override;
const muse::audio::AudioOutputParams& trackOutputParams(const engraving::InstrumentTrackId& partId) const override;
void setTrackOutputParams(const engraving::InstrumentTrackId& partId, const muse::audio::AudioOutputParams& params) override;

Expand Down
1 change: 1 addition & 0 deletions src/project/iprojectaudiosettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ class IProjectAudioSettings
virtual void setTrackInputParams(const engraving::InstrumentTrackId& trackId, const muse::audio::AudioInputParams& params) = 0;
virtual void clearTrackInputParams() = 0;

virtual bool trackHasExistingOutputParams(const engraving::InstrumentTrackId& trackId) const = 0;
virtual const muse::audio::AudioOutputParams& trackOutputParams(const engraving::InstrumentTrackId& trackId) const = 0;
virtual void setTrackOutputParams(const engraving::InstrumentTrackId& trackId, const muse::audio::AudioOutputParams& params) = 0;

Expand Down

0 comments on commit cb2cee5

Please sign in to comment.