/* * LICENSE: zlib/libpng * * raylib-cpp is licensed under an unmodified zlib/libpng license, which is an OSI-certified, * BSD-like license that allows static linking with closed source software: * * Copyright (c) 2020 Rob Loach (@RobLoach) * * This software is provided "as-is", without any express or implied warranty. In no event * will the authors be held liable for any damages arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, including commercial * applications, and to alter it and redistribute it freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not claim that you * wrote the original software. If you use this software in a product, an acknowledgment * in the product documentation would be appreciated but is not required. * * 2. Altered source versions must be plainly marked as such, and must not be misrepresented * as being the original software. * * 3. This notice may not be removed or altered from any source distribution. */ #ifndef RAYLIB_CPP_INCLUDE_AUDIOSTREAM_HPP_ #define RAYLIB_CPP_INCLUDE_AUDIOSTREAM_HPP_ #include "./raylib.hpp" #include "./raylib-cpp-utils.hpp" namespace raylib { /** * AudioStream management functions */ class AudioStream : public ::AudioStream { public: AudioStream(::AudioStream music) { set(music); } /** * Init audio stream (to stream raw audio pcm data) */ AudioStream(unsigned int SampleRate, unsigned int SampleSize, unsigned int Channels) { set(InitAudioStream(SampleRate, SampleSize, Channels)); } ~AudioStream() { Close(); } GETTERSETTER(unsigned int, SampleRate, sampleRate) GETTERSETTER(unsigned int, SampleSize, sampleSize) GETTERSETTER(unsigned int, Channels, channels) AudioStream& operator=(const ::AudioStream& stream) { set(stream); return *this; } AudioStream& operator=(const AudioStream& stream) { set(stream); return *this; } /** * Update audio stream buffers with data */ inline AudioStream& Update(const void *data, int samplesCount) { ::UpdateAudioStream(*this, data, samplesCount); return *this; } /** * Close audio stream and free memory */ inline AudioStream& Close() { ::CloseAudioStream(*this); return *this; } /** * Check if any audio stream buffers requires refill */ inline bool IsProcessed() const { return ::IsAudioStreamProcessed(*this); } /** * Play audio stream */ inline AudioStream& Play() { ::PlayAudioStream(*this); return *this; } /** * Pause audio stream */ inline AudioStream& Pause() { ::PauseAudioStream(*this); return *this; } /** * Resume audio stream */ inline AudioStream& Resume() { ::ResumeAudioStream(*this); return *this; } /** * Check if audio stream is playing */ inline bool IsPlaying() const { return ::IsAudioStreamPlaying(*this); } /** * Stop audio stream */ inline AudioStream& Stop() { ::StopAudioStream(*this); return *this; } /** * Set volume for audio stream (1.0 is max level) */ inline AudioStream& SetVolume(float volume) { ::SetAudioStreamVolume(*this, volume); return *this; } /** * Set pitch for audio stream (1.0 is base level) */ inline AudioStream& SetPitch(float pitch) { ::SetAudioStreamPitch(*this, pitch); return *this; } /** * Default size for new audio streams */ inline static void SetBufferSizeDefault(int size) { ::SetAudioStreamBufferSizeDefault(size); } protected: inline void set(::AudioStream stream) { sampleRate = stream.sampleRate; sampleSize = stream.sampleSize; channels = stream.channels; buffer = stream.buffer; } }; } // namespace raylib #endif // RAYLIB_CPP_INCLUDE_AUDIOSTREAM_HPP_