Onsens  1.0
This is C++ game about bitwise logic.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
SoundStream.hpp
Go to the documentation of this file.
1
2//
3// SFML - Simple and Fast Multimedia Library
4// Copyright (C) 2007-2018 Laurent Gomila (laurent@sfml-dev.org)
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 <SFML/System/Mutex.hpp>
36#include <cstdlib>
37
38
39namespace sf
40{
46{
47public:
48
53 struct Chunk
54 {
55 const Int16* samples;
56 std::size_t sampleCount;
57 };
58
63 virtual ~SoundStream();
64
77 void play();
78
88 void pause();
89
100 void stop();
101
110 unsigned int getChannelCount() const;
111
121 unsigned int getSampleRate() const;
122
130
144 void setPlayingOffset(Time timeOffset);
145
155
169 void setLoop(bool loop);
170
179 bool getLoop() const;
180
181protected:
182
183 enum
184 {
185 NoLoop = -1
186 };
187
195
210 void initialize(unsigned int channelCount, unsigned int sampleRate);
211
229 virtual bool onGetData(Chunk& data) = 0;
230
240 virtual void onSeek(Time timeOffset) = 0;
241
252 virtual Int64 onLoop();
253
254private:
255
263 void streamData();
264
279 bool fillAndPushBuffer(unsigned int bufferNum, bool immediateLoop = false);
280
290 bool fillQueue();
291
298 void clearQueue();
299
300 enum
301 {
302 BufferCount = 3,
303 BufferRetries = 2
304 };
305
307 // Member data
309 Thread m_thread;
310 mutable Mutex m_threadMutex;
311 Status m_threadStartState;
312 bool m_isStreaming;
313 unsigned int m_buffers[BufferCount];
314 unsigned int m_channelCount;
315 unsigned int m_sampleRate;
316 Uint32 m_format;
317 bool m_loop;
318 Uint64 m_samplesProcessed;
319 Int64 m_bufferSeeks[BufferCount];
320};
321
322} // namespace sf
323
324
325#endif // SFML_SOUNDSTREAM_HPP
326
327
#define SFML_AUDIO_API
Blocks concurrent access to shared resources from multiple threads.
Definition: Mutex.hpp:48
Base class defining a sound's properties.
Definition: SoundSource.hpp:43
Status
Enumeration of the sound source states.
Definition: SoundSource.hpp:51
Abstract base class for streamed audio sources.
Definition: SoundStream.hpp:46
void stop()
Stop playing the audio stream.
unsigned int getChannelCount() const
Return the number of channels of the stream.
virtual ~SoundStream()
Destructor.
virtual Int64 onLoop()
Change the current playing position in the stream source to the beginning of the loop.
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 long long Int64
Definition: Config.hpp:229
signed short Int16
Definition: Config.hpp:217
unsigned int Uint32
Definition: Config.hpp:222
unsigned long long Uint64
Definition: Config.hpp:230
Structure defining a chunk of audio data to stream.
Definition: SoundStream.hpp:54
const Int16 * samples
Pointer to the audio samples.
Definition: SoundStream.hpp:55
std::size_t sampleCount
Number of samples pointed by Samples.
Definition: SoundStream.hpp:56