From 9891b64fd8b0d7627898b8dfb06c5ca0c3ff290f Mon Sep 17 00:00:00 2001 From: Phil Schatzmann Date: Thu, 29 Apr 2021 21:22:20 +0200 Subject: [PATCH] mp3 support --- examples/README.md | 1 + examples/file_mp3-a2dp/file_mp3-a2dp.ino | 53 +++++++++--------------- 2 files changed, 20 insertions(+), 34 deletions(-) diff --git a/examples/README.md b/examples/README.md index 9c121f742..b9c1ad1b3 100644 --- a/examples/README.md +++ b/examples/README.md @@ -5,5 +5,6 @@ - [adc-serial](adc-serial) - Stream Analog input to Serial - [file_raw-a2dp](file_raw-a2dp) - Stream Row File from SD card to A2DP Bluetooth - [file_raw-serial](file_raw-serial) - Stream Raw File from SD card to Serial +- [file_mp3-a2dp](file_mp3-a2dp) - Stream MP3 File from SD card to A2DP Bluetooth using the ESP8266Audio library - [i2s-a2dp](i2s-a2dp) - Stream I2S Input to A2DP Bluetooth - [i2s-serial](i2s-serial) - Stream I2S Input to Serial \ No newline at end of file diff --git a/examples/file_mp3-a2dp/file_mp3-a2dp.ino b/examples/file_mp3-a2dp/file_mp3-a2dp.ino index 174e7e9dd..18f1aa7b9 100644 --- a/examples/file_mp3-a2dp/file_mp3-a2dp.ino +++ b/examples/file_mp3-a2dp/file_mp3-a2dp.ino @@ -1,7 +1,6 @@ #include #include -#include "AudioFileSourceSPIFFS.h" -#include "AudioFileSourceID3.h" +#include "AudioFileSourceSD.h" #include "AudioGeneratorMP3.h" #include "AudioOutputWithCallback.h" #include "BluetoothA2DPSource.h" @@ -10,55 +9,41 @@ using namespace sound_tools; const int sd_ss_pin = 5; -String fileName = ""; +const char* fileName = "/audio.mp3"; BluetoothA2DPSource a2dp_source; -AudioFileSourceSPIFFS *file; -AudioFileSourceID3 *id3; +AudioFileSourceSD *file; AudioGeneratorMP3 *mp3; AudioOutputWithCallback *out; // callback used by A2DP to provide the sound data int32_t get_sound_data(Channels* data, int32_t len) { - return out.read(data, len); + return out == nullptr ? 0 : out->read(data, len); } -// finds a mp3 file -bool findMp3File() { - File dir, root = SPIFFS.open("/"); - while ((dir = root.openNextFile())) { - if (String(dir.name()).endsWith(".mp3")) { - if (file->open(dir.name())) { - fileName = String(dir.name()); - break; - } - } - dir = root.openNextFile(); - } - return fileName.length() > 0; -} // Arduino Setup void setup(void) { Serial.begin(115200); audioLogger = &Serial; - // start the bluetooth - Serial.println("starting A2DP..."); - a2dp_source.start("MyMusic", get_sound_data); - // Setup Audio - SPIFFS.begin(sd_ss_pin); - file = new AudioFileSourceSPIFFS(); + file = new AudioFileSourceSD(); mp3 = new AudioGeneratorMP3(); - out = new AudioOutputWithCallback(1024,5); + out = new AudioOutputWithCallback(512,5); - // Find first MP3 file in SPIFF and play it - if (findMp3File()) { - id3 = new AudioFileSourceID3(file); - mp3->begin(id3, out); - Serial.printf("Playback of '%s' begins...\n", fileName.c_str()); + // Open MP3 file and play it + SD.begin(sd_ss_pin); + if (file->open(fileName)) { + + // start the bluetooth + Serial.println("starting A2DP..."); + a2dp_source.start("MyMusic", get_sound_data); + + // start to play the file + mp3->begin(file, out); + Serial.printf("Playback of '%s' begins...\n", fileName); } else { - Serial.println("Can't find .mp3 file in SPIFFS"); + Serial.println("Can't find .mp3 file"); } } @@ -68,6 +53,6 @@ void loop() { if (!mp3->loop()) mp3->stop(); } else { Serial.println("MP3 done"); - delay(1000); + delay(10000); } } \ No newline at end of file