Anfängerfrage - Unterschiede Abspielmodi Hörbuch/Hörspiel

Wenn Du eine normale Hörbuchkarte (z.B. für Reihe von Hörbüchern) mit einer von-bis-Hörbuchkarte kombinieren willst, ist die Frage, was beim Ende des Abspielens der von-bis-Karte passieren soll. Derzeit wird auf den Anfang dieser Karte zurückgestellt. Genauso ist aber möglich, auf den Gesamtanfang oder - wohl die beste Altetnative - auf den Anfang des nächsten Einzelhörbuchs zu setzen. Mal sehen, wann ich dazu komme, mir den Code nochmal dafür anzusehen…

Edit:
Jetzt kam ich dazu. Es gab noch ein paar Bugs. Nun sollte es passen.

Das Verhalten sollte nun so sein:

Wenn eine von-bis-Hörbuchkarte vollständig abgespielt wird, stoppt das Abspielen. Nochmaliges Drücken von Next ist dann ohne Funktion. Bei Auflegen einer normalen Hörbuchkarte für denselben Ordner fährt der TonUINO am nächsten noch nicht abgespielten Track fort.

Das Ganze kann man also z.B. für eine Hörbuchreihe nutzen, die man entweder von vorne bis hinten durchhören kann oder eben einzelne Hörbücher mit entsprechenden Karten direkt auswählt, oder aber man nutzt das z.B., um einzelne Kapitel eines Hörbuches anzuspringen, wobei jedes Kapitel eben aus mehreren Tracks bestehen kann und somit auch innerhalb eines Kapitels der Fortschritt gespeichert wird. Jedes Kapitel bekommt dann eine eigene von-bis-Hörbuch-Karte.

Dies sind die korrigierten Code-Änderungen:

Code-Änderungen (Anklicken zum Ausklappen)

Zeilen 566-581 ersetzen durch:

 if (myFolder->mode == 5 || myFolder->mode == 10) {
    if (currentTrack + 1 < firstTrack + numTracksInFolder) {
      currentTrack = currentTrack + 1;
      Serial.print(F("Hörbuch Modus ist aktiv -> nächster Track und "
                     "Fortschritt speichern"));
      Serial.println(currentTrack);
      mp3.playFolderTrack(myFolder->folder, currentTrack);
      // Fortschritt im EEPROM abspeichern
      EEPROM.update(myFolder->folder, currentTrack);
    } else {
      //      mp3.sleep();  // Je nach Modul kommt es nicht mehr zurück aus dem Sleep!
      // Fortschritt zurücksetzen (wenn vorhanden: auf das nächste Hörspiel im Ordner. sonst: ganz auf den Anfang)
	  if(currentTrack < mp3.getFolderTrackCount(myFolder->folder)) {
		  EEPROM.update(myFolder->folder, firstTrack + numTracksInFolder);
	  } else {
		  EEPROM.update(myFolder->folder, 1);
	  }
      setstandbyTimer();
    }
  }

Zeilen 615-624 ersetzen durch:

 if (myFolder->mode == 5 || myFolder->mode == 10) {
    Serial.println(F("Hörbuch Modus ist aktiv -> vorheriger Track und Fortschritt speichern"));
    if (currentTrack > firstTrack) {
      currentTrack = currentTrack - 1;
    }
    mp3.playFolderTrack(myFolder->folder, currentTrack);
    // Fortschritt im EEPROM abspeichern
    EEPROM.update(myFolder->folder, currentTrack);
  }

Hinter Zeile 930 einfügen:

 // Spezialmodus Von-Bis: Hörbuch: kompletten Ordner spielen und Fortschritt merken (nur für ein Hörbuch zur Zeit je Ordner)
  if (myFolder->mode == 10) {
    Serial.println(
      F("Spezialmodus Von-Bis: Hörbuch -> kompletten Ordner spielen und Fortschritt merken (nur für ein Hörbuch zur Zeit je Ordner)"));
    firstTrack = myFolder->special;
    numTracksInFolder = myFolder->special2;
	currentTrack = EEPROM.read(myFolder->folder);
	if(currentTrack < firstTrack || currentTrack >= firstTrack + numTracksInFolder) {
		currentTrack = firstTrack;
		Serial.println(F("Der gespeicherte Fortschritt stammt nicht von diesem Hörbuch. Starte am Anfang."));
	}
    mp3.playFolderTrack(myFolder->folder, currentTrack);
  }

Zeile 999 ersetzen durch:

if (myFolder->mode == 8 || myFolder->mode == 9 || myFolder->mode == 10) {

Zeile 1473 ersetzen durch:

theFolder->mode = voiceMenu(10, 310, 310, false, 0, 0, true);

Zeile 1490 ersetzen durch:

if (theFolder->mode == 7 || theFolder->mode == 8 || theFolder->mode == 9 || theFolder->mode == 10) {

Und nicht vergessen: Neue MP3-Datei für Folder.Menü erstellen und ablegen.

Wenn man auch die Möglichkeit haben möchte, mehrere Positionen (quasi Lesezeichen) innerhalb eines einzigen Ordners zu speichern, würde ich das auf eine andere Weise machen: Man könnte eine Modifier-Funktion für ein Lesezeichen programmieren, die sich so verhält: Wenn man eine solche Lesezeichenkarte auflegt während der TonUINO gerade etwas abspielt, wird die aktuelle Konfiguration von myCard inklusive der aktuellen Trackposition auf der Lesezeichenkarte gespeichert. Wenn gerade nichts abgespielt wird (weil noch keine Karte auflag oder weil das Abspielen gerade pausiert), wird die Konfiguration der Lesezeichenkarte übernommen und abgespielt. Das funktioniert dann auch gleich für alle Modi, nicht nur für den Hörbuchmodus. So kann man auch z.B. bei Albumkarten eine aktuelle Position (Track) speichern und später wieder dort fortsetzen. Das Lesezeichen ist dann eben eine physische Karte und es können so beliebig viele Lesezeichenkarten gleichzeitig angelegt werden.

6 „Gefällt mir“