1
+ #include " AudioTools.h"
2
+ #include " AudioLibs/AudioRealFFT.h" // using RealFFT
3
+
4
+ AudioRealFFT fft; // or AudioKissFFT
5
+ Hann hann;
6
+ BufferedWindow buffered (&hann);
7
+ SineWaveGenerator<int16_t > sineWave (32000 );
8
+ GeneratedSoundStream<int16_t > in (sineWave);
9
+ StreamCopy copier (fft, in);
10
+ uint16_t sample_rate = 44100 ;
11
+ int bits_per_sample = 16 ;
12
+ int channels = 1 ;
13
+ float value = 0 ;
14
+
15
+ // display fft result
16
+ void fftResult (AudioFFTBase &fft) {
17
+ float diff;
18
+ auto result = fft.result ();
19
+ if (result.magnitude > 100 ) {
20
+ Serial.print (result.frequency );
21
+ Serial.print (" " );
22
+ Serial.print (result.magnitude );
23
+ Serial.print (" => " );
24
+ Serial.print (result.frequencyAsNote (diff));
25
+ Serial.print (" diff: " );
26
+ Serial.print (diff);
27
+ Serial.print (" - time ms " );
28
+ Serial.print (fft.resultTime () - fft.resultTimeBegin ());
29
+ Serial.println ();
30
+ }
31
+ }
32
+
33
+ void setup () {
34
+ Serial.begin (115200 );
35
+ AudioLogger::instance ().begin (Serial, AudioLogger::Warning);
36
+
37
+ // set the frequency
38
+ sineWave.setFrequency (N_B4);
39
+
40
+ // Setup sine wave
41
+ auto cfg = in.defaultConfig ();
42
+ cfg.channels = channels;
43
+ cfg.sample_rate = sample_rate;
44
+ in.begin (cfg);
45
+
46
+ // Setup FFT
47
+ auto tcfg = fft.defaultConfig ();
48
+ tcfg.copyFrom (cfg);
49
+ tcfg.length = 4096 ;
50
+ tcfg.callback = &fftResult;
51
+ tcfg.window_function = &buffered;
52
+ fft.begin (tcfg);
53
+ }
54
+
55
+ void loop () { copier.copy (); }
0 commit comments