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_SOUNDSTREAM_HPP
00026 #define SFML_SOUNDSTREAM_HPP
00027
00029
00031 #include <SFML/Audio/Sound.hpp>
00032 #include <SFML/System/Thread.hpp>
00033 #include <cstdlib>
00034
00035
00036 namespace sf
00037 {
00044 class SFML_API SoundStream : private Thread, private Sound
00045 {
00046 public :
00047
00048 using Sound::Status;
00049 using Sound::Stopped;
00050 using Sound::Paused;
00051 using Sound::Playing;
00052 using Sound::Pause;
00053 using Sound::SetPitch;
00054 using Sound::SetVolume;
00055 using Sound::SetPosition;
00056 using Sound::SetMinDistance;
00057 using Sound::SetAttenuation;
00058 using Sound::GetPitch;
00059 using Sound::GetVolume;
00060 using Sound::GetPosition;
00061 using Sound::GetMinDistance;
00062 using Sound::GetAttenuation;
00063
00067 struct Chunk
00068 {
00069 const Int16* Samples;
00070 std::size_t NbSamples;
00071 };
00072
00077 virtual ~SoundStream();
00078
00083 void Play();
00084
00089 void Stop();
00090
00097 unsigned int GetChannelsCount() const;
00098
00105 unsigned int GetSampleRate() const;
00106
00113 Status GetStatus() const;
00114
00121 float GetPlayingOffset() const;
00122
00130 void SetLoop(bool Loop);
00131
00138 bool GetLoop() const;
00139
00140 protected :
00141
00146 SoundStream();
00147
00155 void Initialize(unsigned int ChannelsCount, unsigned int SampleRate);
00156
00157 private :
00158
00163 virtual void Run();
00164
00171 virtual bool OnStart();
00172
00181 virtual bool OnGetData(Chunk& Data) = 0;
00182
00192 bool FillAndPushBuffer(unsigned int Buffer);
00193
00200 bool FillQueue();
00201
00206 void ClearQueue();
00207
00208 enum {BuffersCount = 3};
00209
00211
00213 bool myIsStreaming;
00214 unsigned int myBuffers[BuffersCount];
00215 unsigned int myChannelsCount;
00216 unsigned int mySampleRate;
00217 unsigned long myFormat;
00218 bool myLoop;
00219 unsigned int mySamplesProcessed;
00220 };
00221
00222 }
00223
00224
00225 #endif // SFML_SOUNDSTREAM_HPP