3#include "AudioTools/AudioLibs/AudioRealFFT.h"
4#include "AudioTools/CoreAudio/AudioOutput.h"
5#include "AudioTools/CoreAudio/StreamCopy.h"
9static Hann fft_effects_hann;
10static BufferedWindow fft_effects_buffered_window{&fft_effects_hann};
47 fft_cfg.length = info.length;
48 fft_cfg.stride = info.stride > 0 ? info.stride : info.length;
53 bool begin()
override {
56 copier.
begin(*p_out, fft);
61 LOGI(
"length: %d", fft_cfg.length);
62 LOGI(
"stride: %d", fft_cfg.stride);
66 return fft.
begin(fft_cfg);
69 size_t write(
const uint8_t *data,
size_t len)
override {
71 return fft.
write(data, len);
75 Print *p_out =
nullptr;
93 void processOutput() {
95 while (copier.
copy());
120 for (
int n = 0; n < fft.
size(); n++) {
124 bin.real = amplitude /
best.magnitude;
126 Serial.println(bin.real);
152 for (
int n = 0; n < fft.
size(); n++) {
157 bin.real =
cosf(phase) * amplitude;
158 bin.img =
sinf(phase) * amplitude;
213 result.shift = shift;
223 bool begin()
override {
224 bool rc = FFTEffect::begin();
226 assert(
abs(shift) < fft.
size());
240 int max = fft.
size();
244 for (
int n = -shift; n < max; n++) {
253 for (
int n = max + shift; n < max; n++) {
256 }
else if (shift > 0) {
258 for (
int n = max - shift - 1; n >= 0; n--) {
267 for (
int n = 0; n < shift; n++) {