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/SoundImpl.hpp>
00032 #include <SFML/Audio/SoundBufferImpl.hpp>
00033 #include <SFML/System/Thread.hpp>
00034 #include <SFML/Utilities/SharedPtr.hpp>
00035
00036
00043 class SFML_API sfSoundStream : private sfThread
00044 {
00045 public :
00046
00050 struct Chunk
00051 {
00052 const sfInt16* Samples;
00053 std::size_t NbSamples;
00054 };
00055
00060 virtual ~sfSoundStream();
00061
00066 void Play();
00067
00072 void Pause();
00073
00078 void Stop();
00079
00086 unsigned int GetFrequency() const;
00087
00094 unsigned int GetChannelsCount() const;
00095
00102 void SetPitch(float Pitch);
00103
00110 void SetVolume(float Volume);
00111
00120 void SetPosition(float X, float Y, float Z);
00121
00128 float GetPitch() const;
00129
00136 float GetVolume() const;
00137
00146 void GetPosition(float& X, float& Y, float& Z) const;
00147
00154 sfSoundStatus GetStatus() const;
00155
00156 protected :
00157
00162 sfSoundStream();
00163
00171 void Initialize(unsigned int ChannelsCount, unsigned int Frequency);
00172
00173 private :
00174
00179 virtual void Run();
00180
00187 virtual bool OnStart();
00188
00197 virtual bool OnGetData(Chunk& Data) = 0;
00198
00203 void CleanUp();
00204
00205 enum {BuffersCount = 2};
00206
00208
00210 bool myIsStreaming;
00211 sfSharedPtr<sf_private::sfSoundImpl> mySource;
00212 sfSharedPtr<sf_private::sfSoundBufferImpl> myBuffers[BuffersCount];
00213 unsigned int myChannelsCount;
00214 unsigned int myFrequency;
00215 };
00216
00217
00218 #endif // SFML_SOUNDSTREAM_HPP