00001
00002
00003
00004
00005
00006
00007 #ifndef GOSU_AUDIO_HPP
00008 #define GOSU_AUDIO_HPP
00009
00010 #ifdef WIN32
00011 #include <windows.h>
00012 #endif
00013 #include <Gosu/Fwd.hpp>
00014 #include <Gosu/Platform.hpp>
00015 #include <boost/scoped_ptr.hpp>
00016 #include <boost/utility.hpp>
00017 #include <string>
00018
00019 namespace Gosu
00020 {
00025 class Audio : boost::noncopyable
00026 {
00027 public:
00028 #ifdef GOSU_IS_WIN
00029 explicit Audio(HWND window);
00030 #else
00031 Audio();
00032 #endif
00033 ~Audio();
00034 };
00035
00040 class SampleInstance
00041 {
00042 int handle, extra;
00043
00044 public:
00046 SampleInstance(int handle, int extra);
00047
00048 bool playing() const;
00049 void stop();
00050
00053 void changeVolume(double volume);
00055 void changePan(double pan);
00059 void changeSpeed(double speed);
00060 };
00061
00065 class Sample
00066 {
00067 struct SampleData;
00068 boost::scoped_ptr<SampleData> data;
00069
00070 public:
00073 Sample(Audio& audio, const std::wstring& filename);
00074
00077 Sample(Audio& audio, Reader reader);
00078
00079 ~Sample();
00080
00087 SampleInstance play(double volume = 1, double speed = 1) const;
00088
00098 SampleInstance playPan(double pan, double volume = 1, double speed = 1) const;
00099 };
00100
00103 class Song
00104 {
00105 class BaseData;
00106 class ModuleData;
00107 class StreamData;
00108 boost::scoped_ptr<BaseData> data;
00109
00110 public:
00113 enum Type
00114 {
00115 stStream,
00116 stModule
00117 };
00118
00122 Song(Audio&, const std::wstring& filename);
00123
00126 Song(Audio&, Type type, Reader reader);
00127
00128 ~Song();
00129
00133 void play();
00135 void stop();
00137 bool playing() const;
00139 double volume() const;
00141 void changeVolume(double volume);
00142 };
00143 }
00144
00145 #endif