aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/facade
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-11-29 20:35:17 +0100
committerLoek Le Blansch <loek@pipeframe.xyz>2024-11-29 20:35:17 +0100
commite4be73051a68b552c44280bbe9836dd4f02972d8 (patch)
treea2d0dbad0255a9da7c58f74c7479a39fcccd34db /src/crepe/facade
parent693355f55193cb2ea4c29616073227e37665afc1 (diff)
audio system kinda working
Diffstat (limited to 'src/crepe/facade')
-rw-r--r--src/crepe/facade/Sound.h7
-rw-r--r--src/crepe/facade/SoundContext.cpp31
-rw-r--r--src/crepe/facade/SoundContext.h10
3 files changed, 40 insertions, 8 deletions
diff --git a/src/crepe/facade/Sound.h b/src/crepe/facade/Sound.h
index 10d7c3c..35bccdb 100644
--- a/src/crepe/facade/Sound.h
+++ b/src/crepe/facade/Sound.h
@@ -20,13 +20,8 @@ public:
Sound(const Asset & src);
~Sound(); // dbg_trace
- class Handle {
- private:
+ struct Handle {
SoLoud::handle handle;
- float volume = 1.0f;
- bool looping = false;
-
- friend class SoundContext;
};
private:
diff --git a/src/crepe/facade/SoundContext.cpp b/src/crepe/facade/SoundContext.cpp
index b65dfb2..3e9a3d1 100644
--- a/src/crepe/facade/SoundContext.cpp
+++ b/src/crepe/facade/SoundContext.cpp
@@ -6,10 +6,37 @@ using namespace crepe;
SoundContext::SoundContext() {
dbg_trace();
- engine.init();
+ this->engine.init();
+ this->engine.setMaxActiveVoiceCount(this->config.audio.voices);
}
SoundContext::~SoundContext() {
dbg_trace();
- engine.deinit();
+ this->engine.deinit();
}
+
+Sound::Handle SoundContext::play(Sound & resource) {
+ return {
+ .handle = this->engine.play(resource.sample, this->default_volume),
+ };
+}
+
+void SoundContext::stop(Sound::Handle & handle) {
+ this->engine.stop(handle.handle);
+}
+
+void SoundContext::set_volume(Sound & resource, Sound::Handle & handle, float volume) {
+ this->engine.setVolume(handle.handle, volume);
+ this->default_volume = volume;
+}
+
+void SoundContext::set_loop(Sound & resource, Sound::Handle & handle, bool loop) {
+ this->engine.setLooping(handle.handle, loop);
+}
+
+bool SoundContext::get_playing(Sound::Handle & handle) {
+ // See Soloud::stopVoice_internal in soloud/src/core/soloud_core_voiceops.cpp for why this is
+ // the correct method to use here (samples are currently never paused)
+ return this->engine.isValidVoiceHandle(handle.handle);
+}
+
diff --git a/src/crepe/facade/SoundContext.h b/src/crepe/facade/SoundContext.h
index 286ced8..e02977e 100644
--- a/src/crepe/facade/SoundContext.h
+++ b/src/crepe/facade/SoundContext.h
@@ -2,6 +2,8 @@
#include <soloud/soloud.h>
+#include "../api/Config.h"
+
#include "Sound.h"
namespace crepe {
@@ -22,9 +24,17 @@ public:
SoundContext & operator=(const SoundContext &) = delete;
SoundContext & operator=(SoundContext &&) = delete;
+ Sound::Handle play(Sound & resource);
+ void stop(Sound::Handle &);
+ void set_volume(Sound &, Sound::Handle &, float);
+ void set_loop(Sound &, Sound::Handle &, bool);
+ bool get_playing(Sound::Handle &);
private:
SoLoud::Soloud engine;
+ float default_volume = 1.0f;
+
+ Config & config = Config::get_instance();
};
} // namespace crepe