Speichern der letzten Position im Hörspielmodus

Hat man als Abspielmodus „Hörbuch“ gewählt, so gibt es verschiedene Aktionen, die dazu führen, dass die letzte Position gespeichert wird. Welche das sind, das ist hier beschrieben: 📗 Die Playmodi des ESPuino.

Es gibt zwei Aktionen, die ich bewusst dort ausgenommen habe:

  • Wechsel in den Deepsleep
  • Das Auflegen einer neuen Karte

Nun, warum habe ich diese Aktionen ausgenommen?

  • Man lernt beispielsweise Karten an. Ich für meinen Teil teste diese im Anschluss, indem ich eine solche halt einfach mal auflege. Was ich dabei jedoch nicht möchte, ist eine Position zu hinterlassen, die nicht 0 ist. Weil ich möchte ja, dass mein Nachwuchs das Hörspiel von Anfang an hören kann. Speichere ich jedoch die Position beim Auflegen einer neuen Karte und auch, wenn ich in den Deepsleep wechsele, dann habe ich im Modus Hörbuch gar keine Chance mehr, dort eine 0 stehen zu haben. Außer man schaltet den ESPuino direkt aus. Nur wenn der ESPuino mit Akku betrieben wird, dann kann man das in einem fertigen Gehäuse ja gar nicht. Alternative wäre Reset, aber dann bootet der ESPuino neu; also bei mehreren Karten wird sowas sicher schnell nervig.
  • Ich wollte einfach generell die Möglichkeit schaffen, dass man sich aussuchen kann, ob vor dem Deepsleep die Position gespeichert wird. Aussuchen kann man sich das, indem man einfach vorher eine Pause drückt.

Grundsätzlich könnte man das natürlich auch konfigurierbar machen. Beim Wechsel der Karte halte ich das aus o.g. Gründen für nicht sinnig, aber beim Deepsleep könnte ich schon der Argumentation folgen, dass man sagt, dass das automatisch zu gehen hat.

Daher wollte ich einfach mal rumhören, wie ihr das so seht.

Beim Deepsleep finde ich es auf jeden Fall sinnvoll, die Position zu speichern. Kann man aber so oder so sehen…

Zum Karten-Testen:

Wenn man ein Hörbuch nach dem Testen von vorne abspielt (mit „Titel zurück“) und dann direkt auf Pause geht, hätte man es ja quasi „genullt“, oder? Im Prinzip ist es eine Abwägung zwischen Benutzerfreundlichkeit beim Testen von Karten und Benutzerfreundlichkeit im Betrieb.
Ich fände zumindest eine Config-Option, beim Wechsel der Karte die Position zu speichern, gut.

Die Sache mit dem Deepsleep habe ich als Option eingeführt: SAVE_PLAYPOS_BEFORE_SHUTDOWN.

Testet mal, ob das so klappt. Ich habe irgendwie gerade ein USB-Problem an meinem MAC. Sämtliche Develboards werden irgendwie nicht mehr erkannt. So kann ich das nicht gescheit debuggen, aber ich denke es müsste passen so.

So, ich war in Spendierlaune und habe dir das zweite Feature auch in Form von SAVE_PLAYPOS_WHEN_RFID_CHANGE eingetragen. Dabei habe ich noch einen Bug entdeckt, der mir öfter schon aufgefallen war, bei dem mir jedoch unklar war, woher er kommt :slight_smile:.

Ich kann beide Argumente gut nachvollziehen, also dass beim Anlernen und anschließenden Testen nicht direkt die Position gespeichert werden sollte, aber finde es auch intuitiver wenn die Hörspiel-Position gespeichert wird egal wie der ESPuino ausgeschaltet bzw. das Hörspiel gestoppt oder unterbrochen wird (Karte wechseln). Daher schlage ich eine Kombination aus beiden vor: 1 Min nach dem Anlernen findet keine Speicherung statt, ansonsten schon. Ich denke das würde die usability für beide Positionen zusammenführen, denn das direkt nach dem Anlernen das Hörspiel auch angehört werden soll und das nur weniger als eine Minute und diese Position dann auch tatsächlich gespeichert werden soll, ist doch recht unwahrscheinlich.

1 „Gefällt mir“

Super Idee :slightly_smiling_face:

Gut, wäre auch kein Problem: Setze ich beim Anlernen einen Timestamp und prüfe, dass der mind. 60000ms vergangen ist.

Noch eine leicht abgewandelte Idee:
Vielleicht speichert man den Fortschritt nur, wenn mindestens 1 Minute (oder 30 Sekunden) gehört wurde. Dann kann man auch ausprobieren, ob die Karte nach dem Import eines Backups funktioniert, ohne dass der Fortschritt gespeichert wird.

2 „Gefällt mir“

Habe ich heute bemerkt …
Man kann ja theoretisch ein komplettes Audiobook in einem File ablegen . Das würde ich so machen wenn ich ein Hörbuch selbst aufnehme , das erspart mir das Aufteilen in einzelne Files. Durch die Speicherung der Position sollte das ja funktionieren . Im Moment ist es aber so dass während des Abspielen des 1. Files ein Rücksprung an den Anfang nicht möglich ist , erst wenn File 2 abgespielt wird geht es .

Kannst du mir nochmal beschreiben, wie ich das Problem provozieren kann? So ad hoc kann ich das nicht nachstellen, dass man nicht an den Anfang springen kann, wenn man im ersten Titel ist. Habe ich jetzt mit und ohne Hörbuch getestet.

Hi @biologist
Heute hatte ich etwas Zeit für Espuino , neue Version von heute installiert und das (mein) Problem nochmals ausprobiert . Es war mir im Dezember aufgefallen als ich vor meiner Reise nach Kanada die Boxen für meine Enkel final fertiggestellt und die SD-Karten neu bespielt habe. Dabei habe ich alle Karten ausprobiert und angespielt . Damit alles wieder am Anfang startet habe ich mittels CMD_FIRSTTRACK alles auf Anfang setzen wollen . Das geht aber erst ab Track 2 , bei Track 1 kommt der Text " Es wird bereits der erste Track gespielt." und anschließend nicht auf den Anfang gesprungen und somit auch nicht die Anfangsposition abgespeichert .
VG

Das werde ich in Kürze patchen. Ich hatte es demletzt schon versucht:

Das hatte nur unerwünschte Begleiterscheinungen, wie mir dann erst nach dem Commit aufgefallen sind. Hat hiermit zu tun: Hörbuch (endlos) - Kleiner Bug?.

Vor einiger Zeit kam die Frage nach dem Verhältnis zwischen dem Dateizeiger und den dekodierten Daten auf. Da auf Vorrat in den Audiobuffer geschrieben wird kann der Dateizeiger den tatsachlich Gehörtem einiges vorraus sein. Um die wirkliche Position zu bestimmen kann so vorgegangen werden:

audio.connecttoFS(SD_MMC, filename); // anspielen des Songs
char* lastconnectedFile = strdup(fileName); // Dateinamen merken
uint32_t lastPosition = audio.stopSong; // Song anhalten und Position merken
// ggf.lastconnectedFile und lastPosition im nvs speichern um dann später:
audio.connecttoFS(lastconnectedFile, lastPosition); // genau an der Stelle weiterzumachen

das funktioniert mit allen Audiodateientypen die auf der SD Karte gespeichert sind (m4a. mp3, wav und flac)
Gruß Wolle

Ging das vorher auch schon oder hast du das neu eingeführt?
@Christian hat den Punkt ja demletzt als Bug bei dir eingestellt und dann haben wir das letztlich gemäß deines damaligen Vorschlages gefixt:

Die Funktion ist neu. Das habe ich aufgrund der wie ich finde berechtigten Anfrage eingebaut. Dann ist mein Vorschlag sehr schnell umgesetzt worden. Was anderes habe ich in der Lib auch nicht gemacht :slight_smile:

2 „Gefällt mir“