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.cc16
1 files changed, 2 insertions, 14 deletions
diff --git a/src/audio/synth.cc b/src/audio/synth.cc
index 45ced59..9b56069 100644
--- a/src/audio/synth.cc
+++ b/src/audio/synth.cc
@@ -4,6 +4,7 @@
#include "synth.h"
#include "audio/dct.h"
+#include "audio/ola.h"
#include "util/debug.h"
#include <math.h>
#include <string.h> // For memset
@@ -264,20 +265,7 @@ void synth_render(float* output_buffer, int num_frames) {
(v.current_spectral_frame * DCT_SIZE);
if (v.ola_mode) {
- // 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);
- // Add saved overlap from previous frame
- for (int j = 0; j < OLA_OVERLAP; ++j)
- tmp[j] += v.overlap_buf[j];
- // Save new tail as overlap for next frame
- for (int j = 0; j < OLA_OVERLAP; ++j)
- v.overlap_buf[j] = tmp[OLA_HOP_SIZE + j];
- // Output buffer holds first OLA_HOP_SIZE samples
- for (int j = 0; j < OLA_HOP_SIZE; ++j)
- v.time_domain_buffer[j] = tmp[j];
+ ola_decode_frame(spectral_frame, v.overlap_buf, v.time_domain_buffer);
} else {
// V1: IDCT directly, no windowing
idct_512(spectral_frame, v.time_domain_buffer);