raylib-cpp
C++ object-oriented wrapper library for raylib.
Music.hpp
1 #ifndef RAYLIB_CPP_INCLUDE_MUSIC_HPP_
2 #define RAYLIB_CPP_INCLUDE_MUSIC_HPP_
3 
4 #include <string>
5 
6 #include "./raylib.hpp"
7 #include "./raylib-cpp-utils.hpp"
8 #include "./RaylibException.hpp"
9 
10 namespace raylib {
14 class Music : public ::Music {
15  public:
19  Music() {
20  ctxType = 0;
21  ctxData = nullptr;
22  looping = false;
23  frameCount = 0;
24  stream.buffer = nullptr;
25  }
26 
27  Music(const ::Music& music) {
28  set(music);
29  }
30 
36  Music(const std::string& fileName) {
37  if (!Load(fileName)) {
38  throw RaylibException(TextFormat("Failed to load Music from file: %s", fileName.c_str()));
39  }
40  }
41 
47  Music(const std::string& fileType, unsigned char* data, int dataSize) {
48  if (!Load(fileType, data, dataSize)) {
49  throw RaylibException(TextFormat("Failed to load Music from %s file", fileType.c_str()));
50  }
51  }
52 
53  Music(const Music&) = delete;
54 
55  Music(Music&& other) {
56  set(other);
57 
58  other.ctxType = 0;
59  other.ctxData = nullptr;
60  other.looping = false;
61  other.frameCount = 0;
62  other.stream = {};
63  }
64 
68  ~Music() {
69  Unload();
70  }
71 
72  GETTERSETTER(::AudioStream, Stream, stream)
73  GETTERSETTER(unsigned int, FrameCount, frameCount)
74  GETTERSETTER(bool, Looping, looping)
75  GETTERSETTER(int, CtxType, ctxType)
76  GETTERSETTER(void*, CtxData, ctxData)
77 
78  Music& operator=(const ::Music& music) {
79  set(music);
80  return *this;
81  }
82 
83  Music& operator=(const Music&) = delete;
84 
85  Music& operator=(Music&& other) {
86  if (this == &other) {
87  return *this;
88  }
89 
90  Unload();
91  set(other);
92 
93  other.ctxType = 0;
94  other.ctxData = nullptr;
95  other.looping = false;
96  other.frameCount = 0;
97  other.stream = {};
98 
99  return *this;
100  }
101 
105  inline void Unload() {
106  ::UnloadMusicStream(*this);
107  }
108 
112  inline Music& Play() {
113  ::PlayMusicStream(*this);
114  return *this;
115  }
116 
120  inline Music& Update() {
121  ::UpdateMusicStream(*this);
122  return *this;
123  }
124 
128  inline Music& Stop() {
129  ::StopMusicStream(*this);
130  return *this;
131  }
132 
136  inline Music& Pause() {
137  ::PauseMusicStream(*this);
138  return *this;
139  }
140 
144  inline Music& Resume() {
145  ::ResumeMusicStream(*this);
146  return *this;
147  }
148 
152  inline Music& Seek(float position) {
153  SeekMusicStream(*this, position);
154  return *this;
155  }
156 
160  inline bool IsPlaying() const {
161  return ::IsMusicStreamPlaying(*this);
162  }
163 
167  inline Music& SetVolume(float volume) {
168  ::SetMusicVolume(*this, volume);
169  return *this;
170  }
171 
175  inline Music& SetPitch(float pitch) {
176  ::SetMusicPitch(*this, pitch);
177  return *this;
178  }
179 
183  inline float GetTimeLength() const {
184  return ::GetMusicTimeLength(*this);
185  }
186 
190  inline float GetTimePlayed() const {
191  return ::GetMusicTimePlayed(*this);
192  }
193 
197  bool Load(const std::string& fileName) {
198  set(::LoadMusicStream(fileName.c_str()));
199  return IsReady();
200  }
201 
205  bool Load(const std::string& fileType, unsigned char* data, int dataSize) {
206  set(::LoadMusicStreamFromMemory(fileType.c_str(), data, dataSize));
207  return IsReady();
208  }
209 
215  inline bool IsReady() const {
216  return stream.buffer != nullptr;
217  }
218 
219  private:
220  inline void set(const ::Music& music) {
221  ctxType = music.ctxType;
222  ctxData = music.ctxData;
223  looping = music.looping;
224  frameCount = music.frameCount;
225  stream = music.stream;
226  }
227 };
228 } // namespace raylib
229 
230 #endif // RAYLIB_CPP_INCLUDE_MUSIC_HPP_
raylib::Music::Music
Music(const std::string &fileType, unsigned char *data, int dataSize)
Load music stream from memory.
Definition: Music.hpp:47
raylib
All raylib-cpp classes and functions appear in the raylib namespace.
Definition: AudioDevice.hpp:8
raylib::Music::SetPitch
Music & SetPitch(float pitch)
Set pitch for music.
Definition: Music.hpp:175
raylib::Music::Stop
Music & Stop()
Stop music playing.
Definition: Music.hpp:128
raylib::Music::SetVolume
Music & SetVolume(float volume)
Set volume for music.
Definition: Music.hpp:167
raylib::Music::Resume
Music & Resume()
Resume music playing.
Definition: Music.hpp:144
raylib::Music::Play
Music & Play()
Start music playing.
Definition: Music.hpp:112
raylib::Music::Pause
Music & Pause()
Pause music playing.
Definition: Music.hpp:136
raylib::Music::IsPlaying
bool IsPlaying() const
Check if music is playing.
Definition: Music.hpp:160
raylib::Music::IsReady
bool IsReady() const
Retrieve whether or not the Music has been loaded.
Definition: Music.hpp:215
raylib::Music::~Music
~Music()
Unload music stream.
Definition: Music.hpp:68
raylib::Music::Music
Music(const std::string &fileName)
Load music stream from file.
Definition: Music.hpp:36
raylib::Music::Unload
void Unload()
Unload music stream.
Definition: Music.hpp:105
raylib::Music::Load
bool Load(const std::string &fileType, unsigned char *data, int dataSize)
Load music stream from memory.
Definition: Music.hpp:205
raylib::Music::Music
Music()
Default Music constructor to build an empty Music object.
Definition: Music.hpp:19
raylib::Music
Music stream type (audio file streaming from memory)
Definition: Music.hpp:14
raylib::Music::Load
bool Load(const std::string &fileName)
Load music stream from file.
Definition: Music.hpp:197
raylib::Music::Seek
Music & Seek(float position)
Seek music to a position (in seconds)
Definition: Music.hpp:152
raylib::AudioStream
AudioStream management functions.
Definition: AudioStream.hpp:12
raylib::RaylibException
Exception used for most raylib-related exceptions.
Definition: RaylibException.hpp:13
raylib::Music::Update
Music & Update()
Updates buffers for music streaming.
Definition: Music.hpp:120
raylib::Music::GetTimeLength
float GetTimeLength() const
Get music time length (in seconds)
Definition: Music.hpp:183
raylib::Music::GetTimePlayed
float GetTimePlayed() const
Get current music time played (in seconds)
Definition: Music.hpp:190