X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FSound.hh;h=4f655822100b5bdbb394c5ab101909127061b2b6;hp=cca7dc7e637fd2b9cd61fe3ecac024db9d03a9e6;hb=25aefe01ef7dbdb603c51411e04b0d6a6107684f;hpb=bfa6212d09d8735d8fd5e2638188e4a99f21ada4 diff --git a/src/Moof/Sound.hh b/src/Moof/Sound.hh index cca7dc7..4f65582 100644 --- a/src/Moof/Sound.hh +++ b/src/Moof/Sound.hh @@ -34,10 +34,9 @@ * Image-loading and OpenGL texture loading. */ -#include - #include +#include #include #include @@ -45,36 +44,74 @@ namespace Mf { +class Sound; +typedef boost::shared_ptr SoundP; + + class Sound : public Resource { -public: - Sound(const std::string& name); - - void play(); + class Impl; + boost::shared_ptr impl_; - static std::string getPath(const std::string& name); +public: - struct Exception : std::runtime_error + static SoundP alloc(const std::string& name) { - explicit Exception(const std::string& what_arg) : - std::runtime_error(what_arg) {} - }; + return SoundP(new Sound(name)); + } -protected: - Sound() {} - class Impl; - boost::shared_ptr impl_; -}; + explicit Sound(const std::string& name); -class SoundStream : public Sound -{ -public: - SoundStream(const std::string& name); + void play(); + void stream(); void update(Scalar t, Scalar dt); + void stop(); + void pause(); + void resume(); + void toggle(); + + void setSample(const std::string& name); + void enqueue(const std::string& name); + + bool isPlaying() const; + + void setPosition(Vector3 position); + void setVelocity(Vector3 velocity); + void setGain(Scalar gain); + void setPitch(Scalar pitch); + void setLooping(bool looping); + static std::string getPath(const std::string& name); + + + 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(); + } + }; };