Ordner wiederholen

Moin Leute,

Ich wollte Mal fragen ob es eine Möglichkeit gibt einen Ordner(Albummodus oder Hörbuchmodus) nach der letzten Datei von vorne beginnen zu lassen?

Ich hab in der Suche bisher nur @Thomas-Lehnert Always Queue gefunden(ich habe es zumindest so verstanden, dass eine "Playlist"in Schleife läuft), die scheint aber nicht mit dem gb320b Player zu laufen.

Gäbe es sonst eine Möglichkeit ähnlich der Single repeat Modifikations Karte für nen ganzen Ordner zu programmieren?

Hintergrund ist der: ich würde gerne für meine Frau und mich einen TonUino bauen der dazu dienen soll abends beim einschlafen Hörbücher abzuspielen. Da wir aber nicht immer vom 1. Kapitel anfangen wollen, bietet sich die fortschritt Speicher Funktion an. Nun wäre es unschön, wenn ich den TonUino wieder Manuel bedienen muss, weil Grade die letzten zwei Kapitel abgespielt wurden und ich noch nicht schlafe.

Stellt sich die Frage ob zwei Modifikationen gleichzeitig laufen können (falls OrdnerRepeat möglich ist muss dann ja die sleeptimer Modifikation ebenfalls aktiviert werden.)

LG Dennis

Du kannst relativ leicht anpassen, was passieren soll, wenn der letzte Track abgespielt wurde. Das wäre dann allerdings bei dem TonUINO bei dem Modus, bei dem du das anpasst, immer so.

Das Verhalten ist da für jeden Modus einzeln festgelegt. Beim else steht immer, was passieren soll, wenn der letzte Track gespielt wurde. Hier mal als Beispiel der Hörbuchmodus

Da wird 1 als Fortschritt gespeichert und der Standby-Timer gestartet. Du willst dann stattdessen den ersten Track wieder abspielen. Das soeht dann ganz ähnlich aus, wie das was nach jedem Track passiert. Du erhöhst den Track nur nicht um 1 sondern setzt ihn auf 1. Das müsste dann irgendwie so aussehen.

if (myFolder->mode == 5) {
    if (currentTrack != 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ück setzen
-      EEPROM.update(myFolder->folder, 1);
-      setstandbyTimer();
+      currentTrack = 1;
+      Serial.print(F("Hörbuch Modus ist aktiv -> erster Track und "
+                     "Fortschritt speichern"));
+      Serial.println(currentTrack);
+      mp3.playFolderTrack(myFolder->folder, currentTrack);
+      // Fortschritt im EEPROM abspeichern
+      EEPROM.update(myFolder->folder, currentTrack);
    }
  }
1 „Gefällt mir“

Hallo @ClausiusMaximus
Ich habe mir mal dahingehend gedanken gemacht. Man kann das über ein Modifier machen. Das besondere ist, dass dieses Modifier neben einem anderen Modifier parallel laufen kann, was normalerweise nicht möglich ist. Bei meiner Lösung, muss zuerst das EndlessPlayQueue Modifier gestartet werden und dann kann zusätzlich z.B.das Schlummermodus Modifier gestartet werden. Diese Reihenfolge ist wichtig. Machst du es anders herum, schaltet das EndlessPlayQueue Modifier den Schlummermodus wieder aus. Eine Besonderheit ist noch, dass das EndlessPlayQueue Modifier nur durch das Abschalten des Tonuino wieder deaktiviert wird. Aber in deiner Wunschverwendung wird der Tonuino ja durch den Schlummermodus ausgeschaltet. Dieses Modifier habe ich für den Albummodus, Albummodus-Spezial-Von-Bis, und den Hörbuchmodus eingebunden. Der Partymodus braucht das nicht, da er am Ende der Queue sowieso neu mischt und neu beginnt.

Hier die Codeabschnitte, die du Ändern, bzw. ergänzen musst. Das bezieht sich auf meinen Fork alwaysQueue. In einem anderen Fork müsste das ggf. angepasst werden.

Zuerst eine bool Variable in den Deklarationen der Variablen am Scetchanfang einfügen
bool EndlessPlay = false;

Dann die Abspielmodi wie folgt ergänzen, bzw. ändern,
Im Albummodus , so:

    case 2: //Album
    case 7: //Album-SpezialVonBis
//#ifdef Konsole
        Serial.print("idx: ");
        Serial.print(currentQueueIndex);
        Serial.print(" --> ");
//#endif
if((currentQueueIndex + Steps) < queueSize)                 // wenn Queueindex plus Sprung unter queueSize
currentQueueIndex = (currentQueueIndex + Steps);            // Weiterspringen in der Queue

    else                                                    // wenn Queueindex plus Sprung gleich oder größer queueSize
    {
     currentQueueIndex = (queueSize -1);                    // Gehe zum Ende der queue

     if(EndlessPlay)                                                // wenn EndlessPlay aktiviert
      {
        bStop = false ;                                             // kein Stop am Ende der Queue
        currentQueueIndex = (0);                                    // Index auf Anfang der Queue
      }
    else                                                            // EndlessPlay nicht aktiviert
        bStop = true;                                               // Stop am Ende der Queue
 //#ifdef Konsole
      Serial.println(currentQueueIndex);
      Serial.println(F(" - EoQ"));   
 //#endif
    }     
     
     Steps = 1;                                             // Rücksetzen der Sprungweite auf 1 für Einzelschritt
      break;
// --------------------------------------

Im Hörbuchmodus, so:

    case 5: //Hoerbuch
#ifdef Konsole
     if (ResetHB == true) Serial.println ("next Track und Wiederholung Epromupdate nach HB Reset gesperrt");
#endif
//#ifdef Konsole
        Serial.print("idx: ");
        Serial.print(currentQueueIndex);
        Serial.print(" --> ");
//#endif
     if (ResetHB == false)                                    // Wenn nxtTrk und update EEProm HB nicht gesperrt
     { 
      if (currentQueueIndex + Steps < queueSize)              // Wenn Sprung unter Queue Ende bleibt
      {
        currentQueueIndex = currentQueueIndex + Steps;        // Weitersprung in Queue
        if (currentQueueIndex + Steps >= queueSize)           // Wenn Sprung Queue Ende erreicht oder Überschreitet
        {
         currentQueueIndex = (queueSize - 1);                 // index auf Ende der Queue setzen
        }
#ifndef AiO
        EEPROM.update(myFolder->folder, queue[currentQueueIndex]);  // Fortschritt im EEPROM abspeichern
#endif
#ifdef AiO
        EEPROM_update(myFolder->folder, queue[currentQueueIndex]);  // Fortschritt im EEPROM abspeichern
#endif
#ifdef Konsole
        Serial.println(F("Sp.-Fortschr."));
#endif
        Steps = 1;                                                  // Rücksetzen der Sprungweite auf 1 für Einzelschritt
        break;
      }
      else                                                          // Ende der Queue
      {
#ifndef AiO
         EEPROM.update(myFolder->folder, 1);                        // Fortschritt am Ende HB autom.zurücksetzen (Classik)
#endif
#ifdef AiO
        EEPROM_update(myFolder->folder, 1);                         // Fortschritt am Ende HB autom.zurücksetzen (AiO)
#endif
#ifdef Konsole
        Serial.println(F("Hörb->Anfang"));
#endif

     if(EndlessPlay)                                                // wenn EndlessPlay aktiviert
      {
        bStop = false ;                                             // kein Stop am Ende der Queue
        currentQueueIndex = (0);                                    // Index auf Anfang der Queue
      }
    else                                                            // EndlessPlay nicht aktiviert
        bStop = true;                                               // Stop am Ende der Queue
        
        Steps = 1;                                                  // Rücksetzen der Sprungweite auf 1 für Einzelschritt
        break;
      }
// --------------------------------------
    default:
      return; // do nothing
   }
   ResetHB = false;                                                // Rücksetzen Marker Hörbuch reset, Aufheben der Sperre
 }

Dann noch das Modifier. Ich habe bei mir der einfachheit halber, das single Repeat Modifier durch das das EndlessPlayQueue Modifier ersetzt. Du kannst natürlich auch ein eigenes Modifier dafür anlegen, musst dann nur das Adminmenü entsprechend erweitern. Hier der Code dafür:

//**** Modkarte ******** Titel endlos wiederholen *************************************
ändern in
//*********Modkarte******** EndlessPlayQueue **************************************

//**** Modkarte ******** EndlessPlayQueue *************************************

class RepeatSingleModifier: public Modifier
{
public:
  RepeatSingleModifier()
  {
#ifdef Konsole
      Serial.println(F("EndlessPlay-Queue"));
#endif

  EndlessPlay = true;
  }
};

Das Modifier macht nichts weiter als den Flag für EndlessPlay zu setzen.

Ich habs getestet, läuft soweit zur zufriedenheit.

Moin @Thomas-Lehnert,

bin grade am Ausprobieren, scheine aber irgendwie ein Problem zu haben.

folgendes hab ich gemacht

    case 5: //Hoerbuch
#ifdef Konsole
     if (ResetHB == true) Serial.println ("next Track und Wiederholung Epromupdate nach HB Reset gesperrt");
#endif
//#ifdef Konsole
        Serial.print("idx: ");
        Serial.print(currentQueueIndex);
        Serial.print(" --> ");
//#endif
     if (ResetHB == false)                                    // Wenn nxtTrk und update EEProm HB nicht gesperrt
     { 
      if (currentQueueIndex + Steps < queueSize)              // Wenn Sprung unter Queue Ende bleibt
      {
        currentQueueIndex = currentQueueIndex + Steps;        // Weitersprung in Queue
        if (currentQueueIndex + Steps >= queueSize)           // Wenn Sprung Queue Ende erreicht oder Überschreitet
        {
         currentQueueIndex = (queueSize - 1);                 // index auf Ende der Queue setzen
        }
#ifndef AiO
        EEPROM.update(myFolder->folder, queue[currentQueueIndex]);  // Fortschritt im EEPROM abspeichern
#endif
#ifdef AiO
        EEPROM_update(myFolder->folder, queue[currentQueueIndex]);  // Fortschritt im EEPROM abspeichern
#endif
#ifdef Konsole
        Serial.println(F("Sp.-Fortschr."));
#endif
        Steps = 1;                                                  // Rücksetzen der Sprungweite auf 1 für Einzelschritt
        break;
      }
      else                                                          // Ende der Queue
      {
#ifndef AiO
         EEPROM.update(myFolder->folder, 1);                        // Fortschritt am Ende HB autom.zurücksetzen (Classik)
#endif
#ifdef AiO
        EEPROM_update(myFolder->folder, 1);                         // Fortschritt am Ende HB autom.zurücksetzen (AiO)
#endif
#ifdef Konsole
        Serial.println(F("Hörb->Anfang"));
#endif

    if(EndlessPlay)
    {
      bStop = false;
      currentQueueIndex =(0);
    }
        bStop = true;                                               // Stop am Ende der Queue
        Steps = 1;                                                  // Rücksetzen der Sprungweite auf 1 für Einzelschritt
        break;
      }
// --------------------------------------
    default:
      return; // do nothing
   }
   ResetHB = false;                                                // Rücksetzen Marker Hörbuch reset, Aufheben der Sperre
 }

und die ModKarte sieht so aus

//**** Modkarte ******** EndlessPlayQueue *************************************
// Nach Auflegen der Modifikationskarte "ordner endlos wiederholen"
// wird der aktuelle Ordner endlos wiederholt.

class RepeatSingleModifier: public Modifier
// --------------------------------------------------------------------
{
public:
  RepeatSingleModifier()
  {
#ifdef Konsole
      Serial.println(F("EndlessPlay-Queue"));
#endif

  EndlessPlay = true;
  }
};

Handle next und previews hab ich rausgelöscht weil er mir Fehler beim Kompilieren angezeigt hatte.

und so sieht der Serielle monitor aus

20:59:39.279 -> 
20:59:39.279 -> ** TONUINO **
20:59:39.279 -> 
20:59:39.279 -> ** VERSION THOMAS LEHNERT ** 2022-01-17 **
20:59:39.279 -> 
20:59:39.279 -> Based on TonUINO V.2.1
20:59:39.279 -> created by Thorsten Voß and licensed under GNU/GPL.
20:59:39.279 -> https://tonuino.de.
20:59:39.279 -> 
20:59:39.279 -> ** 5 Tasten **
20:59:39.279 -> 
20:59:39.279 -> load mySettings
20:59:39.279 -> Vers.: 2
20:59:39.279 -> Max Vol. : 25
20:59:39.279 -> Min Vol. : 2
20:59:39.279 -> Init Vol. : 15
20:59:39.279 -> EQ :  1
20:59:39.279 -> StBy Timer: 5 min
20:59:39.279 -> Skip Buttons: 1
20:59:39.279 -> Adm.Menu: unlocked
20:59:39.279 ->  
20:59:39.279 -> -- ShortCuts --
20:59:39.279 -> SC-0, Play-Taste: Letzte Karte
20:59:39.279 -> SC-1, Weiter-Taste: 0
20:59:39.279 -> SC-2, Zurück-Taste: 0
20:59:39.325 -> SC-3, Lauter-Taste : 0
20:59:39.325 -> SC-4, Leiser-Taste : 0
20:59:39.325 -> SC-5, Begrüßung : 0
20:59:39.325 -> 
20:59:42.631 -> Ordner auf SD: 20
20:59:42.631 -> 
20:59:42.677 -> mfrc522-> RxGain_avg
20:59:42.677 -> Firmware Version: 0x92 = v2.0
20:59:42.951 -> StdBy ON: 5 min
20:59:42.951 -> 
20:59:43.962 -> Play Sct: 5
20:59:43.962 -> Shortcut n.belegt!
20:59:51.904 -> Card UID: 93 40 9D 16
20:59:51.904 -> PICC type: MIFARE 1KB
20:59:51.904 -> Authenticating Classic using key A...
20:59:51.904 -> Reading data from block 4 ...
20:59:51.904 -> Data on Card :
20:59:51.904 ->  13 37 B3 47 02 00 06 00 00 00 00 00 00 00 00 00
20:59:51.904 -> 
20:59:51.904 -> EndlessPlay-Queue
20:59:59.957 -> Card UID: 83 49 8A 16
20:59:59.957 -> PICC type: MIFARE 1KB
20:59:59.957 -> Authenticating Classic using key A...
20:59:59.957 -> Reading data from block 4 ...
20:59:59.957 -> Data on Card :
20:59:59.957 ->  13 37 B3 47 02 04 05 00 00 00 00 00 00 00 00 00
20:59:59.957 -> 
20:59:59.957 -> 4
20:59:59.957 -> 4
20:59:59.957 -> Play Folder: 4
20:59:59.957 -> 
20:59:59.957 -> StdBy OFF
21:00:00.004 -> Hörb.modus
21:00:00.004 -> 16 Dateien in Ordner 4
21:00:00.004 -> 1 von: 16
21:00:00.004 -> Play Q-idx: 1, Trk: 2
21:00:00.004 -> 
21:00:00.004 -> StdBy OFF
21:00:00.096 -> last Card -> EEPROM !
21:00:15.068 -> Lauter -> 16
21:00:16.868 -> 
21:00:16.868 -> Hörb.modus -> nxtTrk 
21:00:16.868 -> idx: 1 --> Sp.-Fortschr.
21:00:16.868 -> 2 von: 16
21:00:16.868 -> Play Q-idx: 2, Trk: 3
21:00:16.868 -> 
21:00:16.868 -> StdBy OFF
21:00:21.927 -> SD-K OPFin -> nxtTr
21:00:22.022 -> 
21:00:22.022 -> Hörb.modus -> nxtTrk 
21:00:22.022 -> idx: 2 --> Sp.-Fortschr.
21:00:22.022 -> 3 von: 16
21:00:22.022 -> Play Q-idx: 3, Trk: 4
21:00:22.022 -> 
21:00:22.022 -> StdBy OFF
21:00:22.022 -> SD-K OPFin -> nxtTr
21:00:33.150 -> SD-K OPFin -> nxtTr
21:00:33.289 -> 
21:00:33.289 -> Hörb.modus -> nxtTrk 
21:00:33.289 -> idx: 3 --> Sp.-Fortschr.
21:00:33.289 -> 4 von: 16
21:00:33.289 -> Play Q-idx: 4, Trk: 5
21:00:33.289 -> 
21:00:33.289 -> StdBy OFF
21:00:33.289 -> SD-K OPFin -> nxtTr
21:00:35.218 -> SD-K OPFin -> nxtTr
21:00:35.312 -> 
21:00:35.312 -> Hörb.modus -> nxtTrk 
21:00:35.312 -> idx: 4 --> Sp.-Fortschr.
21:00:35.312 -> 5 von: 16
21:00:35.312 -> Play Q-idx: 5, Trk: 6
21:00:35.312 -> 
21:00:35.312 -> StdBy OFF
21:00:35.312 -> SD-K OPFin -> nxtTr
21:00:41.339 -> SD-K OPFin -> nxtTr
21:00:41.432 -> 
21:00:41.432 -> Hörb.modus -> nxtTrk 
21:00:41.432 -> idx: 5 --> Sp.-Fortschr.
21:00:41.432 -> 6 von: 16
21:00:41.432 -> Play Q-idx: 6, Trk: 7
21:00:41.432 -> 
21:00:41.432 -> StdBy OFF
21:00:41.432 -> SD-K OPFin -> nxtTr
21:00:48.148 -> SD-K OPFin -> nxtTr
21:00:48.288 -> 
21:00:48.288 -> Hörb.modus -> nxtTrk 
21:00:48.288 -> idx: 6 --> Sp.-Fortschr.
21:00:48.288 -> 7 von: 16
21:00:48.288 -> Play Q-idx: 7, Trk: 8
21:00:48.288 -> 
21:00:48.288 -> StdBy OFF
21:00:48.288 -> SD-K OPFin -> nxtTr
21:00:51.889 -> SD-K OPFin -> nxtTr
21:00:51.980 -> 
21:00:51.980 -> Hörb.modus -> nxtTrk 
21:00:51.980 -> idx: 7 --> Sp.-Fortschr.
21:00:51.980 -> 8 von: 16
21:00:51.980 -> Play Q-idx: 8, Trk: 9
21:00:51.980 -> 
21:00:51.980 -> StdBy OFF
21:00:51.980 -> SD-K OPFin -> nxtTr
21:00:53.406 -> SD-K OPFin -> nxtTr
21:00:53.499 -> 
21:00:53.499 -> Hörb.modus -> nxtTrk 
21:00:53.499 -> idx: 8 --> Sp.-Fortschr.
21:00:53.499 -> 9 von: 16
21:00:53.499 -> Play Q-idx: 9, Trk: 10
21:00:53.545 -> 
21:00:53.545 -> StdBy OFF
21:00:53.545 -> SD-K OPFin -> nxtTr
21:01:00.115 -> SD-K OPFin -> nxtTr
21:01:00.207 -> 
21:01:00.207 -> Hörb.modus -> nxtTrk 
21:01:00.207 -> idx: 9 --> Sp.-Fortschr.
21:01:00.252 -> 10 von: 16
21:01:00.252 -> Play Q-idx: 10, Trk: 11
21:01:00.252 -> 
21:01:00.252 -> StdBy OFF
21:01:00.252 -> SD-K OPFin -> nxtTr
21:01:08.934 -> SD-K OPFin -> nxtTr
21:01:09.025 -> 
21:01:09.025 -> Hörb.modus -> nxtTrk 
21:01:09.025 -> idx: 10 --> Sp.-Fortschr.
21:01:09.025 -> 11 von: 16
21:01:09.025 -> Play Q-idx: 11, Trk: 12
21:01:09.025 -> 
21:01:09.025 -> StdBy OFF
21:01:09.025 -> SD-K OPFin -> nxtTr
21:01:16.614 -> SD-K OPFin -> nxtTr
21:01:16.707 -> 
21:01:16.707 -> Hörb.modus -> nxtTrk 
21:01:16.707 -> idx: 11 --> Sp.-Fortschr.
21:01:16.707 -> 12 von: 16
21:01:16.707 -> Play Q-idx: 12, Trk: 13
21:01:16.707 -> 
21:01:16.707 -> StdBy OFF
21:01:16.707 -> SD-K OPFin -> nxtTr
21:01:20.665 -> SD-K OPFin -> nxtTr
21:01:20.804 -> 
21:01:20.804 -> Hörb.modus -> nxtTrk 
21:01:20.804 -> idx: 12 --> Sp.-Fortschr.
21:01:20.804 -> 13 von: 16
21:01:20.804 -> Play Q-idx: 13, Trk: 14
21:01:20.804 -> 
21:01:20.804 -> StdBy OFF
21:01:20.804 -> SD-K OPFin -> nxtTr
21:01:28.256 -> SD-K OPFin -> nxtTr
21:01:28.349 -> 
21:01:28.349 -> Hörb.modus -> nxtTrk 
21:01:28.349 -> idx: 13 --> Sp.-Fortschr.
21:01:28.395 -> 14 von: 16
21:01:28.395 -> Play Q-idx: 14, Trk: 15
21:01:28.395 -> 
21:01:28.395 -> StdBy OFF
21:01:28.395 -> SD-K OPFin -> nxtTr
21:01:44.802 -> SD-K OPFin -> nxtTr
21:01:44.895 -> 
21:01:44.895 -> Hörb.modus -> nxtTrk 
21:01:44.895 -> idx: 14 --> Sp.-Fortschr.
21:01:44.895 -> 15 von: 16
21:01:44.895 -> Play Q-idx: 15, Trk: 16
21:01:44.895 -> 
21:01:44.895 -> StdBy OFF
21:01:44.895 -> SD-K OPFin -> nxtTr
21:01:58.636 -> SD-K OPFin -> nxtTr
21:01:58.727 -> 
21:01:58.727 -> Hörb.modus -> nxtTrk 
21:01:58.727 -> idx: 15 --> Hörb->Anfang
21:01:58.773 -> 1 von: 16
21:01:58.773 -> Play Q-idx: 1, Trk: 2
21:01:58.773 -> 
21:01:58.773 -> StdBy OFF
21:01:58.773 -> Waiting for Stop
21:01:58.773 -> Stop
21:02:00.285 -> StdBy ON: 5 min
21:02:00.285 -> 
21:02:00.285 -> SD-K OPFin -> nxtTr

Poblem ist, dass der ordner quasi mit track 2 Startet nach durchlauf, aber auch erst dann, wenn ich auf die Next taste drücke :thinking:

Edit: hab grade nochmal den Sketch gelöscht und dann die Konfiguration neu eingefügt und aufgespielt. nun Klappt es ^^

nach dem der Modifier erfolgreich läuft fehlt mir jetzt nur noch ein Signal, dass er aktiviert ist.

Folgendes hab ich Probiert:

class RepeatSingleModifier: public Modifier
// --------------------------------------------------------------------
{
public:
  RepeatSingleModifier()
  {
#ifdef Konsole
      Serial.println(F("EndlessPlay-Queue"));
#endif
    

  EndlessPlay = true;
  { //delay(500);
      mp3.playAdvertisement(306);                     // advert-306 - Titel in Endlosschleife
      //delay(500);
    }
    uint8_t getActive();

  }
    

};

Leider ohne Erfolg

21:49:35.228 -> Shortcut n.belegt!
21:49:35.274 -> Konsole reduziert
21:49:35.412 -> 7- adv error
21:49:41.338 -> 7- adv error

nun bin ich mit meinen Copy Paste Fähigkeiten am Ende ^^

Ich bedanke mich aber schonmal herzlichst für die Mühe. Bin Froh das es so klappt. :smiling_face:

Erst mal zu deinem Problem, dass die Queue nicht neu Startet.
Du hast in deinem Code ein else vor bstop=true vergessen. Dadurch wird die Aufforderung zum Neustart der Queue wieder aufgehoben, was ja eigentlich bei aktivem Modifier nicht gewollt ist. Warum er bei Track 2 anfängt versuche ich noch herauszufinden. Bei mir beginnt er mit Track 1, also so wie gewünscht. Eventuell hat das mit dem EndOfTrack event zu tun, das bei vielen Playern 2x ausgegeben wird und bei anderen nur 1x. Ich gehe der Sache nach. Melde mich, wenn ich was rausgefunden habe.

     if(EndlessPlay)                                                // wenn EndlessPlay aktiviert
      {
        bStop = false ;                                             // kein Stop am Ende der Queue
        currentQueueIndex = (0);                                    // Index auf Anfang der Queue
      }
    else                                                            // EndlessPlay nicht aktiviert
        bStop = true;                                               // Stop am Ende der Queue
        
        Steps = 1;                                                  // Rücksetzen der Sprungweite auf 1 für Einzelschritt
        break;

Musst du rausnehmen, sonst wird beim Auflegen der Schlummerkarte, der EndlessMode wieder deaktiviert.
Als Akustische Meldung kannst du nur eine Datei nehmen, die sich im mp3 ordner befindet, weil adverts nur bei laufender Wiedergabe abgespeilt werden können. Oder du musst dich des Tricks bedienen, Vor abspielen des Adverts die Wiedergabe zu starten, den advert abspielen und die Wiedergabe wieder stoppen. Oder du machst eine abfrageIf(isPlaying()) mp3.playAdvertisement(306);, spielst das Advert ab, und dann else mp3.playMp3FolderTrack(XXX); Für XXX musst du dir einen passenden Sound in den mp3Folder kopieren oder erzeugen und die Filenummer 0XXX vergeben. Das ganze fügst du anstelle deines Codeteiles

 { //delay(500);
      mp3.playAdvertisement(306);                     // advert-306 - Titel in Endlosschleife
      //delay(500);
    }

ein. Die geschweiften Klammern kanst du weglassen.

Hier noch eine Sache, die du ausserden machen kannst. Um die Restriktionen im Schlummermodus für EndlessPlay aufzuheben kannst du im Modifier Schlummermodus folgende Änderungen machen. Hier als Beispiel für die Vor und Zurücktasten. Gleiches Vorgehen bei den anderen Einschränkungen. Das bewirkt, dass der Schlummermodus ohne Endlessplay so funktioniert wie gehabt. Bei endlessPlay aber voll bedienbar wird, also alle Tasten und Kartenleser sind nicht gesperrt.

 virtual bool handleNextButton()
    {
      if(EndlessPlay)        // Bei EndlessPlayQueue keine Sperre
      return false;
      else
      {
      LockNext();             // Next Taste sperren
      return true;
      }
    }
    // ---------------------------------------------------------------
    virtual bool handlePreviousButton()
    {
      if(EndlessPlay)        // Bei EndlessPlayQueue keine Sperre
      return false;
      else
      {
      LockPrevious();         // Zurück Taste sperren
      return true;
      }
    }
    // ---------------------------------------------------------------

 virtual bool handleNextButton()
    {
      if(EndlessPlay)        // Bei EndlessPlayQueue keine Sperre
      return false;
      else
      {
      LockNext();             // Next Taste sperren
      return true;
      }
    }
    // ---------------------------------------------------------------
    virtual bool handlePreviousButton()
    {
      if(EndlessPlay)        // Bei EndlessPlayQueue keine Sperre
      return false;
      else
      {
      LockPrevious();         // Zurück Taste sperren
      return true;
      }
    }
    // ---------------------------------------------------------------

Wenn du das getActive() im modifier Schlummermodus so wie unten gezeigt ergänzt, kannst du endlessPlay gemeinsam mit dem Schlummermodus durch wiederholtes auflegen der Schlummerkarte auch wieder ausschalten ohne den Tonuino ausschalten zu müssen.

    uint8_t getActive()
    {
#ifdef Konsole
      modEnd ();                             // Deaktivieren durch erneutes Auflegen dieser
                                             // oder einer anderen Modifikationskarte
#endif
      EndlessPlay = false;                   // Bei deaktivierung wird ggF. EndlessPlay mit zurück gesetzt
      return 1;
    }
};`

Ich teste heute Abend noch Mal durch, danke schonmal.

Falls die Errormeldungen bei dieser zeile erfolgen, liegt das daran, dass ich bei mir die Ausgabe in der Konsole für die Sperrung als void Lock…() ausgelagert habe. Wenn das bei dir nicht so ist, die ursprünglichen Codezeilen an dieser Stelle belassen.

Habe versehentlich dan falschen Modus geändert, deshalb letzter Post gelöscht. Funktionierte so nicht.

So, ich habe jetzt nochmal mit verschiedenen Playern getestet. Zum Testen verwendet:
MHETLIVE 2024K-24SS,
YX5200 24SS,
JI AA19HF 8328-94,
JI AA19HF 2128-94,
Diese Player geben 2 EoT Events bei normalen Tracks und kein EoT bei Advert aus.

Dann den DFROBOT mit dem LISP3 Chip
Dieser Player gibt 2 EoT Events bei normalen Tracks und 1 EoT Event bei Advert aus.

Diese Player funktionieren ohne Probleme mit EndlessplayQueue. Für den DFROBOT wurde zusätzlich die Codeanpassung für die Adverts aktiviert.
Die Codeanpassung für Adverts hat aber keinen Einfluss auf EndlessplayQueue.

Ein Player der Generation 16SS steht mir leider nicht zur Verfügung, sonst hätte ich das auch getestet.

hi hab es soweit geschafft, das mir zumindest beim Auflegen der Modkarte was erzählt wird allerdings nich wie die Mp3 die ich dafür vorgesehen hatte(0256 im Ordner mp3 „kompletten Ordner Wiederholen“) sondern die stimme sagt: „174“

class RepeatSingleModifier: public Modifier
// --------------------------------------------------------------------
{
public:
  RepeatSingleModifier()
  {
#ifdef Konsole
      Serial.println(F("EndlessPlay-Queue"));
#endif
     
  EndlessPlay = true;
  //delay(500);
  mp3.playMp3FolderTrack(0256);                     // mp3-0804 - Ordner in Endlosschleife
  //delay(500);

  }
  

};```

so sieht das ganze zur Zeit aus.

Fehler gefunden habe von

EndlessPlay = true; //delay(500); mp3.playMp3FolderTrack(0256); // mp3-0804 - Ordner in Endlosschleife //delay(500);

in das geändert
EndlessPlay = true; //delay(500); mp3.playMp3FolderTrack(256); // mp3-0256 - Ordner in Endlosschleife //delay(500);

nun läufts

Ja, obwohl die Dateien im advert oder mp3 Ordner 4 Stellig sein müssen, ist der Aufruf im code nur 3 Stellig. Spielt der Tonuino denn nun die wiederholung von Track 1 an ab?

das Problem konnte ich ja gestern schon Lösen in dem ich den Sketch gelöscht, neu aufgespielt und dann nochmal die Änderung vorgenommen hab.

Ah,Ja, Das hab ich dann wohl nicht so verstanden. Schön, dass es nun läuft.

So der sketch läuft einwandfrei, so wie ich mir das vorgestellt hab.
Hörbuch spielt ab, nach dem Letzten Track wird der 1. gestartet und nach Ablauf des SleepTimers schaltet sich die Box aus.

Danke auch noch mal für das erweitern, dass man die Vor/Zurücktaste und Karte im EndlessPlay noch benutzen kann, hab ich soweit für Lauter und Leiser noch ergänzt.

auf dem JI AA20HF j616-94 läuft das sehr gut
auf dem MH-ETLive 2024K-24SS (Mp3-TF-16P V3.0) Läuft es auch, Allerdings mit relativ Langer boot-Zeit und einem leisen knacken zwischen den Titeln.

für den GD320B müsste man für den Hörbuchmodus Wahrscheinlich die von - bis Funktion einbauen
zumindest funktioniert der auf @marco-117 s Affenbox-Fork bei mir.

Wenn du nun noch die Abfragen if(isPlaying()) und das zugehörige else einbaust, und deine Ansage auch in den advertordner kopierst (kann da auch eine andere Nummer haben) und dann als advert aufrufst, bekommst du auch eine Ansage, wenn die Wiedergabe läuft und die EndlessPlay Karte aufgelegt wird. Anschließend wird die Wiedergabe automatisch fortgesetzt.

  EndlessPlay = true;
  //delay(500);
If(isPlaying()) mp3.playAdvertisement(xxx);     // Abspielen wenn Wiedergabe läuft
else mp3.playMp3FolderTrack(256);              // Abspielen wenn keine Wiedergabe
  //delay(500);


top der Mann :+1: :+1: :+1: :+1: :+1:
gesagt getan;)