author | sandman <sandman> | 2002-06-09 23:37:26 (UTC) |
---|---|---|
committer | sandman <sandman> | 2002-06-09 23:37:26 (UTC) |
commit | 65b1a790493272a38b0ac44e219d5186168fabac (patch) (side-by-side diff) | |
tree | b26ebca8644af8e7af68690f13c45cebfd747e49 /library/sound.cpp | |
parent | bb2f23307a6797c4b338b4504de39fdde3678893 (diff) | |
download | opie-65b1a790493272a38b0ac44e219d5186168fabac.zip opie-65b1a790493272a38b0ac44e219d5186168fabac.tar.gz opie-65b1a790493272a38b0ac44e219d5186168fabac.tar.bz2 |
Fixed sound handling for iPAQs
New feature: raise volume while playing Alarm sound (confiureable via
qpe.conf / Sound / AlarmPercent -- needs a GUI !)
-rw-r--r-- | library/sound.cpp | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/library/sound.cpp b/library/sound.cpp index 373fd4c..602fcf0 100644 --- a/library/sound.cpp +++ b/library/sound.cpp @@ -12,32 +12,39 @@ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qpe/resource.h> #include <qpe/sound.h> #include <qpe/qcopenvelope_qws.h> #include <qsound.h> #include <qfile.h> +#include <unistd.h> +#include <fcntl.h> +#include <sys/ioctl.h> +#include <sys/soundcard.h> + +#include "config.h" +#include <qmessagebox.h> #ifndef QT_NO_SOUND static int WAVsoundDuration(const QString& filename) { // bad solution // most of this is copied from qsoundqss.cpp QFile input(filename); if ( !input.open(IO_ReadOnly) ) return 0; struct QRiffChunk { char id[4]; Q_UINT32 size; char data[4/*size*/]; } chunk; @@ -86,88 +93,101 @@ static int WAVsoundDuration(const QString& filename) // ignored chunk if ( chunk.size < 10000000 ) (void)input.at(input.at()+chunk.size); } } //qDebug("%dms",total); return total; } class SoundData : public QSound { public: SoundData(const QString& name) : QSound(Resource::findSound(name)), filename(Resource::findSound(name)) { + loopsleft=0; } - void playLoop() + 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*) + void timerEvent ( QTimerEvent *e ) { + if (loopsleft >= 0) { + if (--loopsleft <= 0) + killTimer (e->timerId()); + return; + } play(); } + + bool isFinished ( ) const + { + return ( loopsleft == 0 ); + } private: QString filename; + int loopsleft; }; #endif Sound::Sound(const QString& name) { #ifndef QT_NO_SOUND d = new SoundData(name); #endif } Sound::~Sound() { #ifndef QT_NO_SOUND delete d; #endif } void Sound::play() { #ifndef QT_NO_SOUND d->killTimers(); - d->play(); + d->playLoop(1); #endif } void Sound::playLoop() { #ifndef QT_NO_SOUND d->killTimers(); d->playLoop(); #endif } void Sound::stop() { #ifndef QT_NO_SOUND d->killTimers(); #endif } +bool Sound::isFinished() const +{ +#ifndef QT_NO_SOUND + return d->isFinished(); +#endif +} void Sound::soundAlarm() { -#ifdef QT_QWS_CUSTOM -# ifndef QT_NO_COP +#ifndef QT_NO_COP QCopEnvelope( "QPE/TaskBar", "soundAlarm()" ); -# endif -#else -# ifndef QT_NO_SOUND - QSound::play(Resource::findSound("alarm")); -# endif #endif } |