X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FSound.hh;h=6e5f78a23fc4311e736000aecd922f534a003a3a;hp=26c2b424f94321e7e007bde9ecf854a45ef4d614;hb=7e84479de612a4ce287c6f63deb014b447a993ec;hpb=33842c860fe18ca8cf087905992885687434320c diff --git a/src/Moof/Sound.hh b/src/Moof/Sound.hh index 26c2b42..6e5f78a 100644 --- a/src/Moof/Sound.hh +++ b/src/Moof/Sound.hh @@ -47,12 +47,12 @@ namespace Mf { class Sound; typedef boost::shared_ptr SoundP; +class SoundStream; +typedef boost::shared_ptr SoundStreamP; + class Sound : public Resource { - class Impl; - boost::shared_ptr impl_; - public: static SoundP alloc(const std::string& name) @@ -60,56 +60,57 @@ public: return SoundP(new Sound(name)); } + Sound(); explicit Sound(const std::string& name); + virtual ~Sound() {} - void play(); - void stream(); + // this implicitly stops the sound if it is playing + void setSample(const std::string& name); + virtual void play(); void stop(); void pause(); - void resume(); - void toggle(); - - void setSample(const std::string& name); - void enqueue(const std::string& name); + void toggle(); bool isPlaying() const; - void setPosition(Vector3 position); - void setVelocity(Vector3 velocity); + void setPosition(const Vector3& position); + void setVelocity(const Vector3& velocity); void setGain(Scalar gain); void setPitch(Scalar pitch); void setLooping(bool looping); + static void setListenerPosition(const Vector3& position); + static void setListenerVelocity(const Vector3& velocity); + static void setListenerOrientation(const Vector3& forward, + const Vector3& up); + static std::string getPath(const std::string& name); +protected: + + class Impl; + boost::shared_ptr mImpl; +}; + + +class SoundStream : public Sound +{ +public: - struct Exception : public Mf::Exception + static SoundStreamP alloc(const std::string& name) { - 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(); - } - }; + return SoundStreamP(new SoundStream(name)); + } + + SoundStream(); + explicit SoundStream(const std::string& name) : + Sound(name) {} + + void enqueue(const std::string& name); + + void play(); };