summaryrefslogtreecommitdiff
path: root/src/audio-impl-shared.cpp
blob: b7890ac6065a12f8082fbe06bd682923d194983f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

#include "audio-impl-shared.hpp"

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, 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, 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 / 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;
}