summaryrefslogtreecommitdiff
path: root/src/audio/ola.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio/ola.cc')
-rw-r--r--src/audio/ola.cc16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/audio/ola.cc b/src/audio/ola.cc
index 738df85..fd5098e 100644
--- a/src/audio/ola.cc
+++ b/src/audio/ola.cc
@@ -21,14 +21,18 @@ void ola_encode(const float* pcm, int n_samples, float* spec, int num_frames) {
}
}
+void ola_decode_frame(const float* spec_frame, float* overlap, float* out_hop) {
+ float tmp[DCT_SIZE];
+ idct_512(spec_frame, tmp);
+ for (int j = 0; j < OLA_HOP_SIZE; ++j)
+ out_hop[j] = tmp[j] + overlap[j];
+ for (int j = 0; j < OLA_OVERLAP; ++j)
+ overlap[j] = tmp[OLA_HOP_SIZE + j];
+}
+
void ola_decode(const float* spec, int num_frames, float* pcm) {
float overlap[OLA_OVERLAP] = {};
- float tmp[DCT_SIZE];
for (int f = 0; f < num_frames; ++f) {
- idct_512(spec + f * DCT_SIZE, tmp);
- for (int j = 0; j < OLA_HOP_SIZE; ++j)
- pcm[f * OLA_HOP_SIZE + j] = tmp[j] + overlap[j];
- for (int j = 0; j < OLA_OVERLAP; ++j)
- overlap[j] = tmp[OLA_HOP_SIZE + j];
+ ola_decode_frame(spec + f * DCT_SIZE, overlap, pcm + f * OLA_HOP_SIZE);
}
}