diff options
Diffstat (limited to 'src/audio/ola.h')
| -rw-r--r-- | src/audio/ola.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/audio/ola.h b/src/audio/ola.h new file mode 100644 index 0000000..3dbc368 --- /dev/null +++ b/src/audio/ola.h @@ -0,0 +1,21 @@ +// 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); |
