// This file is part of the 64k demo project. // Shared OLA encode/decode helpers (Hann analysis, rectangular synthesis). // Used by spectool, tests, and any batch PCM<->spec conversion. #pragma once #include "audio/dct.h" // Returns number of OLA frames for n_samples PCM input. static inline int ola_num_frames(int n_samples) { return (n_samples > DCT_SIZE) ? (n_samples - DCT_SIZE) / OLA_HOP_SIZE + 1 : 1; } // Hann-windowed FDCT with 50% overlap (analysis). // spec must hold ola_num_frames(n_samples) * DCT_SIZE floats. void ola_encode(const float* pcm, int n_samples, float* spec, int num_frames); // IDCT-OLA with rectangular synthesis window (no synthesis window). // Hann at 50% overlap satisfies w[n]+w[n+H]=1 → perfect reconstruction. // pcm must hold num_frames * OLA_HOP_SIZE floats. void ola_decode(const float* spec, int num_frames, float* pcm);