raylib-cpp
C++ object-oriented wrapper library for raylib.
AudioStream.hpp
1 #ifndef RAYLIB_CPP_INCLUDE_AUDIOSTREAM_HPP_
2 #define RAYLIB_CPP_INCLUDE_AUDIOSTREAM_HPP_
3 
4 #include "./raylib.hpp"
5 #include "./raylib-cpp-utils.hpp"
6 #include "./RaylibException.hpp"
7 
8 namespace raylib {
12 class AudioStream : public ::AudioStream {
13  public:
14  AudioStream(const ::AudioStream& music) {
15  set(music);
16  }
17 
18  AudioStream(rAudioBuffer* buffer = nullptr,
19  unsigned int sampleRate = 0,
20  unsigned int sampleSize = 0,
21  unsigned int channels = 0) : ::AudioStream{buffer, sampleRate, sampleSize, channels} {
22  // Nothing.
23  }
24 
30  AudioStream(unsigned int SampleRate, unsigned int SampleSize, unsigned int Channels = 2) {
31  if (!Load(SampleRate, SampleSize, Channels)) {
32  throw RaylibException("Failed to create AudioStream");
33  }
34  }
35 
36  AudioStream(const AudioStream&) = delete;
37 
38  AudioStream(AudioStream&& other) {
39  set(other);
40 
41  other.buffer = nullptr;
42  other.sampleRate = 0;
43  other.sampleSize = 0;
44  other.channels = 0;
45  }
46 
47  ~AudioStream() {
48  Unload();
49  }
50 
51  GETTERSETTER(rAudioBuffer *, Buffer, buffer)
52  GETTERSETTER(unsigned int, SampleRate, sampleRate)
53  GETTERSETTER(unsigned int, SampleSize, sampleSize)
54  GETTERSETTER(unsigned int, Channels, channels)
55 
56  AudioStream& operator=(const ::AudioStream& stream) {
57  set(stream);
58  return *this;
59  }
60 
61  AudioStream& operator=(const AudioStream&) = delete;
62 
63  AudioStream& operator=(AudioStream&& other) {
64  if (this == &other) {
65  return *this;
66  }
67 
68  Unload();
69  set(other);
70 
71  other.buffer = nullptr;
72  other.sampleRate = 0;
73  other.sampleSize = 0;
74  other.channels = 0;
75 
76  return *this;
77  }
78 
82  inline AudioStream& Update(const void *data, int samplesCount) {
83  ::UpdateAudioStream(*this, data, samplesCount);
84  return *this;
85  }
86 
90  inline void Unload() {
91  ::UnloadAudioStream(*this);
92  }
93 
97  inline bool IsProcessed() const {
98  return ::IsAudioStreamProcessed(*this);
99  }
100 
104  inline AudioStream& Play() {
105  ::PlayAudioStream(*this);
106  return *this;
107  }
108 
112  inline AudioStream& Pause() {
113  ::PauseAudioStream(*this);
114  return *this;
115  }
116 
120  inline AudioStream& Resume() {
121  ::ResumeAudioStream(*this);
122  return *this;
123  }
124 
128  inline bool IsPlaying() const {
129  return ::IsAudioStreamPlaying(*this);
130  }
131 
135  inline AudioStream& Stop() {
136  ::StopAudioStream(*this);
137  return *this;
138  }
139 
143  inline AudioStream& SetVolume(float volume) {
144  ::SetAudioStreamVolume(*this, volume);
145  return *this;
146  }
147 
151  inline AudioStream& SetPitch(float pitch) {
152  ::SetAudioStreamPitch(*this, pitch);
153  return *this;
154  }
155 
159  inline static void SetBufferSizeDefault(int size) {
160  ::SetAudioStreamBufferSizeDefault(size);
161  }
162 
166  bool IsReady() {
167  return channels > 0;
168  }
169 
175  bool Load(unsigned int SampleRate, unsigned int SampleSize, unsigned int Channels = 2) {
176  set(::LoadAudioStream(SampleRate, SampleSize, Channels));
177  return IsReady();
178  }
179 
180  private:
181  inline void set(const ::AudioStream& stream) {
182  buffer = stream.buffer;
183  sampleRate = stream.sampleRate;
184  sampleSize = stream.sampleSize;
185  channels = stream.channels;
186  }
187 };
188 } // namespace raylib
189 
190 #endif // RAYLIB_CPP_INCLUDE_AUDIOSTREAM_HPP_
raylib
All raylib-cpp classes and functions appear in the raylib namespace.
Definition: AudioDevice.hpp:8
raylib::AudioStream::IsPlaying
bool IsPlaying() const
Check if audio stream is playing.
Definition: AudioStream.hpp:128
raylib::AudioStream::Stop
AudioStream & Stop()
Stop audio stream.
Definition: AudioStream.hpp:135
raylib::AudioStream::Update
AudioStream & Update(const void *data, int samplesCount)
Update audio stream buffers with data.
Definition: AudioStream.hpp:82
raylib::AudioStream::Resume
AudioStream & Resume()
Resume audio stream.
Definition: AudioStream.hpp:120
raylib::AudioStream::SetBufferSizeDefault
static void SetBufferSizeDefault(int size)
Default size for new audio streams.
Definition: AudioStream.hpp:159
raylib::AudioStream::AudioStream
AudioStream(unsigned int SampleRate, unsigned int SampleSize, unsigned int Channels=2)
Init audio stream (to stream raw audio pcm data)
Definition: AudioStream.hpp:30
raylib::AudioStream::Load
bool Load(unsigned int SampleRate, unsigned int SampleSize, unsigned int Channels=2)
Init audio stream (to stream raw audio pcm data)
Definition: AudioStream.hpp:175
raylib::AudioStream::Play
AudioStream & Play()
Play audio stream.
Definition: AudioStream.hpp:104
raylib::AudioStream::IsProcessed
bool IsProcessed() const
Check if any audio stream buffers requires refill.
Definition: AudioStream.hpp:97
raylib::AudioStream::Pause
AudioStream & Pause()
Pause audio stream.
Definition: AudioStream.hpp:112
raylib::AudioStream::SetPitch
AudioStream & SetPitch(float pitch)
Set pitch for audio stream (1.0 is base level)
Definition: AudioStream.hpp:151
raylib::AudioStream
AudioStream management functions.
Definition: AudioStream.hpp:12
raylib::AudioStream::SetVolume
AudioStream & SetVolume(float volume)
Set volume for audio stream (1.0 is max level)
Definition: AudioStream.hpp:143
raylib::AudioStream::Unload
void Unload()
Unload audio stream and free memory.
Definition: AudioStream.hpp:90
raylib::AudioStream::IsReady
bool IsReady()
Retrieve whether or not the audio stream is ready.
Definition: AudioStream.hpp:166
raylib::RaylibException
Exception used for most raylib-related exceptions.
Definition: RaylibException.hpp:13