/*] Copyright (c) 2009-2010, Charles McGarvey [************************** **] All rights reserved. * * vi:ts=4 sw=4 tw=75 * * Distributable under the terms and conditions of the 2-clause BSD license; * see the file COPYING for a complete text of the license. * **************************************************************************/ #ifndef _MOOF_SOUND_HH_ #define _MOOF_SOUND_HH_ /** * \file sound.hh * Load and play sounds, current supports ogg vorbis. */ #include #include #include #include namespace moof { class sound; typedef boost::shared_ptr sound_ptr; class sound_stream; typedef boost::shared_ptr sound_stream_ptr; class sound : public resource { public: static sound_ptr alloc(const std::string& name) { return sound_ptr(new sound(name)); } sound(); explicit sound(const std::string& name); virtual ~sound() {} // this implicitly stops the sound if it is playing void sample(const std::string& name); virtual void play(); void stop(); void pause(); void toggle(); bool is_playing() const; void position(const vector3& position); void velocity(const vector3& velocity); void gain(scalar gain); void pitch(scalar pitch); void loop(bool looping); static void listener_position(const vector3& position); static void listener_velocity(const vector3& velocity); static void listener_orientation(const vector3& forward, const vector3& up); static bool find_path(std::string& name); protected: class impl; boost::shared_ptr impl_; }; class sound_stream : public sound { public: static sound_stream_ptr alloc(const std::string& name) { return sound_stream_ptr(new sound_stream(name)); } sound_stream(); explicit sound_stream(const std::string& name) : sound(name) {} void enqueue(const std::string& name); void play(); }; } // namespace moof #endif // _MOOF_SOUND_HH_