arduino-audio-tools
AudioKissFFT.h
1 #pragma once
2 
3 #include "kiss_fft.h"
4 #include "AudioFFT.h"
5 
13 namespace audio_tools {
14 
21 class FFTDriverKissFFT : public FFTDriver {
22  public:
23  bool begin(int len) override {
24  if (p_fft_object==nullptr) p_fft_object = kiss_fft_alloc(len,0,nullptr,nullptr);
25  if (p_data==nullptr) p_data = new kiss_fft_cpx[len];
26  assert(p_fft_object!=nullptr);
27  assert(p_data!=nullptr);
28  return p_fft_object!=nullptr && p_data!=nullptr;
29  }
30 
31  void end() override {
32  if (p_fft_object!=nullptr) kiss_fft_free(p_fft_object);
33  if (p_data!=nullptr) delete[] p_data;
34  p_fft_object = nullptr;
35  p_data = nullptr;
36  }
37  void setValue(int idx, int value) override {
38  p_data[idx].r = value;
39  }
40 
41  void fft() override {
42  kiss_fft (p_fft_object, p_data, p_data);
43  };
44 
45  float magnitude(int idx) override {
46  return sqrt(p_data[idx].r * p_data[idx].r + p_data[idx].i * p_data[idx].i);
47  }
48 
50  float magnitudeFast(int idx) override {
51  return (p_data[idx].r * p_data[idx].r + p_data[idx].i * p_data[idx].i);
52  }
53 
54  virtual bool isValid() override{ return p_fft_object!=nullptr; }
55 
56  kiss_fft_cfg p_fft_object=nullptr;
57  kiss_fft_cpx *p_data = nullptr; // real
58 
59 };
66 class AudioKissFFT : public AudioFFTBase {
67  public:
69 
71  kiss_fft_cpx *dataArray() {
72  return driverEx()->p_data;
73  }
74 
75  FFTDriverKissFFT* driverEx() {
76  return (FFTDriverKissFFT*)driver();
77  }
78 };
79 
80 
81 }
Executes FFT using audio data. The Driver which is passed in the constructor selects a specifc FFT im...
Definition: AudioFFT.h:82
AudioFFTBase(FFTDriver *driver)
Default Constructor. The len needs to be of the power of 2 (e.g. 512, 1024, 2048, 4096,...
Definition: AudioFFT.h:85
FFTDriver * driver()
provides access to the FFTDriver which implements the basic FFT functionality
Definition: AudioFFT.h:240
AudioFFT using FFTReal. The only specific functionality is the access to the dataArray.
Definition: AudioKissFFT.h:66
kiss_fft_cpx * dataArray()
Provides the complex array returned by the FFT
Definition: AudioKissFFT.h:71
Abstract Class which defines the basic FFT functionality.
Definition: AudioFFT.h:65
Driver for RealFFT.
Definition: AudioKissFFT.h:21
float magnitudeFast(int idx) override
magnitude w/o sqrt
Definition: AudioKissFFT.h:50
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition: AnalogAudio.h:10