/*!
\qmlproperty int QtMultimedia::SoundEffect::loops
- This property provides a way to control the number of times to repeat the sound on each play().
+ This property holds the number of times the sound is played. A value of 0 or 1 means
+ the sound will be played only once; set to SoundEffect.Infinite to enable infinite looping.
- Set to SoundEffect.Infinite to enable infinite looping.
+ The value can be changed while the sound effect is playing, in which case it will update
+ the remaining loops to the new value.
*/
/*!
\property QSoundEffect::loops
- This property provides a way to control the number of times to repeat the sound on each play().
+ This property holds the number of times the sound is played. A value of 0 or 1 means
+ the sound will be played only once; set to SoundEffect.Infinite to enable infinite looping.
- Set to QSoundEffect::Infinite to enable infinite looping.
+ The value can be changed while the sound effect is playing, in which case it will update
+ the remaining loops to the new value.
*/
/*!
*/
/*!
- Set the total number of times to repeat playing this sound effect on each play() call to \a loopCount.
- Pass \c QSoundEffect::Infinite to repeat until stop() is called.
+ Set the total number of times to play this sound effect to \a loopCount.
+
+ Setting the loop count to 0 or 1 means the sound effect will be played only once;
+ pass \c QSoundEffect::Infinite to repeat indefinitely. The loop count can be changed while
+ the sound effect is playing, in which case it will update the remaining loops to
+ the new \a loopCount.
+
+ \sa loopsRemaining()
*/
void QSoundEffect::setLoopCount(int loopCount)
{
sound->setLoopCount(5);
sound->setVolume(0.1f);
- QCOMPARE(sound->loopCount(),5);
- QCOMPARE(readSignal_Count.count(),1);
+ QCOMPARE(sound->loopCount(), 5);
+ QCOMPARE(readSignal_Count.count(), 1);
+ QCOMPARE(sound->loopsRemaining(), 0);
+ QCOMPARE(readSignal_Remaining.count(), 0);
sound->play();
+ QCOMPARE(sound->loopsRemaining(), 5);
+ QCOMPARE(readSignal_Remaining.count(), 1);
// test.wav is about 200ms, wait until it has finished playing 5 times
QTestEventLoop::instance().enterLoop(3);
QTRY_COMPARE(sound->loopsRemaining(), 0);
- QCOMPARE(readSignal_Remaining.count(),5);
+ QVERIFY(readSignal_Remaining.count() >= 6);
+ QTRY_VERIFY(!sound->isPlaying());
+
+ // QTBUG-36643 (setting the loop count while playing should work)
+ {
+ readSignal_Count.clear();
+ readSignal_Remaining.clear();
+
+ sound->setLoopCount(30);
+ QCOMPARE(sound->loopCount(), 30);
+ QCOMPARE(readSignal_Count.count(), 1);
+ QCOMPARE(sound->loopsRemaining(), 0);
+ QCOMPARE(readSignal_Remaining.count(), 0);
+
+ sound->play();
+ QCOMPARE(sound->loopsRemaining(), 30);
+ QCOMPARE(readSignal_Remaining.count(), 1);
+
+ // wait for the sound to be played several times
+ QTRY_COMPARE(sound->loopsRemaining(), 20);
+ QVERIFY(readSignal_Remaining.count() >= 10);
+ readSignal_Count.clear();
+ readSignal_Remaining.clear();
+
+ // change the loop count while playing
+ sound->setLoopCount(5);
+ QCOMPARE(sound->loopCount(), 5);
+ QCOMPARE(readSignal_Count.count(), 1);
+ QCOMPARE(sound->loopsRemaining(), 5);
+ QCOMPARE(readSignal_Remaining.count(), 1);
+
+ // wait for all the loops to be completed
+ QTRY_COMPARE(sound->loopsRemaining(), 0);
+ QVERIFY(readSignal_Remaining.count() >= 6);
+ QTRY_VERIFY(!sound->isPlaying());
+ }
+
+ {
+ readSignal_Count.clear();
+ readSignal_Remaining.clear();
+
+ sound->setLoopCount(QSoundEffect::Infinite);
+ QCOMPARE(sound->loopCount(), int(QSoundEffect::Infinite));
+ QCOMPARE(readSignal_Count.count(), 1);
+ QCOMPARE(sound->loopsRemaining(), 0);
+ QCOMPARE(readSignal_Remaining.count(), 0);
+
+ sound->play();
+ QCOMPARE(sound->loopsRemaining(), int(QSoundEffect::Infinite));
+ QCOMPARE(readSignal_Remaining.count(), 1);
+
+ QTest::qWait(1500);
+ QVERIFY(sound->isPlaying());
+ readSignal_Count.clear();
+ readSignal_Remaining.clear();
+
+ // Setting the loop count to 0 should play it one last time
+ sound->setLoopCount(0);
+ QCOMPARE(sound->loopCount(), 1);
+ QCOMPARE(readSignal_Count.count(), 1);
+ QCOMPARE(sound->loopsRemaining(), 1);
+ QCOMPARE(readSignal_Remaining.count(), 1);
+
+ QTRY_COMPARE(sound->loopsRemaining(), 0);
+ QVERIFY(readSignal_Remaining.count() >= 2);
+ QTRY_VERIFY(!sound->isPlaying());
+ }
}
void tst_QSoundEffect::testVolume()