00001 00002 // 00003 // SFML - Simple and Fast Multimedia Library 00004 // Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) 00005 // 00006 // This software is provided 'as-is', without any express or implied warranty. 00007 // In no event will the authors be held liable for any damages arising from the use of this software. 00008 // 00009 // Permission is granted to anyone to use this software for any purpose, 00010 // including commercial applications, and to alter it and redistribute it freely, 00011 // subject to the following restrictions: 00012 // 00013 // 1. The origin of this software must not be misrepresented; 00014 // you must not claim that you wrote the original software. 00015 // If you use this software in a product, an acknowledgment 00016 // in the product documentation would be appreciated but is not required. 00017 // 00018 // 2. Altered source versions must be plainly marked as such, 00019 // and must not be misrepresented as being the original software. 00020 // 00021 // 3. This notice may not be removed or altered from any source distribution. 00022 // 00024 00025 #ifndef SFML_SOUNDSTREAM_HPP 00026 #define SFML_SOUNDSTREAM_HPP 00027 00029 // Headers 00031 #include <SFML/Audio/SoundSource.hpp> 00032 #include <SFML/System/Thread.hpp> 00033 #include <cstdlib> 00034 00035 00036 namespace sf 00037 { 00042 class SFML_API SoundStream : public SoundSource 00043 { 00044 public : 00045 00050 struct Chunk 00051 { 00052 const Int16* Samples; 00053 std::size_t NbSamples; 00054 }; 00055 00060 virtual ~SoundStream(); 00061 00074 void Play(); 00075 00085 void Pause(); 00086 00097 void Stop(); 00098 00107 unsigned int GetChannelsCount() const; 00108 00118 unsigned int GetSampleRate() const; 00119 00126 Status GetStatus() const; 00127 00139 void SetPlayingOffset(Uint32 timeOffset); 00140 00149 Uint32 GetPlayingOffset() const; 00150 00164 void SetLoop(bool loop); 00165 00174 bool GetLoop() const; 00175 00176 protected : 00177 00184 SoundStream(); 00185 00200 void Initialize(unsigned int channelsCount, unsigned int sampleRate); 00201 00202 private : 00203 00211 void Stream(); 00212 00227 virtual bool OnGetData(Chunk& data) = 0; 00228 00238 virtual void OnSeek(Uint32 timeOffset) = 0; 00239 00253 bool FillAndPushBuffer(unsigned int bufferNum); 00254 00264 bool FillQueue(); 00265 00272 void ClearQueue(); 00273 00274 enum 00275 { 00276 BuffersCount = 3 00277 }; 00278 00280 // Member data 00282 Thread myThread; 00283 bool myIsStreaming; 00284 unsigned int myBuffers[BuffersCount]; 00285 unsigned int myChannelsCount; 00286 unsigned int mySampleRate; 00287 unsigned long myFormat; 00288 bool myLoop; 00289 Uint64 mySamplesProcessed; 00290 bool myEndBuffers[BuffersCount]; 00291 }; 00292 00293 } // namespace sf 00294 00295 00296 #endif // SFML_SOUNDSTREAM_HPP 00297 00298
:: Copyright © 2007-2008 Laurent Gomila, all rights reserved :: Documentation generated by doxygen 1.5.2 ::