diff options
Diffstat (limited to 'src/audio/synth.cc')
| -rw-r--r-- | src/audio/synth.cc | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/src/audio/synth.cc b/src/audio/synth.cc index a723404..3212e0b 100644 --- a/src/audio/synth.cc +++ b/src/audio/synth.cc @@ -4,9 +4,7 @@ #include "synth.h" #include "audio/dct.h" -#include "audio/window.h" #include "util/debug.h" -#include <atomic> #include <math.h> #include <stdio.h> // For printf #include <string.h> // For memset @@ -47,7 +45,6 @@ static Voice g_voices[MAX_VOICES]; static volatile float g_current_output_peak = 0.0f; // Global peak for visualization static float g_tempo_scale = 1.0f; // Playback speed multiplier -static float g_hann[DCT_SIZE]; // Hann window for OLA synthesis (v2) #if !defined(STRIP_ALL) static float g_elapsed_time_sec = 0.0f; // Tracks elapsed time for event hooks @@ -57,7 +54,6 @@ 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; - hann_window_512(g_hann); #if !defined(STRIP_ALL) g_elapsed_time_sec = 0.0f; #endif /* !defined(STRIP_ALL) */ @@ -266,11 +262,11 @@ void synth_render(float* output_buffer, int num_frames) { (v.current_spectral_frame * DCT_SIZE); if (v.ola_mode) { - // OLA-IDCT synthesis (v2): Hann window + overlap-add + // OLA-IDCT synthesis (v2): no synthesis window. + // Analysis used Hann; at 50% overlap w[n]+w[n+H]=1 so + // rectangular synthesis gives perfect reconstruction. float tmp[DCT_SIZE]; idct_512(spectral_frame, tmp); - for (int j = 0; j < DCT_SIZE; ++j) - tmp[j] *= g_hann[j]; // Add saved overlap from previous frame for (int j = 0; j < OLA_OVERLAP; ++j) tmp[j] += v.overlap_buf[j]; |
