ESP32-audioI2S
ESP32-audioI2S copied to clipboard
Does not play sequential mp3/flac files from directory
The example does not work on mp3/flac files on an ESP32-S3-N16R8 with PSRAM, but it works fine on an ESP32 (mp3 only). Plays one file and "audioHeader reading timeout". I can't figure out what the reason is.
Configuration for ESP32-S3-N16R8:
platformio.ini
platform = espressif32
board = esp32-s3-devkitc-1-n16r8v
framework = arduino
upload_port = COM9
monitor_port = COM9
upload_speed = 921600
monitor_speed = 115200
lib_deps =
https://github.com/schreibfaul1/ESP32-audioI2S/
main.cpp
#include "Arduino.h"
#include "Audio.h"
#include "FS.h"
#include "SD.h"
#include "WiFi.h"
#include <vector>
// Digital I/O used
#define SD_CS 10
#define SPI_MOSI 11
#define SPI_MISO 13
#define SPI_SCK 12
#define I2S_DOUT 18
#define I2S_BCLK 4
#define I2S_LRC 5
String ssid = "***";
String password = "***";
void listDir(fs::FS &fs, const char *dirname, uint8_t levels); // proto
std::vector<char *> v_audioContent;
Audio audio;
const char audioDir[] = "/flac";
void listDir(fs::FS &fs, const char *dirname, uint8_t levels)
{
Serial.printf("Listing directory: %s\n", dirname);
File root = fs.open(dirname);
if (!root)
{
Serial.println("Failed to open directory");
return;
}
if (!root.isDirectory())
{
Serial.println("Not a directory");
return;
}
File file = root.openNextFile();
while (file)
{
if (file.isDirectory())
{
Serial.print(" DIR : ");
Serial.println(file.name());
if (levels)
{
listDir(fs, file.path(), levels - 1);
}
}
else
{
Serial.print(" FILE: ");
Serial.print(file.name());
Serial.print(" SIZE: ");
Serial.println(file.size());
v_audioContent.insert(v_audioContent.begin(), strdup(file.path()));
}
file = root.openNextFile();
}
Serial.printf("num files %i", v_audioContent.size());
Serial.println("");
root.close();
file.close();
}
void vector_clear_and_shrink(vector<char *> &vec)
{
uint size = vec.size();
for (int i = 0; i < size; i++)
{
if (vec[i])
{
free(vec[i]);
vec[i] = NULL;
}
}
vec.clear();
vec.shrink_to_fit();
}
// optional
void audio_info(const char *info)
{
Serial.print("info ");
Serial.println(info);
}
void audio_id3data(const char *info)
{ // id3 metadata
Serial.print("id3data ");
Serial.println(info);
}
void audio_eof_mp3(const char *info)
{ // end of file
Serial.print("eof_mp3 ");
Serial.println(info);
if (v_audioContent.size() == 0)
{
vector_clear_and_shrink(v_audioContent); // free memory
return;
}
const char *s = (const char *)v_audioContent[v_audioContent.size() - 1];
Serial.printf("playing %s\n", s);
audio.connecttoFS(SD, s);
v_audioContent.pop_back();
}
void setup()
{
pinMode(SD_CS, OUTPUT);
digitalWrite(SD_CS, HIGH);
SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI);
SPI.setFrequency(1000000);
Serial.begin(115200);
SD.begin(SD_CS);
WiFi.disconnect();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid.c_str(), password.c_str());
while (WiFi.status() != WL_CONNECTED)
delay(1500);
audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
audio.setVolume(21); // default 0...21
listDir(SD, audioDir, 1);
if (v_audioContent.size() > 0)
{
const char *s = (const char *)v_audioContent[v_audioContent.size() - 1];
Serial.printf("playing %s\n", s);
audio.connecttoFS(SD, s);
v_audioContent.pop_back();
}
}
void loop()
{
audio.loop();
}
log file
ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0x1 (POWERON),boot:0x2b (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce3808,len:0x44c
load:0x403c9700,len:0xbd8
load:0x403cc700,len:0x2a80
entry 0x403c98d0
Listing directory: /flac
FILE: 02-John_O'Callaghan___Betsie_Larkin_-_Save_This_Moment_(Gareth_Emery_remix).flac SIZE: 60334536
FILE: 03-Kyau___Albert_-_Be_There_4_U_(Mat_Zo_remix).flac SIZE: 58474850
FILE: 04-Menno_De_Jong_-_Turtle_Paradise_(original_mix).flac SIZE: 65916183
FILE: 05-W_W_vs_Wezz_Devall_-_Phantom_(original_mix).flac SIZE: 45157943
FILE: 06-Jochen_Miller_-_Troucid_(original_mix).flac SIZE: 54484847
FILE: 07-Ferry_Corsten_-_Feel_It_(radio_edit).flac SIZE: 26545918
FILE: 08-Lange_Presents_LNG_-_Harmony_Will_Kick_You_In_The_Ass_(Lange_mix).flac SIZE: 51053818
FILE: 09-Timur_Shafiev_-_Thank_You_(feat_Dasha_-_Dallaz_Project_remix).flac SIZE: 67713251
FILE: 10-Orjan_Nilsen_-_Mjuzik_(original_mix).flac SIZE: 59545703
FILE: 11-Ronski_Speed_Presents_Sun_Decade_-_U_Got_Me_(feat_Emma_Lock_-_club_mix).flac SIZE: 37668791
FILE: 12-Arty_-_The_Wall_(feat_Tania_Zygar_-_radio_edit).flac SIZE: 32183389
FILE: 13-Right_Face_-_Deep_Impression_(Adam_Nickey_remix).flac SIZE: 64598077
FILE: 14-Juventa_-_Dionysia_(Skytech_remix).flac SIZE: 58282307
FILE: 15-Impulsive_Drive_-_Blue_Skies_(Bjorn_Akesson_remix).flac SIZE: 63369679
FILE: 16-Galen_Behr_vs_Hydroid_-_Carabella_(Galen_Behr_vs_Orjan_Nilsen_remix_-_classic_bonus_track).flac SIZE: 59560626
num files 15
playing /flac/02-John_O'Callaghan___Betsie_Larkin_-_Save_This_Moment_(Gareth_Emery_remix).flac
info PSRAM found, inputBufferSize: 638965 bytes
info buffers freed, free Heap: 249392 bytes
info Reading file: "/flac/02-John_O'Callaghan___Betsie_Larkin_-_Save_This_Moment_(Gareth_Emery_remix).flac"
info FLACDecoder has been initialized, free Heap: 244960 bytes , free stack 5584 DWORDs
info Content-Length: 60334536
info FLAC maxBlockSize: 4096
info FLAC maxFrameSize: 14856
info FLAC sampleRate: 44100
info FLAC numChannels: 2
info FLAC bitsPerSample: 16
info total samples in stream: 20988289
info audio file duration: 475 seconds
id3data VENDOR_STRING: reference libFLAC 1.2.1 20070917
id3data Album=A State Of Trance Radio Top 15: May 2011
id3data Artist=John O'Callaghan & Betsie Larkin
id3data Genre=Trance
id3data Title=Save This Moment (Gareth Emery Remix)
id3data DATE=2011
id3data TRACKNUMBER=02
info Audio-Length: 60325386
info stream ready
info syncword found at pos 0
info Channels: 2
info SampleRate: 44100
info BitsPerSample: 16
info BitRate: 93798
info Closing audio file "02-John_O'Callaghan___Betsie_Larkin_-_Save_This_Moment_(Gareth_Emery_remix).flac"
eof_mp3 02-John_O'Callaghan___Betsie_Larkin_-_Save_This_Moment_(Gareth_Emery_remix).flac
playing /flac/03-Kyau___Albert_-_Be_There_4_U_(Mat_Zo_remix).flac
info buffers freed, free Heap: 249284 bytes
info Reading file: "/flac/03-Kyau___Albert_-_Be_There_4_U_(Mat_Zo_remix).flac"
info FLACDecoder has been initialized, free Heap: 244880 bytes , free stack 5488 DWORDs
info End of file "02-John_O'Callaghan___Betsie_Larkin_-_Save_This_Moment_(Gareth_Emery_remix).flac"
[481291][E][Audio.cpp:3096] processLocalFile(): audioHeader reading timeout