Loading...
Searching...
No Matches
SoundStream.hpp
Go to the documentation of this file.
1
2//
3// SFML - Simple and Fast Multimedia Library
4// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
5//
6// This software is provided 'as-is', without any express or implied warranty.
7// In no event will the authors be held liable for any damages arising from the use of this software.
8//
9// Permission is granted to anyone to use this software for any purpose,
10// including commercial applications, and to alter it and redistribute it freely,
11// subject to the following restrictions:
12//
13// 1. The origin of this software must not be misrepresented;
14// you must not claim that you wrote the original software.
15// If you use this software in a product, an acknowledgment
16// in the product documentation would be appreciated but is not required.
17//
18// 2. Altered source versions must be plainly marked as such,
19// and must not be misrepresented as being the original software.
20//
21// 3. This notice may not be removed or altered from any source distribution.
22//
24
25#ifndef SFML_SOUNDSTREAM_HPP
26#define SFML_SOUNDSTREAM_HPP
27
29// Headers
31#include <SFML/Audio/Export.hpp>
34#include <SFML/System/Time.hpp>
35#include <cstdlib>
36
37
38namespace sf
39{
45{
46public :
47
52 struct Chunk
53 {
54 const Int16* samples;
55 std::size_t sampleCount;
56 };
57
62 virtual ~SoundStream();
63
76 void play();
77
87 void pause();
88
99 void stop();
100
109 unsigned int getChannelCount() const;
110
120 unsigned int getSampleRate() const;
121
129
141 void setPlayingOffset(Time timeOffset);
142
152
166 void setLoop(bool loop);
167
176 bool getLoop() const;
177
178protected :
179
187
202 void initialize(unsigned int channelCount, unsigned int sampleRate);
203
218 virtual bool onGetData(Chunk& data) = 0;
219
229 virtual void onSeek(Time timeOffset) = 0;
230
231private :
232
240 void streamData();
241
255 bool fillAndPushBuffer(unsigned int bufferNum);
256
266 bool fillQueue();
267
274 void clearQueue();
275
276 enum
277 {
278 BufferCount = 3
279 };
280
282 // Member data
284 Thread m_thread;
285 bool m_isStreaming;
286 unsigned int m_buffers[BufferCount];
287 unsigned int m_channelCount;
288 unsigned int m_sampleRate;
289 Uint32 m_format;
290 bool m_loop;
291 Uint64 m_samplesProcessed;
292 bool m_endBuffers[BufferCount];
293};
294
295} // namespace sf
296
297
298#endif // SFML_SOUNDSTREAM_HPP
299
300
#define SFML_AUDIO_API
Status
Enumeration of the sound source states.
SoundSource(const SoundSource &copy)
Copy constructor.
void stop()
Stop playing the audio stream.
unsigned int getChannelCount() const
Return the number of channels of the stream.
virtual ~SoundStream()
Destructor.
void setLoop(bool loop)
Set whether or not the stream should loop after reaching the end.
bool getLoop() const
Tell whether or not the stream is in loop mode.
Status getStatus() const
Get the current status of the stream (stopped, paused, playing).
SoundStream()
Default constructor.
unsigned int getSampleRate() const
Get the stream sample rate of the stream.
virtual void onSeek(Time timeOffset)=0
Change the current playing position in the stream source.
void pause()
Pause the audio stream.
virtual bool onGetData(Chunk &data)=0
Request a new chunk of audio samples from the stream source.
void initialize(unsigned int channelCount, unsigned int sampleRate)
Define the audio stream parameters.
Time getPlayingOffset() const
Get the current playing position of the stream.
void setPlayingOffset(Time timeOffset)
Change the current playing position of the stream.
void play()
Start or resume playing the audio stream.
Utility class to manipulate threads.
Definition Thread.hpp:49
Represents a time value.
Definition Time.hpp:41
signed short Int16
Definition Config.hpp:140
unsigned int Uint32
Definition Config.hpp:145
unsigned long long Uint64
Definition Config.hpp:153
Structure defining a chunk of audio data to stream.
const Int16 * samples
Pointer to the audio samples.
std::size_t sampleCount
Number of samples pointed by Samples.