X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FSound.hh;h=3f64162f0ca4b2a690f3b7be7005095ee00a3f7c;hp=23979db4aa019423573fbb8e73a59f5a49a6cc89;hb=fdfba4553433b9b2804c2772c7645211b828c2ea;hpb=4701bf580b75a7d77a460c6f14f9fc31fb109bbb diff --git a/src/Moof/Sound.hh b/src/Moof/Sound.hh index 23979db..3f64162 100644 --- a/src/Moof/Sound.hh +++ b/src/Moof/Sound.hh @@ -38,6 +38,7 @@ #include +#include #include #include @@ -45,9 +46,24 @@ namespace Mf { +class Sound; +typedef boost::shared_ptr SoundP; + + class Sound : public Resource { +protected: + Sound() {} + class Impl; + boost::shared_ptr impl_; + public: + + static SoundP alloc(const std::string& name) + { + return SoundP(new Sound(name)); + } + Sound(const std::string& name); void play(); @@ -58,16 +74,32 @@ public: static std::string getPath(const std::string& name); - struct Exception : std::runtime_error + + struct Exception : public Mf::Exception { - explicit Exception(const std::string& what_arg) : - std::runtime_error(what_arg) {} + 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(); + } }; - -protected: - Sound() {} - class Impl; - boost::shared_ptr impl_; };