Neues Release 2.4.4

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?

Es sind ca. 40 mp3 Dateien in einem Ordner, ohne Unterordner.

Den Platformio Ordner hatte ich auch schon gelöscht.

Ich konnte den Fehler reproduzieren.

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.

1 „Gefällt mir“

Hab leider kaum Zeit und konnte nicht den ganzen Thread lesen. Folgende Fragen stelle ich mir:

  • hast du den NVS mal gelöscht (Abspielpositionen werden neuerdings in einem anderen Format gespeichert, hat bei mir auch zu Fehlverhalten geführt)
  • tritt das Problem nur auf in Playmode, bei denen die Abspielposition gespeichert wird?

Habe so gestartet und alles mitgeschrieben 214 Punkte, Auszug:

  1. NVS gelöscht

  2. Bei geschlossenem VSC .platformio gelöscht

  3. Espuino Projekt Ordner gelöscht

  4. VSC gestartet, Espuino entfernt, Neustart

  5. Download Espuino-master.zip von GitHub und entpacken

  6. Espuino-master Ordner in VSC öffnen

  7. platformio wird installiert

  8. VSC neu gestartet

  9. pioarduino wird installiert

  10. pioarduino: Configuring Project

  11. VSC neu gestartet

  12. Auswahl env:lolin_d32_pro_sdmmc_pe

  13. anpassen settings.h, wie im Post und speichern

  14. pioarduino:Build

  15. build Successfully created

  16. Verbinden Espuino mit PC

  17. pioarduino > Erase Flash and Upload

  18. Espuino startet

dann ging es los mit den RFIDs als Hörbuch anlernen und testen.

Nach 6 RFIDS und dauernder Wechsel zwischen den Hörbüchern, aktivierte ich die Optionen in der Weboberfläche.

Option aktiviert, durch wechseln der RFID, wenn kein crash, nächste Option.

Beim aktivieren von “Abspielposition bei RFID-Tag Wechsel merken”, crasht es beim Hörbuch wechsel.

Deaktiviere ich die Option, kann ich so oft wechsel wie ich will ohne crash, Hörbücher fangen allerdings immer von vorne an.

1 „Gefällt mir“

Ok, ja dann ist das vermutlich der Ansatzpunkt.

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…

Ich habe gerade zu weit gescrollt und mich gefragt, ob das in Zeile 1075 exakt das Gleiche ist. Sowas hatte ich ja kürzlich bereits gefixt.

Ich hab’s mal an beiden Stellen integriert:

Bisher nur in dev.

2 „Gefällt mir“

Mit den Änderungen in der AudioPlayer.ccp,

Funktioniert es mit aktivierter Option “Abspielposition bei RFID-Tag Wechsel merken” wieder mit dem Hörbuchwechsel ohne crash.

Die Abspielposition wird bei 14 von 24 Hörbücher gespeichert, bei 10 beginnt das Hörbuch von vorn.

Werd mal die mp3s kontrollieren.

Danke für eure Hilfe und Ausdauer

1 „Gefällt mir“

Wenn du weitere Infos zu dem Problem mit dem Speichern hast, bitte gerne mitteilen! Die Details helfen das zu fixen :slight_smile:

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…

1 „Gefällt mir“

In der Zuweisungsliste ist bei allen Hörbuch eingetragen.

Bei allen normaler Hörbuchmodus, kein Rekursiv Modus.

Es sind Ordner mit einer oder mehren mp3 Datei.

Unter den 10 die nicht die Abspielposition speichern sind:

5x Hörbuch | einzelne mp3 zugewiesen | in einem Ordner mit mehreren mp3 Dateien

4x Hörbuch | Ordner zugewiesen | Ordnerinhalt eine oder mehrer mp3 Dateien

1x Hörbuch | einzelne mp3 | im Root Verzeichnis

Bei den 10 fängt immer die mp3 von Vorne an, die auch beim Wechsel abgespielt wurde.

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…

1x ID3v2.3.0 > ALBUM | ARTIST | TITLE | YEAR | ohne Cover

3x ID3v2.3 > ALBUM | ARTIST | TITLE | YEAR | mit Cover

1x ID3v2.3 > ALBUM | ARTIST | DISCNUMBER | TITLE | YEAR | ohne Cover

1x ID3v1 > TITLE | TRACK | YEAR | ohne Cover

1x ID3v1 > TITLE | YEAR | ohne Cover

6x ID3v2.2 > COMMENT ITUNNORM | COMMENT ITUNSMPB | ENCODERSETTINGS | ohne Cover

1x ID3v1 > TITLE | TRACK | YEAR | ohne Cover

4x ohne ID3 | ohne Cover

Falls Du das Meintst.

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)

Das hier könnte der Fall sein:

Heißt: dort wo das nicht zutrift kann das Offset nicht gesetzt werden und die Datei startet von vorne.

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?

Das wars

Nach dem ich die mp3s mit MP3 Quality Modifier bearbeitet habe, wird jetzt auch bei der gespeicherten Abspielposition gestartet.

Vielen Dank.