Du musst nur .platformio in deinem Home-Ordner löschen, während VSC geschlossen ist. Danach wird Platformio neu eingerichtet und alles neu geladen. Kann ein bisschen dauern, bis das dann alles fertig ist.
Zum Rest: Ich hab ehrlich gesagt keinen Überblick, wie ich das genau nachstellen soll. Vielleicht musst du mal eine Schritt-für-Schritt-Anleitungen geben, wie du das repetitiv nachstellen kannst.
Was ich auch noch nicht verstanden habe: Reden wir von einem klassischen Hörspiel oder nutzt du irgendwas von den neuen, rekursiven Modi?
Wenn man in Allgemein > Optionen > “Abspielposition bei RFID-Tag Wechsel merken” aktiviert und und bei laufendem Hörbuch1 eine neue RFID Hörbuch2 auflegt, bleibt nach 25 sec alles hängen.
Nach Neustart über die Weboberfläche, Spielt das Hörbuch1 weiter ab.
Deaktiviert man “Abspielposition bei RFID-Tag Wechsel merken” wieder und macht einen Neustart, läuft Espuino ohne crash beim Hörbuch wechsel.
Das war der entscheidende Hinweis … Danke!
In Audioplayer.cpp muss in Zeile 1027 noch der Call AudioPlayer_Loop(); mit rein. Also mit in die While-Loop. Was sonst aktuell passiert, ist dass er endlos in der While-Loop hängt und dann halt nach ca. 20 s der Buffer aus geht… @biologist: baust du die Zeile mit ein?
Dennoch wird glaub beim Rekursiven abspielen noch nicht immer sauber die Position wieder angewendet. Da muss man nochmal separat drauf schauen. Könnte aber auch nur ein Spezialfall sein, der hier komisch behandelt wird, wenn Bestimmte nicht-unterstützte Dateien in Einzelnen Ordnern vorhanden sind…
Wenn du weitere Infos zu dem Problem mit dem Speichern hast, bitte gerne mitteilen! Die Details helfen das zu fixen …
Wenn es wieder von Vorne anfängt, fängt es dann nur bei der letzten Datei von vorne an, oder ganz von vorne?
Siehst du in der Zuweisungsliste auch wirklich den Hörbuch-Modus?
Bei den Hörbüchern die nicht klappen: verwendest du dort den Rekursiven Modus oder den “normalen” Hörbuchmodus und sind es einzelne Dateien oder Ordner oder mehrere Ordner?
Wenn das Problem direkt an einzelnen Dateien oder Ordnern hängt und andere funktionieren, gerne die Unterschiede mitteilen, vielleicht findet sich dann ein Hinweis.
Je nachdem könnte es auch noch ein Problem in der Audio-Lib sein oder nicht…
Wie sehen die Tags von den Dateien aus, die nicht funktionieren?
Könnte vermutlich ein Kompatibilitätsproblem mit der Offset-Funktion der Audiolib sein, dass diese das Offset je nach Typ nicht direkt beim Öffnen anwenden kann…
Bei den mp3, bei denen die Abspielposition nicht hergestellt werden kann, was geben da die Logs aus? Kann man in den betroffenen mp3 springen? (z.B. über die webui)
N [1134088] RFID-Karte erkannt: 47-06-c6-92
I [1134093] RFID-Karte empfangen: 071006198146
I [1134114] Kommando: Pause
I [1134115] Titel pausiert bei Position: 643 (3973)
I [1134116] Schreibe ‚#/Professor Globus/2024_Rätselhafte Pflanze.mp3#643#3#0‘ in NVS für RFID-Card-ID 037079061020 mit Abspielmodus 3 und letzter Track 0
I [1134126] #/Professor Globus/2024_Rätselhafte Pflanze.mp3#643#3#0
N [1134243] Modus: Webstream
N [1134249] Neue Playlist mit 1 Titel(n) empfangen
D [1134250] Free heap: 132692
N [1134378] ‚http://stream.laut.fm/kinderwelle‘ wird abgespielt (1 von 1)
N [1134650] no cover image for webstream
N [1216342] RFID-Karte erkannt: 25-4f-3d-14
I [1216347] RFID-Karte empfangen: 037079061020
D [1216360] Freier Speicher: 107168 Bytes
N [1216361] Playlist-Generierung mit Rekursionstiefe: 0
N [1216373] Modus: Hoerspiel
I [1216374] Sorting files using case-insensitive natural sorting
N [1216387] Neue Playlist mit 1 Titel(n) empfangen
D [1216388] Free heap: 132612
N [1216396] Titel wird abgespielt ab Position 643
N [1216430] ‚/Professor Globus/2024_Rätselhafte Pflanze.mp3‘ wird abgespielt (1 von 1)
D [1216498] no cover image for SD-card audio
Hörbuch fängt wieder von Vorne an.
Ich schau mal ob ich ein Programm zum checken der mp3s finde
Ein Workaround im Code wäre z.B. dieser Code ab Zeile 784 in AudioPlayer.cpp (als Ersatz für das alte if().
if (gPlayProperties.startAtFilePos > 0) {
Log_Printf(LOGLEVEL_NOTICE, trackStartatPos, gPlayProperties.startAtFilePos);
audioReturnCode
= audio->connecttoFS(gFSystem, gPlayProperties.playlist->at(gPlayProperties.currentTrackNumber), gPlayProperties.startAtFilePos);
uint32_t current_pos = audio->getAudioCurrentTime();
// Handle start at file position for audiobooks that don't support the bitrate metadata properly
while (current_pos < gPlayProperties.startAtFilePos) {
audio->loop();
vTaskDelay(portTICK_PERIOD_MS * 5u);
current_pos = audio->getAudioCurrentTime();
if (current_pos > 0) {
audio->setAudioPlayTime(gPlayProperties.startAtFilePos);
}
}
gPlayProperties.startAtFilePos = 0;
} else {
audioReturnCode
= audio->connecttoFS(gFSystem, gPlayProperties.playlist->at(gPlayProperties.currentTrackNumber));
}
Das umgeht den Prozess, in dem es wartet bis die erste Sekunde abgespielt wurde und setzt dann die Position.
Aber eigentlich sollte das Handling meiner Meinung nach in die Audio-Lib. @Wolle : wenn die Datei keine Tags usw. hat und somit das Offset nicht angewendet werden kann beim laden der Datei (oder automatisch 0 wird), könntest du es bei dir einbauen, dass dann zuerst ein kleines bisschen gelesen wird und dann das Offset gesetzt wird sobald eine grobe Bitrate geschätzt werden kann?