Anzahl der Tracks wird erst nach mehreren Versuchen geladen

Hallo Liebe TonUINO Community,

Ich bin gerade dabei meinen ersten TonUINO zu bauen und komme leider bei einem Problem nicht weiter. Leider konnte ich auch im Internet bisher keine Lösung finden. Vielleicht hat jemand von euch ja eine Idee.

Beim Abspielen eines Albums wird die Anzahl der Tracks scheinbar immer erst nach ein paar Versuchen neu geladen.

Ich habe zum Testen eine SD-Karte die etwa folgende Struktur aufweist:

  • mp3 (mit heruntergeladenen Inhalten)
  • advert (mit heruntergeladenen Inhalten)
  • 01
    • 001.mp3
    • 002.mp3
    • 003.mp3
    • 004.mp3
    • 005.mp3
    • 006.mp3
    • 007.mp3
  • 02
    • 001.mp3
    • 002.mp3
    • 003.mp3
    • 004.mp3
    • 005.mp3

Wenn ich nun Beispielsweise Ordner 01 und dann Ordner 02 abspiele wird für Ordner 02 ausgegeben, dass es 7 Tracks gibt. Wenn ich vorher im Admin-menü war werden für das nächste Abspielen eines Ordners sogar 332 Dateien (anzahl des mp3 Verzeichnisses) angegeben…
Es sieht aus als würde die Track-Anzahl irgendwie gecached und erst nach ein bis zwei Versuchen wird sie dann korrekt geladen.

Ich habe mir den Code mal genauer angeschaut und wie es aussieht kommt der Wert direkt vom DFPlayer:

numTracksInFolder = mp3.getFolderTrackCount(myFolder->folder);

Müsste also eigentlich immer aktuell sein. Hat der DFPlayer irgendwie selbst einen Cache?

Hier noch eine Beispielausgabe mit Kommentaren (//…)
Ich spiele hier einmal Ordner 01 ab und dann drei mal Ordner 02

 _____         _____ _____ _____ _____
|_   _|___ ___|  |  |     |   | |     |
  | | | . |   |  |  |-   -| | | |  |  |
  |_| |___|_|_|_____|_____|_|___|_____|

TonUINO Version 2.1
created by Thorsten Voß and licensed under GNU/GPL.
Information and contribution at https://tonuino.de.

=== loadSettingsFromFlash()
Version: 2
Maximal Volume: 25
Minimal Volume: 5
Initial Volume: 15
EQ: 1
Locked: 0
Sleep Timer: 0
Inverted Volume Buttons: 1
Admin Menu locked: 0
Admin Menu Pin: 1111
=== setstandbyTimer()
0
Firmware Version: 0x92 = v2.0
=== playShortCut()
3
Shortcut not configured!
Card UID: E3 33 EE A7
PICC type: MIFARE 1KB
Authenticating Classic using key A...
Reading data from block 4 ...
Data on Card :
 13 37 B3 47 02 01 02 09 DA 00 00 00 00 00 00 00

1
1
== playFolder()
=== disablestandby()
5 Dateien in Ordner 1 // Hier ist der erste Fehler. der Ordner 01 hat 7 Dateien
Album Modus -> kompletten Ordner wiedergeben
Card UID: 13 E0 92 08
PICC type: MIFARE 1KB
Authenticating Classic using key A...
Reading data from block 4 ...
Data on Card :
 13 37 B3 47 02 02 01 09 DA 00 00 00 00 00 00 00

2
2
== playFolder()
=== disablestandby()
7 Dateien in Ordner 2  // Nun sind die 7 Dateien von Ordner 01 geladen, nun wären aber 5 richtig..
// es wird Track 06 abgespielt, den es gar nicht gibt. Daher gibt es keinen Ton..
Hörspielmodus -> zufälligen Track wiedergeben
6
Card UID: 13 E0 92 08
PICC type: MIFARE 1KB
Authenticating Classic using key A...
Reading data from block 4 ...
Data on Card :
 13 37 B3 47 02 02 01 09 DA 00 00 00 00 00 00 00

2
2
== playFolder()
=== disablestandby()
7 Dateien in Ordner 2  // Immer noch falsche Anzahl
Hörspielmodus -> zufälligen Track wiedergeben
1
Card UID: 13 E0 92 08
PICC type: MIFARE 1KB
Authenticating Classic using key A...
PCD_Authenticate() failed: Error in communication.
// RFID-Karte war vermutlich kurz weg und wieder da..
Card UID: 13 E0 92 08
PICC type: MIFARE 1KB
Authenticating Classic using key A...
Reading data from block 4 ...
Data on Card :
 13 37 B3 47 02 02 01 09 DA 00 00 00 00 00 00 00

2
2
== playFolder()
=== disablestandby()
5 Dateien in Ordner 2 // Nun ist die korrekte Anzahl geladen
Hörspielmodus -> zufälligen Track wiedergeben
5

Ein zweites Beispiel (Intro gekürzt)

  • Admin Menü
  • Abbruch
  • Ordner 1 abspielen
  • Ordner 1 erneut abspielen
=== adminMenu()
=== voiceMenu() (12 Options)
553
552
Card UID: E3 33 EE A7
PICC type: MIFARE 1KB
Authenticating Classic using key A...
Reading data from block 4 ...
Data on Card :
 13 37 B3 47 02 01 02 09 DA 00 00 00 00 00 00 00

1
1
== playFolder()
=== disablestandby()
332 Dateien in Ordner 1
Album Modus -> kompletten Ordner wiedergeben
Card UID: E3 33 EE A7
PICC type: MIFARE 1KB
Authenticating Classic using key A...
Reading data from block 4 ...
Data on Card :
 13 37 B3 47 02 01 02 09 DA 00 00 00 00 00 00 00

1
1
== playFolder()
=== disablestandby()
7 Dateien in Ordner 1
Album Modus -> kompletten Ordner wiedergeben
1
=== nextTrack()
Albummodus ist aktiv -> nächster Track: 2

Ich habe bisher folgendes versucht:

  • verschiedene Versionen von DFMiniMp3
  • SD Karte komplett shredden, formatieren (FAT32), neu bespielen
  • SD Karte mit fatsort sortieren
  • DFPlayer ausgetauscht
  • alle Lötstellen überprüft und nachgemessen

Falls jemand eine Idee hat, wäre ich sehr dankbar :slight_smile:

LG Robin

Welche DFplayer hast du denn? Die GB3200B verursachen ja sehr häufig das Problem.
Anzeige Ordner nach 2. Auflegen richtig

Das Thema könnte vllt. Weiterhelfen.

Ich hab für mich die Lösung des von-bis Modus gewählt in Verbindung mit der TonUino Android app

1 „Gefällt mir“

Vielen Dank für die Antwort, das hilft mir schon mal weiter!
Ja ich habe den GB3200B. Wusste gar nicht dass es verschiedene Versionen gibt.

LG Robin

1 „Gefällt mir“

Schau doch Mal bei den Leiterkarten-Piraten vorbei. Die haben einen eigenen Df-Player entwickelt, der die Probleme der anderen noch erhältlichen Player nicht hat. Kann ich nur wärmstens empfehlen.

Das werde ich machen, danke für den Tipp!

Bis dahin habe ich übrigens ein kleines Workaround gebastelt :wink:


void setTracksInFolder() {
  if (myFolder->folder == lastPlayedFolder) {
    return;
  }
  
  mp3.setVolume(0); //mute
  mp3.playFolderTrack(myFolder->folder, 1);
  delay(2000);
  numTracksInFolder = mp3.getFolderTrackCount(myFolder->folder);
  mp3.setVolume(volume);
  lastPlayedFolder = myFolder->folder;
}

So eine ähnliche Lösung habe ich auch schon Mal ausprobiert. Das hat auch funktioniert, habe aber dann doch lieber einen anderen Typ des df-Players benutzt.

Hallo Robin
Ich habe scheinbar auch den GB3200B verbaut - möchte ihn eigentlich nicht mehr ausbauen. Wo müsste ich dein Workaround einbauen? Braucht es dann nicht einen Aufruf beim Lesen der RFID-Card? Liebe Grüsse Fred Hari