summaryrefslogtreecommitdiffstats
path: root/src/multimedia/effects/qsoundeffect_qsound_p.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/effects/qsoundeffect_qsound_p.cpp')
-rw-r--r--src/multimedia/effects/qsoundeffect_qsound_p.cpp154
1 files changed, 30 insertions, 124 deletions
diff --git a/src/multimedia/effects/qsoundeffect_qsound_p.cpp b/src/multimedia/effects/qsoundeffect_qsound_p.cpp
index df160a9..ff30f67 100644
--- a/src/multimedia/effects/qsoundeffect_qsound_p.cpp
+++ b/src/multimedia/effects/qsoundeffect_qsound_p.cpp
@@ -50,102 +50,72 @@
// We mean it.
//
+#include "qsoundeffect_qsound_p.h"
+
#include <QtCore/qcoreapplication.h>
-#include <QtCore/qtimer.h>
-#include <QtCore/qfile.h>
#include <QtGui/qsound.h>
-#include <QtMultimedia/qaudioformat.h>
-#include <QDebug>
-#include "qmediacontent.h"
-#include "qmediaplayer.h"
-#include "qsoundeffect_p.h"
-
-#include "wavedecoder_p.h"
-
-#include "qsoundeffect_qsound_p.h"
QT_BEGIN_NAMESPACE
QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent):
QObject(parent),
- m_queued(false),
m_muted(false),
- m_state(QMediaPlayer::StoppedState),
- m_status(QMediaPlayer::NoMedia),
- m_file(0),
+ m_loopCount(1),
+ m_volume(100),
m_sound(0)
{
- m_timer = new QTimer(this);
- connect(m_timer,SIGNAL(timeout()),SLOT(checkPlayTime()));
- m_media = QMediaContent();
}
QSoundEffectPrivate::~QSoundEffectPrivate()
{
- if (m_sound) delete m_sound;
- if (m_waveDecoder) delete m_waveDecoder;
- m_file->close();
}
-qint64 QSoundEffectPrivate::duration() const
+QUrl QSoundEffectPrivate::source() const
{
- if (m_waveDecoder)
- return m_waveDecoder->size();
-
- return 0;
+ return m_source;
}
-int QSoundEffectPrivate::volume() const
+void QSoundEffectPrivate::setSource(const QUrl &url)
{
- return 100;
-}
+ if (url.isEmpty() || url.scheme() != QLatin1String("file")) {
+ m_source = QUrl();
+ return;
+ }
-bool QSoundEffectPrivate::isMuted() const
-{
- return m_muted;
-}
+ if (m_sound != 0)
+ delete m_sound;
-QMediaContent QSoundEffectPrivate::media() const
-{
- return m_media;
+ m_source = url;
+ m_sound = new QSound(m_source.toLocalFile(), this);
+ m_sound->setLoops(m_loopCount);
}
-QMediaPlayer::State QSoundEffectPrivate::state() const
+int QSoundEffectPrivate::loopCount() const
{
- return m_state;
+ return m_loopCount;
}
-QMediaPlayer::MediaStatus QSoundEffectPrivate::mediaStatus() const
+void QSoundEffectPrivate::setLoopCount(int lc)
{
- return m_status;
+ m_loopCount = lc;
+ if (m_sound)
+ m_sound->setLoops(lc);
}
-void QSoundEffectPrivate::play()
+int QSoundEffectPrivate::volume() const
{
- if (m_sound && !m_muted) {
- m_queued = false;
- m_timer->start(20);
- m_playbackTime.start();
- m_sound->play();
- emit stateChanged(m_state = QMediaPlayer::PlayingState);
- } else if (m_status == QMediaPlayer::LoadingMedia)
- m_queued = true;
+ return m_volume;
}
-void QSoundEffectPrivate::stop()
+void QSoundEffectPrivate::setVolume(int v)
{
- m_timer->stop();
-
- if (m_sound) {
- m_sound->stop();
- emit stateChanged(m_state = QMediaPlayer::StoppedState);
- }
+ m_volume = v;
}
-void QSoundEffectPrivate::setVolume(int volume)
+bool QSoundEffectPrivate::isMuted() const
{
- Q_UNUSED(volume)
+ return m_muted;
}
void QSoundEffectPrivate::setMuted(bool muted)
@@ -153,73 +123,9 @@ void QSoundEffectPrivate::setMuted(bool muted)
m_muted = muted;
}
-void QSoundEffectPrivate::setMedia(const QMediaContent &media)
-{
- m_queued = false;
-
- if (media.isNull() || media.canonicalUrl().scheme() != QLatin1String("file")) {
- m_media = QMediaContent();
- return;
- }
- if (m_media == media)
- return;
-
- m_media = media;
- m_file = new QFile(m_media.canonicalUrl().toLocalFile());
- m_file->open(QIODevice::ReadOnly|QIODevice::Unbuffered);
-
- unloadSample();
- loadSample();
-
- emit mediaChanged(m_media);
-}
-
-void QSoundEffectPrivate::decoderReady()
-{
- m_file->close();
- m_sound = new QSound(m_media.canonicalUrl().toLocalFile());
- emit mediaStatusChanged(m_status = QMediaPlayer::LoadedMedia);
-
- if (m_queued)
- play();
-}
-
-void QSoundEffectPrivate::decoderError()
-{
- m_file->close();
- emit mediaStatusChanged(m_status = QMediaPlayer::InvalidMedia);
-}
-
-void QSoundEffectPrivate::checkPlayTime()
-{
- if (m_sound->isFinished()) {
- m_timer->stop();
- m_state = QMediaPlayer::StoppedState;
- emit stateChanged(m_state);
- }
-}
-
-void QSoundEffectPrivate::loadSample()
-{
- m_waveDecoder = new WaveDecoder(m_file);
- connect(m_waveDecoder, SIGNAL(formatKnown()), SLOT(decoderReady()));
- connect(m_waveDecoder, SIGNAL(invalidFormat()), SLOT(decoderError()));
-
- m_status = QMediaPlayer::LoadingMedia;
- emit mediaStatusChanged(m_status);
-}
-
-void QSoundEffectPrivate::unloadSample()
+void QSoundEffectPrivate::play()
{
- if (m_sound == 0)
- return;
-
- m_status = QMediaPlayer::NoMedia;
-
- if (m_sound)
- delete m_sound;
-
- m_sound = 0;
+ m_sound->play();
}
QT_END_NAMESPACE