X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Faudio%2Fsound_manager.hpp;h=12f19447cbf4e34a1bba75d87ab98483cf51f00c;hb=6b0c80bde84af0bf9323320d99f2fccd7c9eeedd;hp=b2c5cc955707f0da3e49d990cfd9b4ee750a0589;hpb=07ddaed2a657e4d2a3d038fed223fc5827159caf;p=supertux.git diff --git a/src/audio/sound_manager.hpp b/src/audio/sound_manager.hpp index b2c5cc955..12f19447c 100644 --- a/src/audio/sound_manager.hpp +++ b/src/audio/sound_manager.hpp @@ -16,7 +16,6 @@ // 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__ @@ -24,15 +23,20 @@ #include #include +#ifndef MACOSX #include #include -#include "math/vector.hpp" +#else +#include +#include +#endif -typedef void* SoundHandle; +#include "math/vector.hpp" class SoundFile; class SoundSource; class StreamSoundSource; +class OpenALSoundSource; class SoundManager { @@ -45,14 +49,20 @@ public: * Creates a new sound source object which plays the specified soundfile. * You are responsible for deleting the sound source later (this will stop the * sound). - * This function might throw exceptions. It returns 0 if no audio device is - * available. + * This function never throws exceptions, but might return a DummySoundSource */ SoundSource* create_sound_source(const std::string& filename); /** * Convenience function to simply play a sound at a given position. */ void play(const std::string& name, const Vector& pos = Vector(-1, -1)); + /** + * Adds the source to the list of managed sources (= the source gets deleted + * when it finished playing) + */ + void manage_source(SoundSource* source); + /// preloads a sound, so that you don't get a lag later when playing it + void preload(const std::string& name); void set_listener_position(const Vector& position); void set_listener_velocity(const Vector& velocity); @@ -60,15 +70,31 @@ public: void enable_music(bool music_enabled); void play_music(const std::string& filename, bool fade = false); 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; + } + void update(); + /* + * Tell soundmanager to call update() for stream_sound_source. + */ + void register_for_update( StreamSoundSource* sss ); + /* + * Unsubscribe from updates for stream_sound_source. + */ + void remove_from_update( StreamSoundSource* sss ); + private: - friend class SoundSource; + friend class OpenALSoundSource; 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); @@ -82,9 +108,12 @@ 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; bool music_enabled; @@ -94,4 +123,3 @@ private: extern SoundManager* sound_manager; #endif -