54 lines
1.6 KiB
Arduino
54 lines
1.6 KiB
Arduino
|
|
// We use the decoding on the input side to provid pcm data
|
||
|
|
|
||
|
|
#include "SPI.h"
|
||
|
|
#include "SD.h"
|
||
|
|
#include "AudioTools.h"
|
||
|
|
#include "AudioTools/Communication/A2DPStream.h" // https://github.com/pschatzmann/ESP32-A2DP
|
||
|
|
#include "AudioTools/AudioCodecs/CodecMP3Helix.h" // https://github.com/pschatzmann/codec-helix
|
||
|
|
//#include "AudioTools/AudioLibs/AudioBoardStream.h" // for SPI pins
|
||
|
|
|
||
|
|
File file;
|
||
|
|
MP3DecoderHelix mp3; // or change to MP3DecoderMAD
|
||
|
|
EncodedAudioStream decoder(&file, &mp3);
|
||
|
|
BluetoothA2DPSource a2dp_source;
|
||
|
|
const int chipSelect = SS; //PIN_AUDIO_KIT_SD_CARD_CS;
|
||
|
|
|
||
|
|
// callback used by A2DP to provide the sound data - usually len is 128 2 channel int16 frames
|
||
|
|
int32_t get_sound_data(uint8_t* data, int32_t size) {
|
||
|
|
int32_t result = decoder.readBytes((uint8_t*)data, size);
|
||
|
|
delay(1); // feed the dog
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Arduino Setup
|
||
|
|
void setup(void) {
|
||
|
|
Serial.begin(115200);
|
||
|
|
AudioToolsLogger.begin(Serial, AudioToolsLogLevel::Info);
|
||
|
|
|
||
|
|
// open file
|
||
|
|
//SPI.begin(PIN_AUDIO_KIT_SD_CARD_CLK, PIN_AUDIO_KIT_SD_CARD_MISO, PIN_AUDIO_KIT_SD_CARD_MOSI, PIN_AUDIO_KIT_SD_CARD_CS);
|
||
|
|
SD.begin(chipSelect);
|
||
|
|
file = SD.open("/test.mp3", FILE_READ);
|
||
|
|
if (!file) {
|
||
|
|
Serial.println("file failed");
|
||
|
|
stop();
|
||
|
|
}
|
||
|
|
|
||
|
|
// make sure we have enough space for the pcm data
|
||
|
|
decoder.transformationReader().resizeResultQueue(1024 * 8);
|
||
|
|
if (!decoder.begin()) {
|
||
|
|
Serial.println("decoder failed");
|
||
|
|
stop();
|
||
|
|
}
|
||
|
|
|
||
|
|
// start the bluetooth
|
||
|
|
Serial.println("starting A2DP...");
|
||
|
|
a2dp_source.set_data_callback(get_sound_data);
|
||
|
|
a2dp_source.start("LEXON MINO L");
|
||
|
|
}
|
||
|
|
|
||
|
|
// Arduino loop - repeated processing
|
||
|
|
void loop() {
|
||
|
|
delay(1000);
|
||
|
|
}
|