Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Does not play sequential mp3/flac files from directory #740

Open
ddprog opened this issue May 8, 2024 · 1 comment
Open

Does not play sequential mp3/flac files from directory #740

ddprog opened this issue May 8, 2024 · 1 comment
Labels

Comments

@ddprog
Copy link

ddprog commented May 8, 2024

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
Copy link

github-actions bot commented Jun 8, 2024

This issue is stale because it has been open for 30 days with no activity.

@github-actions github-actions bot added the stale label Jun 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant