Skip to content

Commit 1f816e6

Browse files
committed
fix #552: Do not clone sounds which aren't loaded
1 parent 973aac6 commit 1f816e6

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

src/scratch/sound.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,12 @@ std::shared_ptr<Sound> Sound::clone() const
6868
auto sound = std::make_shared<Sound>(name(), id(), dataFormat());
6969
sound->setRate(rate());
7070
sound->setSampleCount(sampleCount());
71-
sound->impl->player->loadCopy(impl->player.get());
7271
sound->impl->player->setVolume(impl->player->volume());
73-
sound->setData(dataSize(), const_cast<void *>(data()));
72+
73+
if (impl->player->isLoaded()) {
74+
sound->impl->player->loadCopy(impl->player.get());
75+
sound->setData(dataSize(), const_cast<void *>(data()));
76+
}
7477

7578
return sound;
7679
}

test/assets/sound_test.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ TEST_F(SoundTest, Clone)
121121

122122
auto clonePlayer = std::make_shared<AudioPlayerMock>();
123123
EXPECT_CALL(m_playerFactory, createAudioPlayer()).WillOnce(Return(clonePlayer));
124+
EXPECT_CALL(*m_player, isLoaded()).WillOnce(Return(true));
124125
EXPECT_CALL(*clonePlayer, loadCopy(m_player.get())).WillOnce(Return(true));
125126
EXPECT_CALL(*m_player, volume()).WillOnce(Return(0.45));
126127
EXPECT_CALL(*clonePlayer, setVolume(0.45));
@@ -132,4 +133,14 @@ TEST_F(SoundTest, Clone)
132133
ASSERT_EQ(clone->dataFormat(), sound.dataFormat());
133134
ASSERT_EQ(clone->rate(), sound.rate());
134135
ASSERT_EQ(clone->sampleCount(), sound.sampleCount());
136+
137+
auto anotherClonePlayer = std::make_shared<AudioPlayerMock>();
138+
EXPECT_CALL(m_playerFactory, createAudioPlayer()).WillOnce(Return(clonePlayer));
139+
EXPECT_CALL(*m_player, isLoaded()).WillOnce(Return(false));
140+
EXPECT_CALL(*clonePlayer, loadCopy).Times(0);
141+
EXPECT_CALL(*m_player, volume()).WillOnce(Return(0.62));
142+
EXPECT_CALL(*clonePlayer, setVolume(0.62));
143+
EXPECT_CALL(*clonePlayer, isLoaded()).Times(0);
144+
auto anotherClone = sound.clone();
145+
ASSERT_TRUE(anotherClone);
135146
}

0 commit comments

Comments
 (0)