Skip to content

Commit cf2d4ea

Browse files
Merge pull request #30895 from RomanPudashkin/online_sounds_fixes
[4.6.4] Online sounds: various fixes
2 parents 9384599 + ee52779 commit cf2d4ea

File tree

6 files changed

+57
-17
lines changed

6 files changed

+57
-17
lines changed

src/engraving/playback/playbackmodel.cpp

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,14 @@ void PlaybackModel::reload()
147147
void PlaybackModel::setSendEventsOnScoreChange(const InstrumentTrackId& trackId, bool send)
148148
{
149149
m_sendEventsOnScoreChangeMap[trackId] = send;
150+
151+
if (send) {
152+
auto it = m_changedTrackIdSet.find(trackId);
153+
if (it != m_changedTrackIdSet.end()) {
154+
sendEvents(trackId);
155+
m_changedTrackIdSet.erase(it);
156+
}
157+
}
150158
}
151159

152160
void PlaybackModel::sendEventsForChangedTracks()
@@ -158,8 +166,7 @@ void PlaybackModel::sendEventsForChangedTracks()
158166
TRACEFUNC;
159167

160168
for (const InstrumentTrackId& trackId : m_changedTrackIdSet) {
161-
PlaybackData& data = m_playbackDataMap[trackId];
162-
data.mainStream.send(data.originEvents, data.dynamics);
169+
sendEvents(trackId);
163170
}
164171

165172
m_changedTrackIdSet.clear();
@@ -896,13 +903,8 @@ void PlaybackModel::collectChangesTracks(const InstrumentTrackId& trackId, Chang
896903
void PlaybackModel::notifyAboutChanges(const InstrumentTrackIdSet& oldTracks, const InstrumentTrackIdSet& changedTracks)
897904
{
898905
for (const InstrumentTrackId& trackId : changedTracks) {
899-
auto search = m_playbackDataMap.find(trackId);
900-
if (search == m_playbackDataMap.cend()) {
901-
continue;
902-
}
903-
904906
if (muse::value(m_sendEventsOnScoreChangeMap, trackId, false)) {
905-
search->second.mainStream.send(search->second.originEvents, search->second.dynamics);
907+
sendEvents(trackId);
906908
} else {
907909
m_changedTrackIdSet.insert(trackId);
908910
}
@@ -919,6 +921,17 @@ void PlaybackModel::notifyAboutChanges(const InstrumentTrackIdSet& oldTracks, co
919921
}
920922
}
921923

924+
void PlaybackModel::sendEvents(const InstrumentTrackId& trackId)
925+
{
926+
auto it = m_playbackDataMap.find(trackId);
927+
if (it == m_playbackDataMap.cend()) {
928+
return;
929+
}
930+
931+
PlaybackData& data = it->second;
932+
data.mainStream.send(data.originEvents, data.dynamics);
933+
}
934+
922935
void PlaybackModel::removeTrackEvents(const InstrumentTrackId& trackId, const muse::mpe::timestamp_t timestampFrom,
923936
const muse::mpe::timestamp_t timestampTo)
924937
{

src/engraving/playback/playbackmodel.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ class PlaybackModel : public muse::Injectable, public muse::async::Asyncable
140140
void collectChangesTracks(const InstrumentTrackId& trackId, ChangedTrackIdSet* result);
141141
void notifyAboutChanges(const InstrumentTrackIdSet& oldTracks, const InstrumentTrackIdSet& changedTracks);
142142

143+
void sendEvents(const InstrumentTrackId& trackId);
144+
143145
void removeEventsFromRange(const track_idx_t trackFrom, const track_idx_t trackTo, const muse::mpe::timestamp_t timestampFrom = -1,
144146
const muse::mpe::timestamp_t timestampTo = -1);
145147
void removeTrackEvents(const InstrumentTrackId& trackId, const muse::mpe::timestamp_t timestampFrom = -1,

src/engraving/tests/playback/playbackmodel_tests.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -960,6 +960,16 @@ TEST_F(Engraving_PlaybackModelTests, SimpleRepeat_Changes_Notification)
960960

961961
// [THEN] Events received
962962
EXPECT_EQ(receivedEventCount, expectedEventCount);
963+
964+
// [WHEN] Send score changes
965+
score->changesChannel().send(changes);
966+
967+
// [WHEN] Re-enable sending events on score change
968+
receivedEventCount = 0;
969+
model.setSendEventsOnScoreChange(trackId, true);
970+
971+
// [THEN] Events are sent and received immediately
972+
EXPECT_EQ(receivedEventCount, expectedEventCount);
963973
}
964974

965975
/**

src/playback/qml/MuseScore/Playback/NotationRegionsBeingProcessedView.qml

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,11 @@ Loader {
4343
regionsModel.load()
4444
}
4545

46-
onLoaded: {
47-
item.x = root.notationViewRect.x
48-
item.y = root.notationViewRect.y
49-
item.height = root.notationViewRect.height
50-
item.width = root.notationViewRect.width
51-
item.model = regionsModel
52-
}
53-
5446
sourceComponent: Item {
55-
property alias model: repeater.model
47+
x: root.notationViewRect.x
48+
y: root.notationViewRect.y
49+
width: root.notationViewRect.width
50+
height: root.notationViewRect.height
5651

5752
clip: true
5853

@@ -61,6 +56,8 @@ Loader {
6156

6257
anchors.fill: parent
6358

59+
model: regionsModel
60+
6461
delegate: AudioProcessingProgressBar {
6562
id: progressBar
6663

src/playback/view/internal/notationregionsbeingprocessedmodel.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
using namespace muse::audio;
2626
using namespace mu::playback;
2727
using namespace mu::engraving;
28+
using namespace mu::notation;
2829

2930
static const Segment* findSegmentFrom(const Score* score, const System* system,
3031
const int tickFrom, const staff_idx_t staffIdx)
@@ -133,7 +134,10 @@ void NotationRegionsBeingProcessedModel::load()
133134
onOnlineSoundsChanged();
134135
});
135136

137+
listenViewModeChanges();
138+
136139
globalContext()->currentNotationChanged().onNotify(this, [this]() {
140+
listenViewModeChanges();
137141
updateRegionsBeingProcessed(m_tracksBeingProcessed);
138142
});
139143

@@ -247,6 +251,18 @@ void NotationRegionsBeingProcessedModel::onIsPlayingChanged()
247251
}
248252
}
249253

254+
void NotationRegionsBeingProcessedModel::listenViewModeChanges()
255+
{
256+
INotationPtr notation = globalContext()->currentNotation();
257+
if (!notation) {
258+
return;
259+
}
260+
261+
notation->viewModeChanged().onNotify(this, [this]() {
262+
updateRegionsBeingProcessed(m_tracksBeingProcessed);
263+
});
264+
}
265+
250266
void NotationRegionsBeingProcessedModel::startListeningToProgress(const TrackId trackId)
251267
{
252268
const IPlaybackController::InstrumentTrackIdMap& instrumentTrackIdMap = playbackController()->instrumentTrackIdMap();

src/playback/view/internal/notationregionsbeingprocessedmodel.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ public slots:
122122
void onOnlineSoundsChanged();
123123
void onIsPlayingChanged();
124124

125+
void listenViewModeChanges();
126+
125127
void startListeningToProgress(const muse::audio::TrackId trackId);
126128
void stopListeningToProgress(const muse::audio::TrackId trackId);
127129

0 commit comments

Comments
 (0)