From 7f0b0a59425321dcc880ddc0f4b479bce85e0bb0 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Mon, 14 Jul 2025 16:35:32 -0400 Subject: pke: audio: process each tick, impl buffer copy --- src/audio-impl-shared.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'src/audio-impl-shared.cpp') 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; -- cgit v1.2.3