blob: 3dbc36813fc4de0b10e2fe5349979b9bfa584191 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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);
|