X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FSound.hh;h=14cd79041ac10cbdc2e0b53d4f295b5090bc26b6;hp=bc669bcd5df6dcf629ab26a97b564b23e6151b3a;hb=a295f8def17036c8071b56e181364f99a377cae7;hpb=5fa5f117f28922a7e539a432367960c1a61f837d diff --git a/src/Moof/Sound.hh b/src/Moof/Sound.hh index bc669bc..14cd790 100644 --- a/src/Moof/Sound.hh +++ b/src/Moof/Sound.hh @@ -31,14 +31,11 @@ /** * @file Sound.hh - * Image-loading and OpenGL texture loading. + * Load and play sounds, current supports ogg vorbis. */ -#include - #include -#include #include #include @@ -46,60 +43,73 @@ namespace Mf { +class Sound; +typedef boost::shared_ptr SoundP; + +class SoundStream; +typedef boost::shared_ptr SoundStreamP; + + class Sound : public Resource { public: - Sound(const std::string& name); - void play(); + static SoundP alloc(const std::string& name) + { + return SoundP(new Sound(name)); + } + + Sound(); + explicit Sound(const std::string& name); + + virtual ~Sound() {} + + // this implicitly stops the sound if it is playing + void setSample(const std::string& name); + + virtual void play(); + void stop(); void pause(); - void togglePlayPause(); + void toggle(); + bool isPlaying() const; + + void setPosition(const Vector3& position); + void setVelocity(const Vector3& velocity); void setGain(Scalar gain); + void setPitch(Scalar pitch); + void setLooping(bool looping); - static std::string getPath(const std::string& name); + static void setListenerPosition(const Vector3& position); + static void setListenerVelocity(const Vector3& velocity); + static void setListenerOrientation(const Vector3& forward, + const Vector3& up); - struct Exception : public Mf::Exception - { - enum - { - BAD_AUDIO_FORMAT = 1024 - }; - - explicit Exception(unsigned error) : - Mf::Exception(error) {} - - void raise() - { - throw *this; - } - - const char* what() const throw() - { - switch (code) - { - case BAD_AUDIO_FORMAT: - return "unknown audio format"; - } - return Mf::Exception::what(); - } - }; + static std::string getPath(const std::string& name); protected: - Sound() {} + class Impl; - boost::shared_ptr impl_; + boost::shared_ptr mImpl; }; class SoundStream : public Sound { public: - SoundStream(const std::string& name); - void update(Scalar t, Scalar dt); + static SoundStreamP alloc(const std::string& name) + { + return SoundStreamP(new SoundStream(name)); + } - static std::string getPath(const std::string& name); + SoundStream(); + explicit SoundStream(const std::string& name) : + Sound(name) {} + + void enqueue(const std::string& name); + + void play(); };