I am providing a Bluetooth A2DP audio library for the ESP32, which can receive audio from a Bluetooth Source (e.g. a mobile phone) and play it via the I2S API provided by the IDF framework.
Unfortunately Espressif has decided to go for a completely new I2S API which means that my integration needs to be rewritten.
For quite some time now, I am supporting this new API via my AudioTools library, and I was considering to remove the I2S output functiontlity completely from my A2DP library and just use it a data provider for the AudioTools.
My latest design however looks as follows:
- I am providing a separate output API in the A2DP library with the following class implementations:
- Output to any AudioTools audio sink and subclass of Arduino Print using BluetoothA2DPOutputAudioTools
- Output with the legacy I2S API using BluetoothA2DPOutputLegacy
- Combination of the above using BluetoothA2DPOutputDefault. This is the default selection.
- If you use a Arduino ESP32 core version < 3.0.0 the legacy functionality continues to work
- Starting from now, you can use the new API independently on the ESP32 core version.
I have updated the documentation and examples to use the new API.
I recommend to use the new API because this way you can be sure that your sketch will work in future ESP32 cores versions.
Example Sketch with the new API
#include "AudioTools.h
#include "BluetoothA2DPSink.h"
I2SStream i2s;
BluetoothA2DPSink a2dp_sink(i2s);
void setup() {
auto cfg = i2s.defaultConfig();
cfg.pin_bck = 14;
cfg.pin_ws = 15;
cfg.pin_data = 22;
i2s.begin(cfg);
a2dp_sink.start("MyMusic");
}
void loop() {
}
This comes at the cost, that you also need to install the AudioTools library now!
0 Comments