X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Faudio%2Fsound_manager.hpp;h=102b0a89c2b53215550a6fce43d47ebf11562cfe;hb=589f20b4fb9f3b0698ab70a748ea3b8fb129e39d;hp=12f19447cbf4e34a1bba75d87ab98483cf51f00c;hpb=979050bfb71550421272b98a608b64beba388271;p=supertux.git diff --git a/src/audio/sound_manager.hpp b/src/audio/sound_manager.hpp index 12f19447c..102b0a89c 100644 --- a/src/audio/sound_manager.hpp +++ b/src/audio/sound_manager.hpp @@ -1,12 +1,10 @@ -// $Id$ -// // SuperTux // Copyright (C) 2006 Matthias Braun // -// 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 2 -// of the License, or (at your option) any later version. +// 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 @@ -14,31 +12,28 @@ // 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, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -#ifndef __SOUND_MANAGER_H__ -#define __SOUND_MANAGER_H__ +// along with this program. If not, see . + +#ifndef HEADER_SUPERTUX_AUDIO_SOUND_MANAGER_HPP +#define HEADER_SUPERTUX_AUDIO_SOUND_MANAGER_HPP +#include +#include #include #include -#include -#ifndef MACOSX -#include -#include -#else -#include -#include -#endif +#include +#include #include "math/vector.hpp" +#include "util/currenton.hpp" class SoundFile; class SoundSource; class StreamSoundSource; class OpenALSoundSource; -class SoundManager +class SoundManager : public Currenton { public: SoundManager(); @@ -51,7 +46,7 @@ public: * sound). * This function never throws exceptions, but might return a DummySoundSource */ - SoundSource* create_sound_source(const std::string& filename); + std::unique_ptr create_sound_source(const std::string& filename); /** * Convenience function to simply play a sound at a given position. */ @@ -60,7 +55,7 @@ public: * Adds the source to the list of managed sources (= the source gets deleted * when it finished playing) */ - void manage_source(SoundSource* source); + void manage_source(std::unique_ptr source); /// preloads a sound, so that you don't get a lag later when playing it void preload(const std::string& name); @@ -69,15 +64,19 @@ public: void enable_music(bool music_enabled); void play_music(const std::string& filename, bool fade = false); + void pause_music(float fadetime = 0); + void resume_music(float fadetime = 0); void stop_music(float fadetime = 0); bool is_music_enabled() { return music_enabled; } bool is_sound_enabled() { return sound_enabled; } bool is_audio_enabled() { - return device != 0 && context != 0; + return device != 0 && context != 0; + } + std::string get_current_music() const { + return current_music; } - void update(); /* @@ -94,9 +93,9 @@ private: friend class StreamSoundSource; /** creates a new sound source, might throw exceptions, never returns NULL */ - OpenALSoundSource* intern_create_sound_source(const std::string& filename); - static ALuint load_file_into_buffer(SoundFile* file); - static ALenum get_sample_format(SoundFile* file); + std::unique_ptr intern_create_sound_source(const std::string& filename); + static ALuint load_file_into_buffer(SoundFile& file); + static ALenum get_sample_format(const SoundFile& file); void print_openal_version(); void check_alc_error(const char* message); @@ -108,18 +107,22 @@ private: typedef std::map SoundBuffers; SoundBuffers buffers; - typedef std::vector SoundSources; + typedef std::vector > SoundSources; SoundSources sources; typedef std::vector StreamSoundSources; StreamSoundSources update_list; - StreamSoundSource* music_source; + std::unique_ptr music_source; bool music_enabled; std::string current_music; -}; -extern SoundManager* sound_manager; +private: + SoundManager(const SoundManager&); + SoundManager& operator=(const SoundManager&); +}; #endif + +/* EOF */