00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024
00025 #ifndef SFML_SOUNDBUFFER_HPP
00026 #define SFML_SOUNDBUFFER_HPP
00027
00029
00031 #include <SFML/Config.hpp>
00032 #include <SFML/System/Resource.hpp>
00033 #include <string>
00034 #include <vector>
00035 #include <set>
00036
00037
00038 namespace sf
00039 {
00040 namespace priv
00041 {
00042 class SoundFile;
00043 }
00044
00045 class Sound;
00046 class InputStream;
00047
00052 class SFML_API SoundBuffer : public Resource<SoundBuffer>
00053 {
00054 public :
00055
00060 SoundBuffer();
00061
00068 SoundBuffer(const SoundBuffer& copy);
00069
00074 ~SoundBuffer();
00075
00090 bool LoadFromFile(const std::string& filename);
00091
00107 bool LoadFromMemory(const void* data, std::size_t sizeInBytes);
00108
00123 bool LoadFromStream(InputStream& stream);
00124
00141 bool LoadFromSamples(const Int16* samples, std::size_t samplesCount, unsigned int channelsCount, unsigned int sampleRate);
00142
00157 bool SaveToFile(const std::string& filename) const;
00158
00171 const Int16* GetSamples() const;
00172
00184 std::size_t GetSamplesCount() const;
00185
00198 unsigned int GetSampleRate() const;
00199
00211 unsigned int GetChannelsCount() const;
00212
00221 Uint32 GetDuration() const;
00222
00231 SoundBuffer& operator =(const SoundBuffer& right);
00232
00233 private :
00234
00235 friend class Sound;
00236
00245 bool Initialize(priv::SoundFile& file);
00246
00256 bool Update(unsigned int channelsCount, unsigned int sampleRate);
00257
00264 void AttachSound(Sound* sound) const;
00265
00272 void DetachSound(Sound* sound) const;
00273
00275
00277 typedef std::set<Sound*> SoundList;
00278
00280
00282 unsigned int myBuffer;
00283 std::vector<Int16> mySamples;
00284 Uint32 myDuration;
00285 mutable SoundList mySounds;
00286 };
00287
00288 }
00289
00290
00291 #endif // SFML_SOUNDBUFFER_HPP
00292
00293