diff options
author | Loek Le Blansch <loek@pipeframe.xyz> | 2024-09-28 17:07:56 +0200 |
---|---|---|
committer | Loek Le Blansch <loek@pipeframe.xyz> | 2024-09-28 17:07:56 +0200 |
commit | 3cb7227c3c9678141ff74915331b706265c380cb (patch) | |
tree | d47d662b4d26908b3d3d83f4a4df32a0cc489b72 /src/crepe/Sound.h | |
parent | 506090032a07f2f3a74a44d8c8774cbdd252c947 (diff) |
more WIP audio facade
Diffstat (limited to 'src/crepe/Sound.h')
-rw-r--r-- | src/crepe/Sound.h | 54 |
1 files changed, 47 insertions, 7 deletions
diff --git a/src/crepe/Sound.h b/src/crepe/Sound.h index ac4b7f4..71fe390 100644 --- a/src/crepe/Sound.h +++ b/src/crepe/Sound.h @@ -1,6 +1,7 @@ #pragma once #include <soloud.h> +#include <soloud_wav.h> #include <memory> @@ -8,22 +9,61 @@ namespace crepe { -class Sound { -public: - Sound(std::unique_ptr<api::Resource> res); - virtual ~Sound() = default; +class SoundSystem; +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 Set looping behavior for this sample + * + * \param looping Looping behavior (false = one-shot, true = loop) + */ void set_looping(bool looping); private: - std::unique_ptr<api::Resource> _res; - SoLoud::handle _handle; - bool _paused; + Sound(std::unique_ptr<api::Resource> res, SoundSystem & system); + SoundSystem & system; + friend class SoundSystem; + +private: + std::unique_ptr<api::Resource> res; + SoLoud::Wav sample; + SoLoud::handle handle; + bool paused; }; } |