summaryrefslogtreecommitdiff
path: root/library/sound.cpp
Side-by-side diff
Diffstat (limited to 'library/sound.cpp') (more/less context) (show whitespace changes)
-rw-r--r--library/sound.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/library/sound.cpp b/library/sound.cpp
index 602fcf0..1ff3b3f 100644
--- a/library/sound.cpp
+++ b/library/sound.cpp
@@ -104,44 +104,48 @@ class SoundData : public QSound {
public:
SoundData(const QString& name) :
QSound(Resource::findSound(name)),
filename(Resource::findSound(name))
{
loopsleft=0;
+ ms = WAVsoundDuration(filename);
}
void playLoop(int loopcnt = -1)
{
// needs server support
loopsleft = loopcnt;
- int ms = WAVsoundDuration(filename);
if ( ms )
startTimer(ms > 50 ? ms-50 : 0); // 50 for latency
play();
}
void timerEvent ( QTimerEvent *e )
{
if (loopsleft >= 0) {
- if (--loopsleft <= 0)
+ if ( --loopsleft <= 0 ) {
killTimer (e->timerId());
+ loopsleft = 0;
return;
}
+ }
play();
}
bool isFinished ( ) const
{
return ( loopsleft == 0 );
}
private:
QString filename;
int loopsleft;
+ int ms;
};
+
#endif
Sound::Sound(const QString& name)
{
#ifndef QT_NO_SOUND
d = new SoundData(name);
@@ -155,13 +159,12 @@ Sound::~Sound()
#endif
}
void Sound::play()
{
#ifndef QT_NO_SOUND
- d->killTimers();
d->playLoop(1);
#endif
}
void Sound::playLoop()
{
@@ -179,12 +182,14 @@ void Sound::stop()
}
bool Sound::isFinished() const
{
#ifndef QT_NO_SOUND
return d->isFinished();
+#else
+ return true;
#endif
}
void Sound::soundAlarm()
{
#ifndef QT_NO_COP