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
00115 protected :
00116
00121 SoundStream();
00122
00130 void Initialize(unsigned int ChannelsCount, unsigned int SampleRate);
00131
00132 private :
00133
00138 virtual void Run();
00139
00146 virtual bool OnStart();
00147
00156 virtual bool OnGetData(Chunk& Data) = 0;
00157
00162 void CleanUp();
00163
00164 enum {BuffersCount = 3};
00165
00167
00169 bool myIsStreaming;
00170 unsigned int myBuffers[BuffersCount];
00171 unsigned int myChannelsCount;
00172 unsigned int mySampleRate;
00173 unsigned long myFormat;
00174 };
00175
00176 }
00177
00178
00179 #endif // SFML_SOUNDSTREAM_HPP