summaryrefslogtreecommitdiff
path: root/src/audio/synth.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio/synth.cc')
-rw-r--r--src/audio/synth.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/audio/synth.cc b/src/audio/synth.cc
index 451fcdb..98c12d9 100644
--- a/src/audio/synth.cc
+++ b/src/audio/synth.cc
@@ -26,10 +26,12 @@ static struct {
} g_synth_data;
static Voice g_voices[MAX_VOICES];
+static float g_current_output_peak = 0.0f; // Global peak for visualization
void synth_init() {
memset(&g_synth_data, 0, sizeof(g_synth_data));
memset(g_voices, 0, sizeof(g_voices));
+ g_current_output_peak = 0.0f;
}
void synth_shutdown() {
@@ -123,6 +125,8 @@ void synth_render(float *output_buffer, int num_frames) {
float window[WINDOW_SIZE];
hamming_window_512(window);
+ float current_peak_in_frame = 0.0f;
+
for (int i = 0; i < num_frames; ++i) {
float left_sample = 0.0f;
float right_sample = 0.0f;
@@ -165,7 +169,11 @@ void synth_render(float *output_buffer, int num_frames) {
output_buffer[i * 2] = left_sample;
output_buffer[i * 2 + 1] = right_sample;
+
+ current_peak_in_frame =
+ fmaxf(current_peak_in_frame, fmaxf(fabsf(left_sample), fabsf(right_sample)));
}
+ g_current_output_peak = current_peak_in_frame;
}
int synth_get_active_voice_count() {
@@ -177,3 +185,5 @@ int synth_get_active_voice_count() {
}
return count;
}
+
+float synth_get_output_peak() { return g_current_output_peak; }