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
00042 class SFML_API sfSoundStream : private sfThread, private sfSound
00043 {
00044 public :
00045
00046 using sfSound::Status;
00047 using sfSound::Stopped;
00048 using sfSound::Paused;
00049 using sfSound::Playing;
00050 using sfSound::Pause;
00051 using sfSound::SetPitch;
00052 using sfSound::SetVolume;
00053 using sfSound::SetPosition;
00054 using sfSound::GetPitch;
00055 using sfSound::GetVolume;
00056 using sfSound::GetPosition;
00057
00061 struct Chunk
00062 {
00063 const sfInt16* Samples;
00064 std::size_t NbSamples;
00065 };
00066
00071 virtual ~sfSoundStream();
00072
00077 void Play();
00078
00083 void Stop();
00084
00091 unsigned int GetChannelsCount() const;
00092
00099 unsigned int GetSampleRate() const;
00100
00107 Status GetStatus() const;
00108
00109 protected :
00110
00115 sfSoundStream();
00116
00124 void Initialize(unsigned int ChannelsCount, unsigned int SampleRate);
00125
00126 private :
00127
00132 virtual void Run();
00133
00140 virtual bool OnStart();
00141
00150 virtual bool OnGetData(Chunk& Data) = 0;
00151
00156 void CleanUp();
00157
00158 enum {BuffersCount = 2};
00159
00161
00163 bool myIsStreaming;
00164 unsigned int myBuffers[BuffersCount];
00165 unsigned int myChannelsCount;
00166 unsigned int mySampleRate;
00167 unsigned long myFormat;
00168 };
00169
00170
00171 #endif // SFML_SOUNDSTREAM_HPP