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::GetPitch;
00057 using Sound::GetVolume;
00058 using Sound::GetPosition;
00059
00063 struct Chunk
00064 {
00065 const Int16* Samples;
00066 std::size_t NbSamples;
00067 };
00068
00073 virtual ~SoundStream();
00074
00079 void Play();
00080
00085 void Stop();
00086
00093 unsigned int GetChannelsCount() const;
00094
00101 unsigned int GetSampleRate() const;
00102
00109 Status GetStatus() const;
00110
00111 protected :
00112
00117 SoundStream();
00118
00126 void Initialize(unsigned int ChannelsCount, unsigned int SampleRate);
00127
00128 private :
00129
00134 virtual void Run();
00135
00142 virtual bool OnStart();
00143
00152 virtual bool OnGetData(Chunk& Data) = 0;
00153
00158 void CleanUp();
00159
00160 enum {BuffersCount = 2};
00161
00163
00165 bool myIsStreaming;
00166 unsigned int myBuffers[BuffersCount];
00167 unsigned int myChannelsCount;
00168 unsigned int mySampleRate;
00169 unsigned long myFormat;
00170 };
00171
00172 }
00173
00174
00175 #endif // SFML_SOUNDSTREAM_HPP