Последовательное воспроизведение MP3 файлов (библиотека ESP8266Audio)

Никак не могу заставить проигрывать файлы MP3 последовательно, может кто нибудь делал такое?
Пишет Ошибка открытия 'rickroll.mp3' Ошибка открытия 'output.mp3' Ошибка открытия 'harpsi-cs.mp3' Воспроизведение с SD-карты завершено.

#include <Arduino.h>
#include "AudioFileSourceSD.h"
#include "AudioOutputI2S.h"
#include "AudioGeneratorMP3.h"
File dir;
AudioFileSourceSD *source = NULL;
AudioOutputI2S *output = NULL;
AudioGeneratorMP3 *decoder = NULL;

void setup() {
  Serial.begin(115200);
  Serial.println();
  delay(1000);

  audioLogger = &Serial;
  source = new AudioFileSourceSD();
  output = new AudioOutputI2S();
  output->SetPinout(26, 25, 19);
  output->SetGain( 0.2 );
  decoder = new AudioGeneratorMP3();
  SPI.begin(14, 2, 15, 13);
  SD.begin(13, SPI, 40000000);
  dir = SD.open("/");
}

void loop() {
  if ((decoder) && (decoder->isRunning())) {
    if (!decoder->loop()) decoder->stop();
  } else {
    File file = dir.openNextFile();
    if (file) {
      if (String(file.name()).endsWith(".mp3")) {
        source->close();
        if (source->open(file.name())) {
          Serial.printf_P(PSTR("Воспроизведение '%s' с SD-карты...\n"), file.name());
          decoder->begin(source, output);
        } else {
          Serial.printf_P(PSTR("Ошибка открытия '%s'\n"), file.name());
        }
      }
    } else {
      Serial.println(F("Воспроизведение с SD-карты завершено.\n"));
      delay(1000);
    }
  }
}



В строке 34 вы пытаетесь открыть файл, уже открытый в строке 30 - потому и ошибка

Спасибо за ответ!
Это нужно прочитать имя следующего файла , потом этот файл закрыть?

Посмотрите в примерах библиотеки - может можно прочитать имя файла, не открывая его? - это было бы логично

В лооп я взял код из примера из библиотеки.
Но не получается запустить.

Попробуйте для начала вставить между 33 и 34 строкой

file.close();

Если он это сделает, то в следующей строке не сможет получить имя файла, так как закроет его.
Мне вот интересно - зачем в 33 строке закрывать то, чего еще не открыто?
Ну и имя (путь к файлу) можно в строковую переменную «загнать» попробовать.

Если поставить эту строку перезагрузка идёт есп32.

«Что и требовалось доказать» )))

Для esp32 перед названием файла стоит косая черточка, а здесь в названии нет, может эту чёрточку вписать?

Косая черта перед именем означает, что записан полный путь к файлу от корневой директории. Отсутствие черты означает, что путь читается от текущей папки

Это вообще сути сейчас не играет.

Оказывается играет! Спасибо за помощь, все таки победил!

#include <Arduino.h>
#include "AudioFileSourceSD.h"
#include "AudioOutputI2S.h"
#include "AudioGeneratorMP3.h"
#include "driver/i2s.h"
#include <SD.h>
File dir;
AudioFileSourceSD *source = NULL;
AudioOutputI2S *output = NULL;
AudioGeneratorMP3 *decoder = NULL;
File file;
void setup() {
  Serial.begin(115200);
  Serial.println();
  delay(1000);
pinMode(13, OUTPUT);
  audioLogger = &Serial;
  source = new AudioFileSourceSD();
  output = new AudioOutputI2S();
  output->SetPinout(26, 25, 19);
  output->SetGain( 0.2 );
  decoder = new AudioGeneratorMP3();
  SPI.begin(14, 2, 15, 13);
  SD.begin(13, SPI, 40000000);
  dir = SD.open("/");
}

 void loop() {
  if ((decoder) && (decoder->isRunning())) {
    if (!decoder->loop()) decoder->stop();
  } else {
    File file = dir.openNextFile();
    String Filename = String("/")+String(file.name());
    if (file) {
      if (String(file.name()).endsWith(".mp3")) {
        source->close();
        if (source->open(Filename.c_str())) {
          Serial.printf_P(PSTR("Воспроизведение '%s' с SD-карты...\n"), Filename.c_str());
          decoder->begin(source, output);
        } else {
          Serial.printf_P(PSTR("Ошибка открытия '%s'\n"), Filename.c_str());
        }
      }
    } else {
      Serial.println(F("Воспроизведение с SD-карты завершено.\n"));
      delay(1000);
    }
  }
}

Удалить 11 строку File file;

О как ))

Первоначально выложенный вариант подойдёт для esp8266.