Forum: PC-Programmierung Reihenfolge der Speicherung auf SD Karten.


von Player vor dem Herrn (Gast)


Lesenswert?

Hi zusammen,

Ich benutze einen DFPlayer (Arduino Zusatz) zum Abspielen von 
Nachrichten im MP3 Format. Maßgeblich für die Anwahl der verschiedenen 
Mp3 Nachrichten ist anscheinend nicht der Name, auch nicht das Datum. 
Sondern die Reihenfolge wie die MP3 Nachrichten auf die SD Karte 
transferiert wurden. Wie geht sowas?
Beispiel. es existieren 3 Mp3-Songs ( halligalli_01.mp3; 
halligalli_02.mp3 und halligalli_03.mp3.
Wenn man nun als erstes halligall_03.mp3 auf die Karte ladet un dann die 
restlichen 2.
Dann passiert am DFPlayer folgendes.
Wenn man den Command "myDFPlayer.play(1)" absetzt dann wird 
Halligalli_03.mp3 abgespielt.
Beim Aufruf "myDFPlayer.play(3)" wird  halligalli_02.mp3 abgespielt.
Wie geht da der DFPlayer vor? das Datum und der Name als 
Sortier-Kriterium kann es nicht sein.
Hat jemand einen Tipp, ich möchte das eigentlich nur verstehen. – Danke.

von Andreas B. (bitverdreher)


Lesenswert?

Player vor dem Herrn schrieb:
> Sondern die Reihenfolge wie die MP3 Nachrichten auf die SD Karte
> transferiert wurden. Wie geht sowas?

In dieser Reihenfolge werden die Dateieinträge in die FAT geschrieben. 
Und genauso auch wieder eingelesen.
Wenn der Player also nichts sortiert, ist es genau das erwartete 
Verhalten.

von Derek Manns (Gast)


Lesenswert?

Kenne Deinen genauen Typ nicht aber ich musste bei einem Modul das 
genannt wurde 2 Dinge machen damit die Reihenfolge stimmt:

- MP3 mussten auf der SD in einen "mp3" Ordner
- Name muss 4-stellige Zahl und dann beliebiger Text + .mp3 sein z.B. 
0002-mysound.mp3   0010-audio.mp3    ...

von WIRO (Gast)


Lesenswert?

Hallo  Player vor dem Herrn,
manche Player verwenden einen der 3 Zeitstempel für die Reihenfolge.
In der Command Shell von Windows kann man sich die Zeiten ansehen mit:
  dir *.mp3 /tc
  dir *.mp3 /ta
  dir *.mp3 /tw
Vielleicht geht die Reihenfolge daraus hervor.

Gruß,
WIRO

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

WIRO schrieb:
> manche Player verwenden einen der 3 Zeitstempel für die Reihenfolge.

FAT hat nur einen. Drei Zeitstempel gibt es nur bei NTFS.

von guest (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> FAT hat nur einen.

?
Eigentlich hat auch FAT drei. Wobei vom letzten Zugriff nur das Datum 
gespeichert wird und die letzte Änderung nur 2s Auflösung hat 
(Erstellung 10ms Auflösung).

von MeierKurt (Gast)


Lesenswert?

Player vor dem Herrn schrieb:
> Hi zusammen,
>
> Ich benutze einen DFPlayer (Arduino Zusatz) zum Abspielen von
> Nachrichten im MP3 Format. Maßgeblich für die Anwahl der verschiedenen
> Mp3 Nachrichten ist anscheinend nicht der Name, auch nicht das Datum.
> Sondern die Reihenfolge wie die MP3 Nachrichten auf die SD Karte
> transferiert wurden. Wie geht sowas?

Sowas geht besch...eiden. Dahinter steht die (für den Alltagsanwender 
absolut nichtsnutzige) Idee, das Zeug in der Reihenfolge abzuspielen, 
wie es auf das Medium drauf gekommen ist.

Dagegen gibts Progrämmelchen, die die Dateien auf der Karte/dem Stick 
(um)sortieren (nur zum Beispiel, willkürlich, eine der ersten 
Google-Treffer):

https://waidner-itsolutions.de/wordpress/2011/12/21/audiosorter-dateien-auf-dem-usb-stick-sortieren/

... sollte natürlich auch mit Speicherkarte funktionieren.

von Tek (Gast)


Lesenswert?

Wenn das der Player ist kann man laut PDF Beschreibung auch spezifische 
Tracks anwählen wenn sie richtig benamst wurden:

https://github.com/DFRobot/DFRobotDFPlayerMini/

müssen wohl 0001.mp3, 0002.mp3 usw heissen dann kann man die per Nummer 
auswählen.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Das Problem kenn ich auch, dieses Programm hilft:
https://wiki.ubuntuusers.de/FATSort/

von Martin P (Gast)


Lesenswert?

Hatte auch mal so einen MP3 Player.
wieso wird dieses Verhalten als Problem gesehen?
Das ist für mich genau das erwartete Verhalten.

Denn so kann man die Reihenfolge der Songs in einer Playlist beliebig 
sortieren und dann auf den Player laden. Der spielt sie dann genau in 
dieser Reihenfolge ab.
Ich habe immer "Shuffle" gemacht damit ich beim Radeln möglichst 
unterschiedliche Musik zu hören bekam.

Der nächste MP3 Player hat dann plötzlich alles alphabetisch abgespielt, 
das war vielleicht ein Graus...

Gruß, Martin

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Martin P schrieb:
> Denn so kann man die Reihenfolge der Songs in einer Playlist beliebig
> sortieren und dann auf den Player laden. Der spielt sie dann genau in
> dieser Reihenfolge ab.

Und wie schaffst du es dem FAT-Treiber deines Betriebssystems 
beizubringen, die Songs in genau dieser Reihenfolge abzulegen? Nur weil 
du die Dateien alle nacheinander da drauf kopierst, sind die noch lange 
nicht in eben dieser Reihenfolge im Verzeichnis-Index.

Martin P schrieb:
> Ich habe immer "Shuffle" gemacht damit ich beim Radeln möglichst
> unterschiedliche Musik zu hören bekam.

Solche Leute hab ich noch nie verstanden ;-)

Martin P schrieb:
> Der nächste MP3 Player hat dann plötzlich alles alphabetisch abgespielt,
> das war vielleicht ein Graus...

Da kann man sie dann durchnummerieren.

Am Besten ist es natürlich, wenn der Player die ID3-Tags ausliest um die 
Reihenfolge innerhalb des Albums zu bestimmen. Playlisten kann man ja 
als m3u-Datei ablegen.

von Vlad T. (vlad_tepesch)


Lesenswert?

so ein ding hatte ich früher auch mal.

Ich hatte mir ein perl-script geschrieben, was die Dateien in der 
Reihenfolge einer playlist-Datei auf die Karte kopiert, damit der player 
die richtige Reihenfolge hat.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

guest schrieb:
> Eigentlich hat auch FAT drei.

VFAT, normales FAT nicht. Und welcher Simpel-mp3-Player kennt schon 
VFAT?

von Martin P (Gast)


Lesenswert?

Niklas G. schrieb:
> Und wie schaffst du es dem FAT-Treiber deines Betriebssystems
> beizubringen, die Songs in genau dieser Reihenfolge abzulegen? Nur weil
> du die Dateien alle nacheinander da drauf kopierst, sind die noch lange
> nicht in eben dieser Reihenfolge im Verzeichnis-Index.

Ich kenne das Betriebssystem des Players nicht, war ein Billigteil. Aber 
er hat die Songs genau in der Reihenfolge abgespielt in der sie 
draufkopiert wurden.
Da gab es mal ein MP3-Programm namens Musicmatch, das hatte eine Auto-DJ 
Funktion. Damit konnte man eine zufällige Playlist aus den vorhandenen 
Songs erstellen und den ganzen Abend Party machen. Der hat die Playlist 
auch so auf den Player exportiert. Leider wurde Musicmatch eingestellt 
aber kein anderes Programm hatte eine vergleichbare Funktion.

Gruß, Martin

von Player vor dem Herrn (Gast)


Lesenswert?

Tek schrieb:
> müssen wohl 0001.mp3, 0002.mp3 usw heissen dann kann man die per Nummer
> auswählen.

Eben nicht! wenn 002.mp3 als erstes auf die Karte geschrieben wird, dann 
hat diese mp3 Datei den Index "1" und kann nur so (ohne den Namen) 
aktiviert werden: "myDFPlayer.play(1)". Dasselbe gilt auch dann,  wenn 
die erste Datei zufällig "BlaBla.mp3" heißt.
Es wird wohl so sein, dass es mit dem Eintrag in die FAT32 Tabelle zu 
tun hat.
Für uns funktioniert das zwar, ist aber umständlich und läuft einer 
Strukturierung zuwider.

Irgendwie ist es auch nicht verständlich, weil wenn man in der Lage ist, 
ein File-System zu implementieren, dann kann es doch nicht allzu schwer 
sein, eine vernünftige DIR Verwaltung hinzubekommen - oder?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Martin P schrieb:
> Aber
> er hat die Songs genau in der Reihenfolge abgespielt in der sie
> draufkopiert wurden.

Pures Glück. Das OS des PC hätte sie auch in einer beliebigen anderen 
Folge ablegen können. Wenn du z.B. eine Datei gelöscht und stattdessen 
eine andere draufkopiert hättest, wäre die vermutlich an die Stelle der 
alten Datei getreten, nicht ans Ende.

Martin P schrieb:
> Leider wurde Musicmatch eingestellt
> aber kein anderes Programm hatte eine vergleichbare Funktion.

Geht es explizit darum eine bestimmte zufällige Folge zu speichern? Die 
meisten Player können doch "Shuffle"...

Player vor dem Herrn schrieb:
> dann kann es doch nicht allzu schwer
> sein, eine vernünftige DIR Verwaltung hinzubekommen - oder?

Wahrscheinlich haben diese Player zu wenig Speicher, um alle 
FAT-Einträge einzulesen und dann zu sortieren.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Niklas G. schrieb:
> Das OS des PC hätte sie auch in einer beliebigen anderen Folge ablegen
> können. Wenn du z.B. eine Datei gelöscht und stattdessen eine andere
> draufkopiert hättest, wäre die vermutlich an die Stelle der alten Datei
> getreten, nicht ans Ende.

Das ist korrekt. Wenn man aber eine leere SD nimmt, dann stimmt die 
Reihenfolge mit der Chronologie des Draufkopierens überein. Dasselbe 
gilt für leere Ordner.

Derek Manns schrieb:
> - MP3 mussten auf der SD in einen "mp3" Ordner
> - Name muss 4-stellige Zahl und dann beliebiger Text + .mp3 sein z.B.
> 0002-mysound.mp3   0010-audio.mp3    ...

Das stimmt nicht ganz für den DFPlayer, jedenfalls ab FW-Version 0005. 
Hier kann man aber zweistellige Ordner 01, 02 usw. anlegen, in welche 
man dann die MP3-Dateien mit nnnn-beliebigername.mp3 ablegen kann. Dann 
kann man beim Abspielen sowohl den numerischen Ordner als auch den 
numerischen Dateinamen angeben und der DFPlayer spielt dann gezielt 
diesen Track ab - unabhängig von der Chronilogie des Draufkopierens.

Jedenfalls konnte ich das bei der Anbindung des DFPlayers an die 
WordClock mit WS2812 genau so nachvollziehen. Und das funktioniert 
auch.

von guest (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> guest schrieb:
>> Eigentlich hat auch FAT drei.
>
> VFAT, normales FAT nicht. Und welcher Simpel-mp3-Player kennt schon
> VFAT?

Da ist Microsoft aber anderer Meinung.
Die 3 Timestamps gab es schon bei FAT12. Du hast aber insofern Recht, 
daß zwei davon (und ein Teil des dritten) optional sind.
http://download.microsoft.com/download/0/8/4/084C452B-B772-4FE5-89BB-A0CBF082286A/fatgen103.doc

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Frank M. schrieb:
> dann stimmt die
> Reihenfolge mit der Chronologie des Draufkopierens überein

Dann muss das drauf-kopierende Programm die Dateien aber auch in 
alphabetischer Reihenfolge auf dem Stick anlegen. Im Zweifelsfall müsste 
man schon jede Datei einzeln kopieren, um das zu erreichen.

: Bearbeitet durch User
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Frank M. schrieb:
> Hier kann man aber zweistellige Ordner 01, 02 usw. anlegen, in welche
> man dann die MP3-Dateien mit nnnn-beliebigername.mp3 ablegen kann.

Sorry, muss mich korrigieren. Wenn man die Funktion mit Ordner-Angabe 
nutzt, müssen die Tracks von 000 bis 255 durchnummeriert werden, also

                    nnn-beliebigername.mp3

nnn ist hier also nur drei- und nicht vierstellig.

Niklas G. schrieb:
> Dann muss das drauf-kopierende Programm die Dateien aber auch in
> alphabetischer Reihenfolge auf dem Stick anlegen. Man müsste schon jede
> Datei einzeln kopieren, um das zu erreichen.

Ja, das ist korrekt. Bei Linux aber nicht schwierig: Die Shell 
expandiert Wildcards in alphabetischer Reihenfolge. Ein "cp *.mp3 
/mnt/xxx" macht das automatisch richtig. Bei Windows ist das mit der 
Mausschubserei nicht so einfach. Hier wird nicht unbedingt in der 
Reihenfolge kopiert, welche man bei der Selektion der Dateien mit der 
Maus verwendet hat.

Aber konkret beim DFPlayer sind solche Vosichtsmaßnahmen nicht 
notwendig, wenn man obiges Nummernschema verwendet.

: Bearbeitet durch Moderator
von Player vor dem Herrn (Gast)


Lesenswert?

Frank M. schrieb:
> Das stimmt nicht ganz für den DFPlayer, jedenfalls ab FW-Version 0005.
> Hier kann man aber zweistellige Ordner 01, 02 usw. anlegen, in welche
> man dann die MP3-Dateien mit nnnn-beliebigername.mp3 ablegen kann. Dann
> kann man beim Abspielen sowohl den numerischen Ordner als auch den
> numerischen Dateinamen angeben und der DFPlayer spielt dann gezielt
> diesen Track ab - unabhängig von der Chronilogie des Draufkopierens.

Das werde ich  mal ausprobieren - wenn das so funzt ernenne ich dich 
glatt zum MOD of the Week ;-)
Habe ich das richtig gecheckt - der DFPlayer orientiert sich dann nach 
dem Nummern-Prefix? Die Reihenfolge ist somit irrelevant bei dieser 
Vorgehensweise mit den DIRs..

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Player vor dem Herrn schrieb:
> Habe ich das richtig gecheckt - der DFPlayer orientiert sich dann nach
> dem Nummern-Prefix?

Ja. Aber wie ich oben schrieb: nnn für die MP3-Datei muss 3- und nicht 
4-stellig sein.

Die Funktion zum Abspielen ist die mit dem Kommando 0x0F - PLAY FOLDER.

Hier findest Du eine Implementation (WordClock-Projekt):

https://www.mikrocontroller.net/svnbrowser/wordclock24h/src/dfplayer/dfplayer.c?revision=112&view=markup

Die Funktion heisst dort dfplayer_play_folder() und ist folgendermaßen 
implementiert:
1
void
2
dfplayer_play_folder (uint_fast8_t folder, uint_fast8_t file)
3
{
4
    dfplayer_send_cmd (DFPLAYER_PLAY_FOLDER, (folder << 8) | file);
5
}

Wertebereich:

 - folder: 0 - 99, gemeint ist Ordner 00 - 99
 - file: 0 - 255, gemeint ist Datei 000.mp3 bis 255.mp3

Bitte darauf achten, dass Du beim Testen keine Zahlen mit führenden 
Nullen übergibst, sonst sind das Oktalzahlen ;-)

Der Source ist allerdings für STM32 und hat nichts mit Arduino zu tun. 
Soll Dir auch nur als Anhaltspunkt dienen.

: Bearbeitet durch Moderator
von Martin P (Gast)


Lesenswert?

Niklas G. schrieb:
> Geht es explizit darum eine bestimmte zufällige Folge zu speichern? Die
> meisten Player können doch "Shuffle"...

Heutzutage hab ich das Problem nicht mehr, weil die Player wie du sagst 
immer mehr können. Was ich eingangs beschrieb, ist bestimmt 10 Jahre 
her.

Gruß, Martin

von Player vor dem Herrn (Gast)


Lesenswert?

Player vor dem Herrn schrieb:
> Das werde ich  mal ausprobieren - wenn das so funzt ernenne ich dich
> glatt zum MOD of the Week ;-)

TaaTaa - The MOD of the week is Frank M.

Kurzes Feedback:

Es funzt genau wie es Frank beschrieben hat.
Entscheidend ist man vergisst die oberste DIR Eben und verlegt all seine 
MP3 Dateien in die Ordner.
Ich hatte die Ordner der Reihe nach generiert 01, 02 ....
Und anschließend "vogelwild" hinein kopiert und zwar in der Form: 
nnn_Name.mp3 (z.B. 005_Klappe_Auf;  007_Klappe_Zu)

In meiner Referenz Tabelle habe ich die DIR Nummern und den Index zu 
eine Integer Zahl zusammengefast (z.B. 3005, 3007)
zur Laufzeit wird dieser Index dann aufgedröselt in 2 Byte Variablen.

Was es anscheinend auch noch gibt, ist der Aufruf 
"myDFPlayer.playLargeFolder(dd, nnn);"
um auf 10 Ordner mit 1000 Dateien zuzugreifen.

Frank M. schrieb:
> Der Source ist allerdings für STM32 und hat nichts mit Arduino zu tun.
> Soll Dir auch nur als Anhaltspunkt dienen.

Wir verwenden hier quasi Arduino kompatible Teensy Module (3.5) mit 
einen ARM Core von NPX - vergleichbar mit STM32. Die Dinger sind sehr 
hoch getaktet, sodass die üblichen Kritiken wie "Bastelzeug" "lahme 
Ente" alle abprallen.
Der Produktivitäts-Zugewinn ist im Vergleich zu normalen uC-Anwendungen 
gigantisch.
N.B
Nach dem Erscheinen der Teensy 4.0 Familie wird die Arduinowelt nicht 
mehr zum leugnen sein.

von WTF ?! (Gast)


Lesenswert?

Player vor dem Herrn schrieb:
> das Datum

Klar ist es das Datum und Uhrzeit!
Datum und Uhrzeit, an dem die Dateien auf die Karte kopiert wurden.

Du erstellst eine Datei mit Datum 1.1.2011.

Wenn Du die am 2.2.2022 auf USB-Stick o.ä. kopierst und dann den Stick
anschaust, hat die Datei das Datum 2.2.2022.

Ein bißchen denken hat noch niemanden geschadet.
Einfach mal anfangen damit.

Jemand, der einen PC bedienen kann, um eine Frage online zu stellen,
sollte das eigentlich wissen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

WTF ?! schrieb:
> Wenn Du die am 2.2.2022 auf USB-Stick o.ä. kopierst und dann den Stick
> anschaust, hat die Datei das Datum 2.2.2022.

Das stimmt nur bedingt.

Wenn Du es mit einem unixoiden System mit "cp" ohne spezielle Optionen 
machst, dann bekommt die Datei ein neues Änderungsdatum und Deine 
Aussage ist richtig. Wenn man "cp -a Quelldatei Zieldatei" verwendet, 
wird jedoch u.a. das Änderungsdatum übernommen.

Bei Windows ist dieses Verhalten sogar Standard: Hier wird das 
Änderungsdatum der Quelldatei als Änderungsdatum der Zieldatei beim 
Kopieren übernommen, so dass beide Dateien im Explorer mit gleichem 
Änderungsdatum gezeigt werden.

Von daher solltest Du Deine hochtrabenden Aussagen

> Ein bißchen denken hat noch niemanden geschadet.
> Einfach mal anfangen damit.
>
> Jemand, der einen PC bedienen kann, um eine Frage online zu stellen,
> sollte das eigentlich wissen.

nochmals überdenken.

: Bearbeitet durch Moderator
von Player vor dem Herrn (Gast)


Lesenswert?

WTF ?! schrieb:
> Ein bißchen denken hat noch niemanden geschadet.
> Einfach mal anfangen damit.

Und wie sieht es bei dir aus? :-(

Sich zwei Worte rauspicken, die aus dem Kontext gerissen sind und
dann zu meinen hier im Forum "Denkanstöße" zu geben ist deplatziert und 
peinlich.

Das zeugt eigentlich nur  davon dass du den Thread nicht mal überflogen 
hast geschweige denn verstanden :-(

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.