Espressif Arduino Libraries für I2S Audio Ausgabe am built-in DAC

alecxs

Mitglied
28. Juni 2020
39
4
8
Für den ESP32 gibt es verschiedene Möglichkeiten eine MP3-Datei abzuspielen. Ich habe es mit der Arduino IDE und der ESP8266Audio Library versucht, bekomme aber kein Ton heraus.

Die ESP32-audioI2S Library ist mit dem NodeMCU ESP32s Dev Kit C V1 nicht kompatibel, da diese für Multikernprozessor vorgesehen ist.

Der Code zum Abspielen einer MP3-Datei von der SPIFFS Partition kompiliert zwar, aber außer der Sample Rate kommt auf dem Oszilloskop nichts an.

Die direkte Ausgabe eines Testtones über den built-in DAC funktioniert. Es muss also am I2S liegen.

Gibt es noch Alternativen für die Arduino IDE die ich noch ausprobieren kann?
 
Ich bin jetzt etwas weiter mit der ESP8266Audio Library. Die Ausgabe über den internen DAC erfolgt gemäß der Dokumentation mit AudioOutputI2S(0, 1)
C++:
out = new AudioOutputI2S(0, 1);

Lade ich das Sketch allein, läuft es auch und ich höre den Song. Sobald ich es aber in das Gesamtprojekt integriere gibt es Probleme mit Dateien die länger als 5 Sekunden spielen. Ich vermute es steht nicht genügend RAM zur Verfügung.
 
Ich habe nun das LittleFS statt dem SPIFFS Dateisystem verwendet, und die Stack Größe des Hintergrund-Tasks erhöht, jetzt läuft es.
C++:
TaskHandle_t mp3Task;

void playMP3Task(void *pvParameters) {
  mp3 = new AudioGeneratorMP3();
  mp3->begin(file, out);
  isMP3Playing = true;
  while (mp3->isRunning()) {
    if (!mp3->loop()) {
      mp3->stop();
      break;
    }
  }
  isMP3Playing = false;
  delete mp3;
  vTaskDelete(NULL);
}

void playMP3(const char *mp3File) {
  out = new AudioOutputI2S(0, 1);   // built-in DAC
//  out = new AudioOutputI2S();       // MAX98357A I2S
//  out->SetPinout(BCLK_PIN, WCLK_PIN, DOUT_PIN);
  out->SetGain(1.0);
  file = new AudioFileSourceLittleFS(mp3File);
  if (!isMP3Playing) {
    xTaskCreatePinnedToCore(
    playMP3Task,   // Task function.
    "MP3Task",     // name of task.
    6144,          // Stack size of task
    NULL,          // parameter of the task
    1,             // priority of the task
    &mp3Task,      // Task handle to keep track of created task
    1);            // pin task to core 1
  }
}
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)