* Image-loading and OpenGL texture loading.
*/
-#include <stdexcept>
-
#include <boost/shared_ptr.hpp>
+#include <Moof/Exception.hh>
#include <Moof/Math.hh>
#include <Moof/Resource.hh>
namespace Mf {
+class Sound;
+typedef boost::shared_ptr<Sound> SoundP;
+
+
class Sound : public Resource
{
+ class Impl;
+ boost::shared_ptr<Impl> impl_;
+
public:
- Sound(const std::string& name);
- void play();
- void pause();
- void togglePlayPause();
+ inline static SoundP alloc(const std::string& name)
+ {
+ return SoundP(new Sound(name));
+ }
- void setGain(Scalar gain);
+ explicit Sound(const std::string& name);
- static std::string getPath(const std::string& name);
- struct Exception : std::runtime_error
- {
- explicit Exception(const std::string& what_arg) :
- std::runtime_error(what_arg) {}
- };
+ void play();
-protected:
- Sound() {}
- class Impl;
- boost::shared_ptr<Impl> impl_;
-};
+ void stream();
+ void update(Scalar t, Scalar dt);
+ void stop();
+ void pause();
+ void resume();
+ void toggle();
-class SoundStream : public Sound
-{
-public:
- SoundStream(const std::string& name);
+ void setSample(const std::string& name);
+ void enqueue(const std::string& name);
- void update(Scalar t, Scalar dt);
+ 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();
+ }
+ };
};