diff options
author | max-001 <maxsmits21@kpnmail.nl> | 2024-11-05 16:29:18 +0100 |
---|---|---|
committer | max-001 <maxsmits21@kpnmail.nl> | 2024-11-05 16:29:18 +0100 |
commit | ae6a103946e437ca85cc69c5fc2cbf68d35ffeae (patch) | |
tree | a0bd09748c68950353f05d245bed4de470548fc6 /src/crepe/facade/Sound.h | |
parent | a5d3564f6d051986376c98abb9c098a8a7183fe0 (diff) | |
parent | 5b248d068a94902be9ca4d00fe07d551f64c49b9 (diff) |
Merge remote-tracking branch 'origin/master' into max/gameobject
Diffstat (limited to 'src/crepe/facade/Sound.h')
-rw-r--r-- | src/crepe/facade/Sound.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/src/crepe/facade/Sound.h b/src/crepe/facade/Sound.h new file mode 100644 index 0000000..183bd7c --- /dev/null +++ b/src/crepe/facade/Sound.h @@ -0,0 +1,81 @@ +#pragma once + +#include <memory> +#include <soloud/soloud.h> +#include <soloud/soloud_wav.h> + +#include "../Asset.h" + +namespace crepe { + +class Sound { +public: + /** + * \brief Pause this sample + * + * Pauses this sound if it is playing, or does nothing if it is already + * paused. The playhead position is saved, such that calling \c play() after + * this function makes the sound resume. + */ + void pause(); + /** + * \brief Play this sample + * + * Resume playback if this sound is paused, or start from the beginning of + * the sample. + * + * \note This class only saves a reference to the most recent 'voice' of this + * sound. Calling \c play() while the sound is already playing causes + * multiple instances of the sample to play simultaniously. The sample + * started last is the one that is controlled afterwards. + */ + void play(); + /** + * \brief Reset playhead position + * + * Resets the playhead position so that calling \c play() after this function + * makes it play from the start of the sample. If the sound is not paused + * before calling this function, this function will stop playback. + */ + void rewind(); + /** + * \brief Set playback volume / gain + * + * \param volume Volume (0 = muted, 1 = full volume) + */ + void set_volume(float volume); + /** + * \brief Get playback volume / gain + * + * \return Volume + */ + float get_volume() const { return this->volume; } + /** + * \brief Set looping behavior for this sample + * + * \param looping Looping behavior (false = one-shot, true = loop) + */ + void set_looping(bool looping); + /** + * \brief Get looping behavior + * + * \return true if looping, false if one-shot + */ + bool get_looping() const { return this->looping; } + +public: + Sound(const char * src); + Sound(std::unique_ptr<Asset> res); + +private: + void load(std::unique_ptr<Asset> res); + +private: + SoLoud::Wav sample; + SoLoud::handle handle; + + float volume = 1.0f; + bool looping = false; +}; + +} // namespace crepe |