From b18385a95f25e13c767244b494f31bd4fc238143 Mon Sep 17 00:00:00 2001 From: manuel Date: Thu, 14 Apr 2011 02:37:31 +0200 Subject: encapsulate gapless audioplayer commit from yesterday into an own class (gaplessaudioplayer) added two new menu entrys: toggle sound + toggle ambient sound (2. very useful!) --- pacman-c++/audio.cpp | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) (limited to 'pacman-c++/audio.cpp') diff --git a/pacman-c++/audio.cpp b/pacman-c++/audio.cpp index 6365a15..c0cc5b0 100644 --- a/pacman-c++/audio.cpp +++ b/pacman-c++/audio.cpp @@ -155,9 +155,9 @@ QFile *AudioManager::sound(Sound::Type sound) AudioPlayer::AudioPlayer(QObject *parent) : Phonon::MediaObject(parent) { + m_working = AudioManager::m_working; m_output = new Phonon::AudioOutput(Phonon::MusicCategory, this); Phonon::createPath(this, m_output); - m_working = AudioManager::m_working; } bool AudioPlayer::isWorking() const @@ -255,6 +255,72 @@ void AudioPlayer::loopEnqueue() /* --------------------------------------------------------------- */ +GaplessAudioPlayer::GaplessAudioPlayer(Sound::Type sound, qint32 mark, QObject *parent) + : QObject(parent), m_sound(sound) +{ + m_working = AudioManager::m_working; + if (!m_working) + return; + + m_player1 = new AudioPlayer(this); + m_player2 = new AudioPlayer(this); + + m_player2->setPrefinishMark(mark); + m_player1->setPrefinishMark(mark); + + connect(m_player1, SIGNAL(prefinishMarkReached(qint32)), this, SLOT(startPlayer2())); + connect(m_player2, SIGNAL(prefinishMarkReached(qint32)), this, SLOT(startPlayer1())); + + AudioManager::self()->registerAudioPlayer(m_player1); + AudioManager::self()->registerAudioPlayer(m_player2); +} + +bool GaplessAudioPlayer::isWorking() const +{ + return m_working; +} + +void GaplessAudioPlayer::setMuted(bool mute) +{ + m_player1->setMuted(mute); + m_player2->setMuted(mute); +} + +bool GaplessAudioPlayer::isMuted() const +{ + return m_player1->isMuted() && m_player2->isMuted(); +} + +void GaplessAudioPlayer::play() +{ + if (!m_working) + return; + if (m_player1->state() != Phonon::PlayingState && m_player2->state() != Phonon::PlayingState) + startPlayer1(); +} + +void GaplessAudioPlayer::pause() +{ + if (!m_working) + return; + if (m_player1->state() != Phonon::PausedState) + m_player1->pause(); + if (m_player2->state() != Phonon::PausedState) + m_player2->pause(); +} + +void GaplessAudioPlayer::startPlayer1() +{ + m_player1->play(m_sound); +} + +void GaplessAudioPlayer::startPlayer2() +{ + m_player2->play(m_sound); +} + +/* --------------------------------------------------------------- */ + void AudioPlayer::Sleeper::sleep(unsigned long secs) { QThread::sleep(secs); -- cgit v1.2.3