diff options
Diffstat (limited to 'general/AudioCache.cpp')
| -rw-r--r-- | general/AudioCache.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/general/AudioCache.cpp b/general/AudioCache.cpp new file mode 100644 index 00000000..7cc6de53 --- /dev/null +++ b/general/AudioCache.cpp @@ -0,0 +1,69 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: general/AudioCache.cpp +// Purpose: Cache for sound effects +// Author: Ben Boeckel +// Modified by: Ben Boeckel +// Created: Fri Jan 18 21:34:16 2008 +// Copyright: ©2007-2008 Ben Boeckel and Nerdy Productions +// Licence: +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program. If not, see <http://www.gnu.org/licenses/>. +///////////////////////////////////////////////////////////////////////////// + +#include "AudioCache.h" + +QCache<QString, Phonon::MediaObject> AudioCache::cache(100); +Phonon::AudioOutput AudioCache::output(Phonon::MusicCategory); +bool AudioCache::started = false; + +void AudioCache::playSFX(const QString& url, const bool force) throw(OpenException) +{ + if (force) + cache.remove(url); + if (!cache.contains(url)) + { + Phonon::MediaObject* sfx = new Phonon::MediaObject(); + sfx->setCurrentSource(url); + if (sfx->state() == Phonon::ErrorState) + throw(OpenException("AudioCache", url)); + cache.insert(url, sfx, 1); + } + Phonon::MediaObject* sfx = cache.object(url); + sfx = *(); + sfx.play(); + curPlay.append(sfx); + curPlay[curPlay.size() - 1].play(); +} + +void AudioCache::playMusic(const QString& url) +{ + if (!started) + start(); + musicUrl = url; + if (music.state() == Phonon::PlayingState) + music.seek(music.totalTime - 1000); + else + { + music.setCurrentSource(url); + music.play(); + } +} + +void AudioCache::prune() +{ + for (QMutableListIterator<Phonon::MediaObject> i(curPlay); i.hasNext(); i.next()) + { + if (i.value().state() == Phonon::StoppedState) + i.remove(); + } +} |
