1
+ /* *
2
+ * @file basic-a2dp-fft.ino
3
+ * @brief A2DP Sink with output to FFT.
4
+ *
5
+ * @author Phil Schatzmann
6
+ * @copyright GPLv3
7
+ */
8
+
9
+ #include " BluetoothA2DPSink.h"
10
+ #include " AudioTools.h"
11
+ #include " AudioLibs/AudioEspressifFFT.h" // or AudioKissFFT
12
+
13
+ BluetoothA2DPSink a2dp_sink;
14
+ AudioEspressifFFT fft; // or AudioKissFFT
15
+
16
+ // Write data to SPDIF in callback
17
+ void read_data_stream (const uint8_t *data, uint32_t length) {
18
+ fft.write (data, length);
19
+ }
20
+
21
+ // display fft result
22
+ void fftResult (AudioFFTBase &fft){
23
+ int diff;
24
+ auto result = fft.result ();
25
+ if (result.magnitude >100 ){
26
+ Serial.print (result.frequency );
27
+ Serial.print (" " );
28
+ Serial.print (result.magnitude );
29
+ Serial.print (" => " );
30
+ Serial.print (result.frequencyAsNote (diff));
31
+ Serial.print ( " diff: " );
32
+ Serial.println (diff);
33
+ }
34
+ }
35
+
36
+ void setup () {
37
+ Serial.begin (115200 );
38
+ AudioLogger::instance ().begin (Serial, AudioLogger::Info);
39
+
40
+ // Setup FFT
41
+ auto tcfg = fft.defaultConfig ();
42
+ tcfg.length = 4096 ;
43
+ tcfg.channels = 2 ;
44
+ tcfg.sample_rate = a2dp_sink.sample_rate ();;
45
+ tcfg.bits_per_sample = 16 ;
46
+ tcfg.callback = &fftResult;
47
+ fft.begin (tcfg);
48
+
49
+ // register callback
50
+ a2dp_sink.set_stream_reader (read_data_stream, false );
51
+
52
+ // Start Bluetooth Audio Receiver
53
+ Serial.print (" starting a2dp-fft..." );
54
+ a2dp_sink.set_auto_reconnect (false );
55
+ a2dp_sink.start (" a2dp-fft" );
56
+
57
+ }
58
+
59
+ void loop () { delay (100 ); }
0 commit comments