summaryrefslogtreecommitdiff
path: root/src/audio.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-07-11 11:41:21 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-07-11 11:41:21 -0400
commitf88ca0bc946bae086e02eacdc6c129f00e2e07e3 (patch)
treeeb8975ec505315e7f53a15ded32fb0cfd6b57731 /src/audio.cpp
parent1fd2b900a5f97379e80adc411d3763f9ba811570 (diff)
pke: audio: fx boilerplate, low-pass spatial
Diffstat (limited to 'src/audio.cpp')
-rw-r--r--src/audio.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/audio.cpp b/src/audio.cpp
index 194c01c..33ea740 100644
--- a/src/audio.cpp
+++ b/src/audio.cpp
@@ -3,6 +3,8 @@
#include "asset-manager.hpp"
#include "audio-impl-pw.hpp"
#include "audio.hpp"
+#include "ecs.hpp"
+#include "math-helpers.hpp"
#include "pk.h"
struct pke_audio_master pke_audio_mstr{};
@@ -26,11 +28,29 @@ void pke_audio_teardown() {
}
void pke_audio_tick(double delta) {
(void)delta;
+ uint32_t i, k;
#ifdef PKE_AUDIO_IMPL_PIPEWIRE
if (pke_audio_pw.is_needing_output_remapped == true) {
pke_audio_pw_remap_outputs();
}
#endif
+ pke_audio_mstr.mtx_buffer.lock();
+ for (i = 0; i < pke_audio_mstr.playing_objects.next; ++i) {
+ for (k = 0; k < pke_audio_mstr.playing_objects[i].play_count; ++k) {
+ if (pke_audio_mstr.playing_objects[i].instance_handle[k] == InstanceHandle_MAX) {
+ continue;
+ }
+ CompInstance *inst = ECS_GetInstance(pke_audio_mstr.playing_objects[i].instance_handle[k]);
+ if (inst == nullptr || inst->instanceHandle == InstanceHandle_MAX) {
+ continue;
+ }
+ BulletToGlm(
+ inst->bt.rigidBody->getWorldTransform().getOrigin(),
+ pke_audio_mstr.playing_objects[i].position_source[k]
+ );
+ }
+ }
+ pke_audio_mstr.mtx_buffer.unlock();
}
float pke_audio_get_volume(pke_audio_source source) {
@@ -46,7 +66,7 @@ bool pke_audio_playing_objects_find_first_by_key(void *user_data, void *arr_data
pke_audio_obj &audio_obj = *reinterpret_cast<pke_audio_obj*>(arr_data);
return std::get<0>(tup) == audio_obj.handle && std::get<1>(tup) == audio_obj.source;
}
-void pke_audio_play(AssetHandle handle, pke_audio_source audio_source, glm::vec3 position_source, pke_audio_flags flags) {
+void pke_audio_play(AssetHandle handle, pke_audio_source audio_source, pke_audio_flags flags, glm::vec3 position_source, InstanceHandle instance_handle) {
// TODO validation: audio length (does it fit in uint32_t), etc
// TODO rethink threading: first-pass only mutex
std::tuple<AssetHandle, pke_audio_source> tup {handle, audio_source};
@@ -67,6 +87,7 @@ void pke_audio_play(AssetHandle handle, pke_audio_source audio_source, glm::vec3
idx = aobj->play_count;
aobj->play_count += 1;
}
+ aobj->instance_handle[idx] = instance_handle;
aobj->position_source[idx] = position_source;
aobj->flags[idx] = flags;
aobj->play_heads[idx] = 0;