summaryrefslogtreecommitdiff
path: root/src/audio-impl-shared.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-07-14 16:35:32 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-07-14 16:35:32 -0400
commit7f0b0a59425321dcc880ddc0f4b479bce85e0bb0 (patch)
treec5c10d187faf26a248d859deac68ba83bbe26e97 /src/audio-impl-shared.cpp
parentf88ca0bc946bae086e02eacdc6c129f00e2e07e3 (diff)
pke: audio: process each tick, impl buffer copy
Diffstat (limited to 'src/audio-impl-shared.cpp')
-rw-r--r--src/audio-impl-shared.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/audio-impl-shared.cpp b/src/audio-impl-shared.cpp
index 0c3c730..b7890ac 100644
--- a/src/audio-impl-shared.cpp
+++ b/src/audio-impl-shared.cpp
@@ -1,21 +1,24 @@
#include "audio-impl-shared.hpp"
-float pke_audio_fx_reverb(float *buffer, uint64_t buffer_len, uint64_t buffer_idx, pke_audio_fx_params_reverb *params) {
- if (buffer_idx >= buffer_len-1) return 0.f;
+float pke_audio_fx_reverb(float *buffer, int64_t buffer_len, int64_t buffer_idx, pke_audio_fx_params_reverb *params) {
+ if (buffer_idx == 0) return 0.f;
+ if (buffer_idx >= buffer_len) return 0.f;
// simple feedback
return buffer[buffer_idx - 1] * params->reverb_strength;
}
-float pke_audio_fx_delay(float *buffer, uint64_t buffer_len, uint64_t buffer_idx, pke_audio_fx_params_delay *params) {
- if (buffer_idx >= buffer_len-1) return 0.f;
+float pke_audio_fx_delay(float *buffer, int64_t buffer_len, int64_t buffer_idx, pke_audio_fx_params_delay *params) {
+ if (buffer_idx >= buffer_len) return 0.f;
+ assert ((buffer_idx - params->delay_frames) >= 0);
+ // if (params->delay_frames > buffer_len) return 0.f;
return buffer[buffer_idx - params->delay_frames];
}
-float pke_audio_fx_low_pass_filter(float *buffer, uint64_t buffer_len, uint64_t buffer_idx, pke_audio_fx_params_low_pass_filter *params) {
- if (buffer_idx >= buffer_len-1) return 0.f;
+float pke_audio_fx_low_pass_filter(float *buffer, int64_t buffer_len, int64_t buffer_idx, pke_audio_fx_params_low_pass_filter *params) {
+ if (buffer_idx >= buffer_len) return 0.f;
float rc = 1.f / std::numbers::pi * 2.0 * params->cutoff_freq;
- float dt = 1.f / 48000.f; // TODO reference global or pass this in
+ float dt = 1.f / PKE_AUDIO_BITRATE;
float alpha = dt / (rc + dt);
params->prev_output = (alpha * buffer[buffer_idx]) + ((1.f - alpha) * params->prev_output);
return params->prev_output;