summaryrefslogtreecommitdiff
path: root/library/sound.cpp
authorsandman <sandman>2002-06-09 23:37:26 (UTC)
committer sandman <sandman>2002-06-09 23:37:26 (UTC)
commit65b1a790493272a38b0ac44e219d5186168fabac (patch) (side-by-side diff)
treeb26ebca8644af8e7af68690f13c45cebfd747e49 /library/sound.cpp
parentbb2f23307a6797c4b338b4504de39fdde3678893 (diff)
downloadopie-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 !)
Diffstat (limited to 'library/sound.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/sound.cpp40
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
}