summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/audio/synth.cc11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/audio/synth.cc b/src/audio/synth.cc
index 98c12d9..77a0d05 100644
--- a/src/audio/synth.cc
+++ b/src/audio/synth.cc
@@ -26,7 +26,7 @@ static struct {
} g_synth_data;
static Voice g_voices[MAX_VOICES];
-static float g_current_output_peak = 0.0f; // Global peak for visualization
+static volatile float g_current_output_peak = 0.0f; // Global peak for visualization
void synth_init() {
memset(&g_synth_data, 0, sizeof(g_synth_data));
@@ -125,7 +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;
+ // Apply a decay to the peak value for smooth visuals
+ g_current_output_peak *= 0.95f;
for (int i = 0; i < num_frames; ++i) {
float left_sample = 0.0f;
@@ -170,10 +171,10 @@ 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)));
+ // Update the peak with the new max (attack)
+ g_current_output_peak =
+ fmaxf(g_current_output_peak, fmaxf(fabsf(left_sample), fabsf(right_sample)));
}
- g_current_output_peak = current_peak_in_frame;
}
int synth_get_active_voice_count() {