Wie wird das Mischen von verschiedenen Musikplayern durchgeführt?

3960
Mohsin Akhtar

Ich habe mich gefragt, ob es ein festes Muster / Algorithmus gibt, dem verschiedene Musik-Player folgen, um die Wiedergabeliste zu mischen. Aus meiner Vermutung konnte ich herausfinden, dass diese Mediaplayer denselben Algorithmus für das Mischen verwenden. Ich sage so, dass ich praktisch das Verhalten der Shuffle-Funktion verschiedener Spieler auf derselben Playlist getestet habe. Wenn dies der Fall ist, was ist dann dieser Algorithmus?

Wenn meine Vermutung falsch ist und jeder Spieler seinen eigenen Mischalgorithmus verwendet, dann könnte ich die gleiche Sequenz von Songs nach dem Mischen von verschiedenen Spielern mit derselben Wiedergabeliste erhalten

BEARBEITEN:

Meine Frage ist, ob alle Musik-Player einen gemeinsamen Algorithmus für das Mischen haben. Wenn ja, welcher Algorithmus? wenn nein, wie kommt es, dass ich die gleiche sequenz von Songs erhalten habe, nachdem ich dieselbe Wiedergabeliste von meinem Nokia mobile 5233, 5300, dem VLC media Player, dem Windows Media Player usw. gemischt habe.

2
Der springende Punkt ist, dass, wenn es "zufällig" sein soll, Sie nicht wirklich wissen können, welcher Algorithmus verwendet wird, es sei denn, Sie erhalten den Quellcode oder fragen den Entwickler. Natürlich gibt es Open Source Media Player. Ein schnelles Aufdecken von Google zeigt jedoch, dass so etwas häufig verwendet wird: http://en.wikipedia.org/wiki/Fisher-Yates_shuffle James P vor 11 Jahren 3
+1 Ich denke, du hast recht. Es ist schwer zu sagen, welcher Algorithmus genau verfolgt wird. Und ich denke auch, dass der häufigste Algorithmus der Fisher-Yates ist. Vielen Dank. Fräsen Sie es einfach in eine Antwort, damit ich es annehmen kann. Mohsin Akhtar vor 11 Jahren 0
Selbst wenn die Algorithmen gleich sind, sollte das Shuffle-Ergebnis zufällig sein. Ich meine, "Sie können nicht die gleiche Sequenz von Songs von verschiedenen Spielern mit derselben Playlist erhalten", oder es ist nicht erforderlich, Karten zu mischen, wenn Sie Kartenspiele spielen. LiuYan 刘研 vor 11 Jahren 0

3 Antworten auf die Frage

1
Brad Patton

Es gibt eine Reihe verschiedener Shuffle-Algorithmen, wobei Fisher-Yates einer der beliebtesten ist. Selbst wenn ein Spieler diesen Algorithmus verwendet, hängt seine Implementierung von einer Reihe anderer Faktoren ab (Codiersprache, Unterstützung von Zufallszahlen). Wenn ein Player Code nicht direkt aus einem anderen Programm kopiert, ist die Implementierung unterschiedlich.

Während die meisten Spieler eine Wiedergabeliste "mischen", habe ich auch solche gesehen, die immer zufällig den nächsten zu spielenden Titel auswählen (was dazu führt, dass derselbe Titel zweimal hintereinander gespielt wird).

Es ist seltsam, dass Sie behaupten, dass verschiedene Spieler dieselbe Wiedergabeliste in derselben Reihenfolge "mischen". Selbst wenn Sie denselben Algorithmus (oder denselben Spieler) verwenden, sollte bei jedem Mischen eine zufällige Wiedergabeliste erstellt werden.

1
Doug Ferguson

Nach dem, was ich bei Apple-Produkten beobachtet habe, hat die Zufallswiedergabe ein zufälliges Element für die Auswahl des nächsten Elements. Es scheint auch eine Rangfolge für jedes Element zu geben, basierend auf dem Spielverlauf, der Benutzerbewertung (Sterne) und der Aufnahme in Wiedergabelisten. Gegenstände mit höherem Rang werden in der Shuffle wahrscheinlich früher angezeigt.

1
arielnmz

Ich habe vor einiger Zeit einen kleinen Mediaplayer für eine PSP erstellt (ich habe ihn nie veröffentlicht) und habe die Shuffle-Funktion folgendermaßen implementiert:

  • Sie geben jedem Song Ihres Musik-Players eine vorzeichenlose Integer- ID von 0 bis n( ndie Anzahl der Songs im Player).
  • Generieren einer Zufallszahl die aktuelle Zeit mit (ms) plus der letzte Song - ID als Saatgut, machen es integer und Modul mit n(die Anzahl der Lieder): |random(time+last_id)|%n. Die Pseudo-Zufalls-ID würde also im Bereich von 0 bis 0 liegen nund würde sich nicht wiederholen, wenn der Abstand zwischen "Shuffles" weniger als eine Millisekunde random(time)beträgt, da sich die gleiche Anzahl ergibt, wenn der Zufalls-Startwert (der timein diesem Fall) ebenfalls ist die gleiche Nummer.
  • Behalten Sie eine Liste der mzuletzt gespielten Songs, damit der neue, zufällig ausgewählte Titel nicht mindestens zwischen mverschiedenen Songs wiederholt wird . Wenn sich der neue Titel in der Liste befindet, wiederholen Sie Schritt 2.

Es funktionierte für mich ziemlich gut, mit einer Liste von Längen .9*nwürde ich nie einen wiederholten Song in mindestens 90% der gesamten Songs bekommen. Dies ist natürlich alles andere als effizient, wenn Sie Songbibliotheken mit vielen Songs verwenden. Aber eine PSP konnte nur ein paar Hunderte speichern, also war es in Ordnung.