aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/Sound.h
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-09-28 17:07:56 +0200
committerLoek Le Blansch <loek@pipeframe.xyz>2024-09-28 17:07:56 +0200
commit3cb7227c3c9678141ff74915331b706265c380cb (patch)
treed47d662b4d26908b3d3d83f4a4df32a0cc489b72 /src/crepe/Sound.h
parent506090032a07f2f3a74a44d8c8774cbdd252c947 (diff)
more WIP audio facade
Diffstat (limited to 'src/crepe/Sound.h')
-rw-r--r--src/crepe/Sound.h54
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;
};
}