mp3 support

This commit is contained in:
Phil Schatzmann 2021-04-29 21:22:20 +02:00
parent 4e50204744
commit 9891b64fd8
2 changed files with 20 additions and 34 deletions

View File

@ -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

View File

@ -1,7 +1,6 @@
#include <SPI.h>
#include <SD.h>
#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);
}
}