Hallo In einem Laufwerk mit FAT-Struktur gibt es ja eine Liste des Ordnerinhalts. Und hoffentlich auch eine Indexnummer dieser Einträge. Dann könnte man es ja so machen, dass man mittels einer Zufallsanweisung eine Indexnummer generiert und den korrespondierenden Titel dann abspielt. Dann muss ich aber noch irgendwie dafür sorgen, dass der gespielte Titel in eine "Blacklist" wandert, damit er natürlich nicht 2x abgespielt wird. Habt ihr da andere Ideen/Ansätze für diese Problematik? Dankeschön
Wie lautet denn Deine Frage? Zufall ist so wie beim Würfel. Da kommen Zahlen schonmal mehrmals vor.. :-)
>Wie lautet denn Deine Frage?
Na das soll doch wohl ein Scherz sein, oder?! Scherz lass nach!
Ich habe laut gedacht, dies aufgeschrieben und ihr sollt euch nun
darüber hermachen.
Genau das hatte ich in der Frage formuliert.
So und jetzt das Ganze nochmal :)
>In einem Laufwerk mit FAT-Struktur gibt es ja eine Liste des >Ordnerinhalts. Und hoffentlich auch eine Indexnummer dieser Einträge. Nö, gibt es nicht. Die Einträge stehen einfach nur hintereinander. Also immer vom Anfang des Verzeichnisses nach Dateien suchen und Index selber mitzählen. LFN (LongFileName) Einträge und Directory Einträge sollte man da natürlich nicht mitzählen. Sonst gehts daneben.
Es sollte kein Scherz sein, aber vielleicht funktioniert Deine Vorgehensweise ja und alle stürzen sich auf dieses Thema.. bin gespannt! :-)
Sorry Rainer, aber was ist denn an meiner Frage so missdeutbar?
Ich habe sowas selber auch schon implementiert. Folgendermaßen vorgehen: 1. MP3s im Ordner/Root zählen. 2. File abspielen und Nummer merken. 3. Neu würfeln, wenns die gemerkte ist weiterwürfeln. So wird vermieden, dass dieselbe zwei mal hintereinander kommt. Wenns mehrere Files werden sollen, würde ich für jede Filenummer ein Bit in ein paar Bytes setzen. Das müsste der effizienteste Weg sein...
Hallo Tajas, Aber das Problem ist ja, wenn ich mir die Nummer merken will, dann muss ich die ja irgendwo abspeichern. Problematisch, da ich ja erst nach dem Zählen weiß, wie viele MP3s auf meiner SD-Karte sind. Geht das denn, dass ich nach dem Zählen ein Feld mit der Anzahl der Dateien deklariere? Das würde ja dann mitten im Programm geschehen und nicht am Anfang.
>Geht das denn, dass ich nach dem Zählen ein Feld mit der Anzahl der >Dateien deklariere? Wenn dein Speicher groß genug ist geht das. Für jede Datei aber nur EIN Kreuz, äh Bit;)
Kann ich denn ein Feld erstellen, das als Elemente wirklich nur jeweils einzelne Bits enthält?
Deklariere doch einfach ein Array von z.B. 16 Elementen, und merk dir darin die 16 zuletzt gespielten Nummern. Jede neue Zufallszahl vergleichst du dann mit den 16 Einträgen, und würfelst neu, wenn sie schon vorhanden ist. So wird der gleiche Titel frühestens nach etwa 1 Stunde wiederholt. Andi
Tajas R. schrieb: > Ich habe sowas selber auch schon implementiert. Folgendermaßen vorgehen: > 1. MP3s im Ordner/Root zählen. > 2. File abspielen und Nummer merken. > 3. Neu würfeln, wenns die gemerkte ist weiterwürfeln. > > So wird vermieden, dass dieselbe zwei mal hintereinander kommt. Wenns > mehrere Files werden sollen, würde ich für jede Filenummer ein Bit in > ein paar Bytes setzen. Das müsste der effizienteste Weg sein... Effizient wohl kaum... Werden die ungespielten Files weniger, wuerfelt der sich ja im Zweifel tot! ;) Im Allgemeinen sucht man eine Zufallszahl X zwischen 1 und Anzahl ungespielter Titel und nimmt dann das X-te ungespielte Lied. Volker
Das Problem, was sich aber gerade auftat ist nämlich: Der Compiler meckert rum, wenn ich die Felddeklaration im Hauptprogramm mache. Geht aber gar nicht anders, da ja erst die Anzahl der nötigen Feldelemente ermittelt werden muss :( Habt ihr da ne Idee, wie ich das zum Laufen bekomme?
>Der Compiler meckert rum, wenn ich die Felddeklaration im Hauptprogramm >mache. >Geht aber gar nicht anders, da ja erst die Anzahl der nötigen >Feldelemente ermittelt werden muss :( > >Habt ihr da ne Idee, wie ich das zum Laufen bekomme? malloc()
holger schrieb: >>Der Compiler meckert rum, wenn ich die Felddeklaration im Hauptprogramm >>mache. >>Geht aber gar nicht anders, da ja erst die Anzahl der nötigen >>Feldelemente ermittelt werden muss :( >> >>Habt ihr da ne Idee, wie ich das zum Laufen bekomme? > > malloc() ... und ich haette erstmal gefragt, in welcher Sprache auf welcher Plattform er da ueberhaupt was programmiert... ;) Volker
Folgende Idee: Ich erstelle vor dem Abspielen einfach eine zufällige Liste, die dann zum Abspielen genutzt wird. Zum Erstellen dieser Liste muss ich natürlich aus der Menge der MP3-Files sukzessive eins auswählen und diesen Index in die Wiedergabeliste packen. Danach verkleinere ich die Liste der noch übrig gebliebenen Dateien in dem ich die entstandene "Lücke" schließe. Somit wird dieses Feld schrittweise kleiner und jede Zufallszahl, die ich danach neu aus dem Pool der ungespielten Dateinen generiere trifft dann natürlich auch eine ungespielte Datei. Somit umgehe ich theoretisch das Problem, dass die Suchzeit stark ansteigt, wenn die Zahl der ungespielten Titel abnimmt. Gebt bitte mal eure Meinung dazu ab.
Funktionieren würde es. Aber ich vermute mal, dass das ganze auf einem Mikrocontroller laufen soll? Dann dauerts erstmal ein wenig die Liste aufzubauen und es muss genügend Speicher für die Liste vorhanden sein. Ich habs bei meinem Player (http://www.youtube.com/watch?v=N-m6TGZMfso) so gelöst, dass ich jeder Datei eine fortlaufende 16 Bit Nummer zuordne. Damit ist auch die Dateianzahl bekannt. (dauert auch am Anfang ein paar Sekunden und die Zuordnung braucht ein paar KB RAM) Bei der Zufallswiedergabe habe ich eine Liste der letzten 10 gespielten Dateien und wenn eine Nummer aus der Liste getroffen wird, wird (bis zu 10x) nochmal neu eine Zufällige Nummer genommen. Das verhindert zwar doppeltes Abspielen nicht, reduziert es aber soweit dass es mich nicht mehr stört.
Ich präsentiere: die wahrscheinlich längste Praline..ääähh...kürzeste Antwort seit es uC.net gibt. Der Preis geht an Tobi! Herzlichen Glückwunsch. Du darfst wohl am Tag eine bestimmte Anzahl getippter Zeichen nicht überschreiten, wie? :D
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.