Skip to content

Commit 12c3fee

Browse files
committed
example basic-a2dp-fft.ino
1 parent b9e95c9 commit 12c3fee

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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

Comments
 (0)