Partymodus - Shuffel ohne Endlosschleife

Ich habe für den AiO-TonUINO meiner Tochter eine Karte im Partymodus mit drei Liedern erstellt.
Wenn diese alle gespielt sind, fängt er standardmäßig wieder von vorne an. Wenn man 20 Lieder hat, fällt ist das ja nicht schlimm. Bei drei Liedern aber doch nervig.

Jetzt habe ich den Code ab Zeile 546 von

  if (myFolder->mode == 3 || myFolder->mode == 9) {
    if (currentTrack != numTracksInFolder - firstTrack + 1) {
      Serial.print(F("Party -> weiter in der Queue "));
      currentTrack++;
    } else {
      Serial.println(F("Ende der Queue -> beginne von vorne"));
      currentTrack = 1;
      //// Wenn am Ende der Queue neu gemischt werden soll bitte die Zeilen wieder aktivieren
      //     Serial.println(F("Ende der Queue -> mische neu"));
      //     shuffleQueue();
    }

in

    if (currentTrack != numTracksInFolder - firstTrack + 1) {
      Serial.print(F("Party -> weiter in der Queue "));
      currentTrack++;
    } else {
      Serial.println(F("Ende der Queue-> Shuffel beendet"));
    }

geändert, weil ich dachte, dass durch currentTrack = 1; die Warteschlange wieder auf Anfang gestellt wird. Er spielt dann aber trotzdem weiter, wenn auch nicht endlos. Außerdem wird der StandbyTimer nicht aktiviert.

Die Ausgabe sieht wie folgt aus:

== playFolder()
=== disablestandby()
3 Dateien in Ordner 15
Party Modus -> Ordner in zufälliger Reihenfolge wiedergeben
=== volumeDown()
1
13821
=== nextTrack()
Party -> weiter in der Queue 3
31513
=== nextTrack()
Party -> weiter in der Queue 1
44574
=== nextTrack()
Ende der Queue/Warteschlange -> Shuffel beendet
1
919
=== nextTrack()
Ende der Queue/Warteschlange -> Shuffel beendet
1
919
919
919

Was muss ich ändern, damit jedes Lied nur ein Mal gespielt wird?

Der ganze Abschnitt zum Partymodus sieht ja so aus

da siehst du ganz unten das mp3.playFolderTrack. Das startet die Wiedergabe und muss deshalb bei dir dann mit in die if-Abfrage. Zum starten des standby-Timers brauchst du ein setstandbyTimer();

if (myFolder->mode == 3 || myFolder->mode == 9) {
    if (currentTrack != numTracksInFolder - firstTrack + 1) {
      Serial.print(F("Party -> weiter in der Queue "));
      currentTrack++;
+    Serial.println(queue[currentTrack - 1]);
+    mp3.playFolderTrack(myFolder->folder, queue[currentTrack - 1]);
    } else {
-      Serial.println(F("Ende der Queue -> beginne von vorne"));
-      currentTrack = 1;
+      Serial.println(F("Ende der Queue -> Aufhören"));
+      setstandbyTimer();
-      //// Wenn am Ende der Queue neu gemischt werden soll bitte die Zeilen wieder aktivieren
-      //     Serial.println(F("Ende der Queue -> mische neu"));
-      //     shuffleQueue();
    }
-    Serial.println(queue[currentTrack - 1]);
-    mp3.playFolderTrack(myFolder->folder, queue[currentTrack - 1]);
  }
1 „Gefällt mir“

Wow. Das ging schnell.
Habe es gleich getestet. Funktioniert super.

== playFolder()
=== disablestandby()
3 Dateien in Ordner 15
Party Modus -> Ordner in zufälliger Reihenfolge wiedergeben
42116
=== nextTrack()
Party -> weiter in der Queue 2
3300
=== nextTrack()
Party -> weiter in der Queue 1
919
=== nextTrack()
Ende der Queue/Warteschlange -> Shuffel beendet
=== setstandbyTimer()
476997
919

Was bedeuten eigentlich die Zahlen 476997, 919 usw?

476997 gehört zu dem „setstandbyTimer“.
Solch ein Timer funktioniert indem bei dem Befehl „starte Timer“ der nano auf seine Laufzeit (in Millisekunden) schaut und dort 5 Minuten *60 Sekunden *1000ms drauf rechnet und sich diese Zahl als variable sleepAtMillis merkt.
Dann vergleicht er regelmäßig ob die aktuelle Laufzeit größer als diese Variable ist, denn dann schaltet er aus.

476997 ist der Inhalt dieser variable, also bei knapp 8 Minuten Laufzeit hätte sich dein tonuino allein ausgehalten.

Die 919 konnte ich gerade nicht sicher zuordnen.

Das andere sind Zufallszahlen oder globale Tracknummern, die die Position im Speicher auf der SD-Karte angeben. Einige Player senden das Signal, dass sie einen Track zu ende gespielt haben 2 mal, die Zahlen sind der Output zu dem Mechanismus um das Abzufangen.

1 „Gefällt mir“