Player spielt den Track "0001.mp3" ("Eins") statt der richtigen Datei

Hallo,

zuerst einmal danke für das tolle Projekt :slight_smile:

Ich habe ein Problem beim Abspielen von Dateien.

Version: Tonuino Classic
Software Version: 3.1.4 (29.10.2023)
MP3 Player: MP3-TF-16P V3.0 MH2024K-24SS
SD-Karte Inhalt: 6 Ordner (01, 02, 03, 04, advert, mp3), die Dateien in 01-04 heißen nur „00X.mp3“, keine zusätzlichen Dateien

Leider wird manchmal beim Abspielen einer Datei stattdessen die Datei „0001.mp3“ aus dem advert oder mp3 Ordner abgespielt. Das passiert zufällig, irgendwann reagiert der Player dann gar nicht mehr auf Eingaben.

Sehr eigenartig, denn die Ausgabe über den Serial Monitor stimmt:

enqueue 2-10  
play 2-10

Hier die komplette Ausgabe:

 _____         _____ _____ _____ _____
|_   _|___ ___|  |  |     |   | |     |
  | | | . |   |  |  |-   -| | | |  |  |
  |_| |___|_|_|_____|_____|_|___|_____|
TonUINO Version 3.1 - refactored by Boerge1

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

V3.1.4 20.09.23

Ver:2
Vol:30 5 15
EQ:1
ST:0
IB:1
AL:0
AP:1111
PCR:0
Volume: 15
MFRC522:146
enter Idle
Command: 6
enqueue mp3 262 0
play mp3 262
Card Inserted
CardData:  31 73 3b 74 02 02 01 00 00
enter StartPlay
enqueue mp3 262 0
play mp3 262
Card Removed
15 tr in folder 2
enqueue 2-10  
play 2-10
enter Play
enter Idle

Weiß jemand, was hier das Problem sein könnte?

1 „Gefällt mir“

Ist das Verhalten auch da aufgetreten, wovon du die Ausgabe geteilt hast?

Edit: ich sehe du hast ein stattdessen ergänzt, das ändert dann natürlich die Erwartung, dass es ein zweites Signal zum Abspielen geben müsste

genau, also die Ausgabe ist korrekt. Wenn ich die Karte nochmal draufhalte, kann es sein dass die richtige oder eben „0001.mp3“ („eins“) abgespielt wird. Die Ausgabe ist aber immer korrekt.

ich hab hier mal den Log von mehrmals Karte auflegen mit Kommentar dazugeschrieben, was abgespielt wird:

Card Inserted
CardData:  31 73 3b 74 02 02 01 00 00
enter StartPlay
enqueue mp3 262 0
play mp3 262
Card Removed
15 tr in folder 2
enqueue 2-9  
play 2-9 # "Eins"
enter Play
enter Idle
Card Inserted
CardData:  31 73 3b 74 02 01 01 00 00
enter StartPlay
enqueue mp3 262 0
play mp3 262
Card Removed
10 tr in folder 1
enqueue 1-1  
play 1-1 # "Benjamin Blümchen"
enter Play
Card Inserted
CardData:  31 73 3b 74 02 02 01 00 00
enter StartPlay
enqueue mp3 262 0
play mp3 262
Card Removed
15 tr in folder 2
enqueue 2-12 
play 2-12 # "Biene Maja"
enter Play
Card Inserted
CardData:  31 73 3b 74 02 02 01 00 00
enter StartPlay
enqueue mp3 262 0
play mp3 262
15 tr in folder 2
enqueue 2-13  
play 2-13 # "eins"
Card Removed
enter Play
enter Idle

Hier auch mal als Beispiel das Ergebnis, wenn ich die gleiche Karte mehrmals drauflege (Ordner 2 mit 15 Dateien):


2-12 OK Biene Maja
2-13 eins
2-13  eins
2-10 OK biene Maja
2-2 eins
2-2 eins
2-14 eins
2-5 eins
2-6 eins
2-2 eins
2-4 OK Biene Maja
2-12 eins

Versuch mal die erweiterten Ausgaben zum Player zu aktivieren.
Dafür musst du den Kommentar in der Zeile 5 von mp3.hpp entfernen. Also die 2 Schrägstriche löschen. Das geht allerdings nicht mit dem online-update. Wenn du Hilfe brauchst gib gerne Bescheid

ok, da bekomme ich diese Ausgabe (wieder als Kommentar, was abgespielt wird):

Card Inserted
CardData:  31 73 3b 74 02 02 01 00 00
enter StartPlay
enqueue mp3 262 0
play mp3 262
OUT  7e ff 06 12 01 01 06 fe e1 ef
IN  7e ff 06 41 00 00 00 fe ba ef
IN  7e ff 06 3d 00 00 12 fe ac ef
OUT  7e ff 06 4e 00 00 02 fe ab ef
IN  7e ff 06 4e 00 00 0f fe 9e ef
15 tr in folder 2
enqueue 2-14  
play 2-14
OUT  7e ff 06 0f 01 02 0e fe db ef
Card Removed
IN  7e ff 06 41 00 00 00 fe ba ef
enter Play # "OK Biene Maja"
OUT  7e ff 06 0d 01 00 00 fe ed ef
IN  7e ff 06 41 00 00 00 fe ba ef
Card Inserted
CardData:  31 73 3b 74 02 02 01 00 00
enter StartPlay
enqueue mp3 262 0
play mp3 262
OUT  7e ff 06 12 01 01 06 fe e1 ef
IN  7e ff 06 41 00 00 00 fe ba ef
Card Removed
IN  7e ff 06 3d 00 00 12 fe ac ef
OUT  7e ff 06 4e 00 00 02 fe ab ef
OUT  7e ff 06 4e 00 00 02 fe ab ef
IN  7e ff 06 4e 00 00 0f fe 9e ef
15 tr in folder 2
enqueue 2-8  
play 2-8
OUT  7e ff 06 0f 01 02 08 fe e1 ef
IN  7e ff 06 41 00 00 00 fe ba ef
IN  7e ff 06 4e 00 00 0f fe 9e ef
enter Play # "eins"
OUT  7e ff 06 0d 01 00 00 fe ed ef
IN  7e ff 06 41 00 00 00 fe ba ef
IN  7e ff 06 3d 00 00 01 fe bd ef
enter Idle

Hatte gestern genau das selbe Problem. Meine Lösung war alle 0001-0300(?) aus den Ordnern advert und mp3 zu löschen. Dann lief alles, Auch habe ich einen Ordner 01 erstellt

Ich habe exakt das gleiche Problem mit dem gleichen Chip.
Meine Beobachtung, 0001.mp3 wird abgespielt, wenn der Chip obwohl das richtige Stück schon gestartet wurde, nochmals ein zweites Mal den TrackCount meldet - das ist bei dir genau so.

OUT  7e ff 06 0f 01 02 08 fe e1 ef
IN  7e ff 06 41 00 00 00 fe ba ef
IN  7e ff 06 4e 00 00 0f fe 9e ef
enter Play # "eins"

Dieses 4e im 4.Byte ist der Command für GetTrackCount.
Manchmal kommt das direkt vor „enter Play“, manchmal nicht und das richtige Stück wird abgespielt.

Das heißt, wir müssten mal:

  1. Nachvollziehen warum der Chip nochmals den TrackCount zurückschickt.
  2. Nachvollziehen warum nur in diesem Fall dann 0001.mp3 abgespielt wird. (Bzw. bei mir wird sogar die erste mp3 aus dem ersten Ordner abgespielt)

Könnt ihr mal in der Datei constants.hpp die Zeile 38 auskommentieren.
Dieses #define ist eigentlich nur für die AiO und die LKP Player gedacht. Es sollte unschädlich sein für die anderen Player aber wer weiß, vielleicht braucht dieser Player sehr lange für getTrackCount. Auf jeden Fall wird ja auch der Request getTrackCount zweimal geschickt in dem Fall wo zweimal geantwortet wird.
Und dann schickt mal wieder das Log mit den Debug Ausgaben.

1 „Gefällt mir“

auch wenn ich die Zeile auskommentiere, habe ich immer noch das gleiche Verhalten:

Card Inserted
CardData:  31 73 3b 74 02 02 01 00 00
enter StartPlay
enqueue mp3 262 0
play mp3 262
OUT  7e ff 06 12 01 01 06 fe e1 ef
IN  7e ff 06 41 00 00 00 fe ba ef
Card Removed
IN  7e ff 06 3d 00 00 12 fe ac ef
OUT  7e ff 06 4e 00 00 02 fe ab ef
OUT  7e ff 06 4e 00 00 02 fe ab ef
IN  7e ff 06 4e 00 00 0f fe 9e ef
15 tr in folder 2
enqueue 2-11  
play 2-11
OUT  7e ff 06 0f 01 02 0b fe de ef
IN  7e ff 06 41 00 00 00 fe ba ef
IN  7e ff 06 4e 00 00 0f fe 9e ef
enter Play # "eins"
OUT  7e ff 06 0d 01 00 00 fe ed ef
IN  7e ff 06 41 00 00 00 fe ba ef
IN  7e ff 06 3d 00 00 01 fe bd ef
enter Idle

Ich konnt es mit zwei delay in der getFolderTrackCount() Funktion lösen:


uint16_t Mp3::getFolderTrackCount(uint16_t folder)
{
    uint16_t ret = 0;

#ifdef DFMiniMp3_T_CHIP_GD3200B
    Base::setVolume(0);
    delay(100);

    Base::playFolderTrack(folder, 1);
    delay(500);
#endif

#ifdef DFMiniMp3_T_CHIP_MH2024K24SS
    delay(500);
#endif

    LOG(mp3_log, s_debug, F("getFolderTrackCount: "), folder);
    ret = Base::getFolderTrackCount(folder);
    LOG(mp3_log, s_debug, F("getFolderTrackCount return: "), ret);

#ifdef DFMiniMp3_T_CHIP_GD3200B
    Base::setVolume(volume);
#endif

#ifdef DFMiniMp3_T_CHIP_MH2024K24SS
    delay(500);
#endif

    return ret;
}

Hab etwas getestet und bei mir passt es jetzt. Habe auch einen PR auf github erstellt. Evtl. sollte man für den Chip ein eigenes #define anlegen?

Würde stattdessen folgenden Fix vorschlagen:

const uint32_t c_AckTimeout = 1500; // 900 original

in der DFMiniMp3.h (also nicht im Tonuino code sondern der DFPlayer lib)
Problem ist tatsächlich, dass der Chip zu langsam antwortet und dadurch frühzeitig ein Retry ausgelöst wird innerhalb der DFPlayer lib.

DFMiniMp3_T_CHIP_Mp3ChipIncongruousNoAck

hat tatsächlich keinen Einfluss, weil auch die NoAck subclass in der DFPlayer lib für den GetTrackCount-Command returned, dass es sich um einen „AckCommand“ handelt.

Der längere Timeout bis zum Retry verursacht im Gegensatz zum delay fix im Tonuino Code selbst keine Zeitverzögerung.

1 „Gefällt mir“

Ja, genau das hatte ich vermutet. Hast du das auch schon getestet?
Wenn ja werde ich mal den Entwickler bitten, den Timout konfigurierbar zu machen.

Ja, hab 10 Karten/Ordner durchprobiert mit den 1500ms - ist kein einziges Mal mehr aufgetreten.
Hab den Schwellwert allerdings nicht optimiert, bisschen weniger könnte auch reichen, aber wenn er konfigurierbar gemacht wird, kann man das ja später noch testen. Gute Idee.

Generell könnte man auch überlegen, ob man überhaupt automatische command retries haben möchte. 3 ist da aktuell der Default…

1 „Gefällt mir“

Noch eine Frage, ist der Player neu und der, der aktuell geliefert wird?

Ja, genau, im Oktober als Teil des AZ-Delivery Tonuino Sets: Oben drauf steht MP3-TF-16P V3.0 und unten auf dem Chip MH2024K-24SS

Habe ein Issue für die DFMiniMp3 Lib erstellt: Issue 148
Mal sehen, was Makuna antwortet.

1 „Gefällt mir“

@overovermind @YoFrankie
Makuna hat einen Branch CustomTimeout erstellt. Hier ist der Timeout konfigurierbar.
Könnt ihr das bitte testen? Danach würde er das mergen und ein neues Release machen.

Dazu müsst ihr folgendes machen:

  • Die Bibliothek auf den Branch ändern (es reicht die Datei DFMiniMp3.h zu ändern)
  • von der TonUINO-TNG Software den Branch issue_132 verwenden.

Das war es auch schon.

1 „Gefällt mir“

Funktioniert wunderbar, eben getestet, danke!

1 „Gefällt mir“

Schön! Ich habe Makuna schon Bescheid gegeben und ich denke, dass wir bald ein neues Release haben.

2 „Gefällt mir“

habs auch getestet, funktioniert einwandfrei!

2 „Gefällt mir“

Also ich habe für meine neuen Boxen auch die Version MH2024K-24SS mit MP3-TF-16P V3.0 Beschriftung.

Bei mir gibt es leider das gleiche Problem wie hier beschrieben trotz der neuen Version, allerdings nur bei Ordnern in denen recht viele Files liegen.

Bei einem Ordner mit 126 Files reicht leider der nun als Standard hinterlegte Timeout von

using DfMp3 = DFMiniMp3<SerialType, Mp3Notify, Mp3ChipOriginal, 1500>;

nicht aus!
Ich habe den Timeout für mich nun erhöht auf 3000.
Wenn ich es richtig mitgelesen habe, hat das keine weiteren negativen Auswirkungen.

Die Frage wäre nur, wie weiter mit dem Problem verfahren werden soll.

→ Den Standard Timeout weiter erhöhen, so dass es für möglichst keinen Probleme bereitet (Evtl. inkl. Tests mit maximaler Anzahl an Tracks etc.)
→ Oder in der FAQ einnfach darauf hinweisen, dass bei diesem Player und großen Ordnern evtl. der Timeout angepasst werden muss

Zusätlich habe ich gerade noch Probleme bei den mp3 Ansagen (es kommt nur „Oh eine neue Karte“ aber das „wähle mit den …“ kommt nicht obwohl es laut Serial Monitor keinen Fehler gibt) aber das werde ich erst mal noch verifizieren und evtl. einen eigene Post machen