Marc Reichelt: Verhalten einer Playlist im Zufallsmodus

Hallo an alle,

nachdem der EMFF 0.4 zwar mehrere Dateien unterstützt, möchte ich in den neuen EMFF 0.5 eine echte Playlist implementieren - inklusive Wiederholungs- und Zufälligkeitsfunktion.
Eine strukturierte Playlist ist ja sehr einfach aufgebaut, Beispiel (5 Stücke mit den Indizes 0-4):
0, 1, 2, 3, 4

Wenn nun der "Zurück"- oder der "Vorwärts"-Button des EMFF betätigt wird, dann wird der index des aktuellen Stückes entsprechend erhöht oder erniedrigt.

Nun möchte der Benutzer die Stücke aber beispielsweise zufällig abspielen.
Da gibt es nun einige Möglichkeiten:

1. Die Playlist wird gemischt, sodass die Indizes entsprechend (auch in einer grafischen Darstellung sichtbar) angeordnet werden, im Beispiel:
3, 1, 4, 0, 2

Der Aufwand hier ist noch relativ einfach - die Playlist wird auf Anfrage gemischt. Auch der intern hochgezählte Index lässt sich weiterhin ohne Probleme erhöhen oder erniedrigen.

2. Bei jedem Springen wird ein zufälliger Index generiert. Das hat IMHO mehrere Nachteile:

  • ein Stück kann mehrfach hintereinander gespielt werden (insbesondere bei kleinen Playlisten wahrscheinlich)
  • eine eingeschaltete Wiederholung wird dadurch ebenfalls erschwert
    Wie lassen sich diese Nachteile beheben?

3. Neben der Liste der gespeicherten Tracks wird intern eine zufällige Liste von Indizes gespeichert, die dann abgespielt wird.
Problematiken: Was geschieht bei Löschen oder Einfügen eines Stückes? Und wie sieht das dann mit der Wiederholungsfunktion aus?

Neben den genannten Möglichkeiten gibt es bestimmt noch andere, die ich noch nicht in Betracht gezogen habe. Was wäre eurer Meinung nach die beste Art, eine Zufallsfunktion einzubauen?

Grüße

Marc Reichelt || http://www.marcreichelt.de/

--
Linux is like a wigwam - no windows, no gates and an Apache inside!
Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
  1. Ich grüsse den Cosmos,

    1. Die Playlist wird gemischt, sodass die Indizes entsprechend (auch in einer grafischen Darstellung sichtbar) angeordnet werden, im Beispiel:
      3, 1, 4, 0, 2

    Alternativ mischt du nur intern und markierst den aktuellen Song nur optisch (so löst es Winamp)

    Wie lassen sich diese Nachteile beheben?

    Du könntest intern eine zufällige Playlist generieren, die nur die Indexnummern enthält.

    Problematiken: Was geschieht bei Löschen oder Einfügen eines Stückes? Und wie sieht das dann mit der Wiederholungsfunktion aus?

    Wenn nun ein Song hinzugefügt wird, fügst du den Index zufällig irgendwo ein. Beim löschen entfernst du den internen Index und spielst das nachfolgende Lied.

    Neben den genannten Möglichkeiten gibt es bestimmt noch andere, die ich noch nicht in Betracht gezogen habe. Was wäre eurer Meinung nach die beste Art, eine Zufallsfunktion einzubauen?

    Ich würde mit einer internen Playliste arbeiten, wie es Winamp macht.
    Alternativ kannst du es dem User überlassen, ob der die Plalistenanzeige zufällig oder in Reihenfolge haben will.

    Möge das "Self" mit euch sein

    --
    Neulich dachte ich mir, einmal S/M ausprobieren wäre eine tolle Erfahrung. Also hab ich Windows gebootet ...
    1. Bei jedem Springen wird ein zufälliger Index generiert. Das hat IMHO mehrere Nachteile:
    • ein Stück kann mehrfach hintereinander gespielt werden (insbesondere bei kleinen Playlisten wahrscheinlich)
    • eine eingeschaltete Wiederholung wird dadurch ebenfalls erschwert
      Wie lassen sich diese Nachteile beheben?

    So eben nicht implementieren, sondern mit einmaliger Stückeauslosung (die natürlich resettet werden darf).

    1. Neben der Liste der gespeicherten Tracks wird intern eine zufällige Liste von Indizes gespeichert, die dann abgespielt wird.
      Problematiken: Was geschieht bei Löschen oder Einfügen eines Stückes?

    Nichts, erst nach dem Reset der Stückeauslosung ist das Ding "im Pool".

    Und wie sieht das dann mit der Wiederholungsfunktion aus?

    s.o.

    Neben den genannten Möglichkeiten gibt es bestimmt noch andere, die ich noch nicht in Betracht gezogen habe. Was wäre eurer Meinung nach die beste Art, eine Zufallsfunktion einzubauen?

    So, wie es der Nutzer seit eh und je gewohnt ist. Schau mal, was Dein Walkman, CD-Player, MP3-Spieler so machen.

  2. Hallo Marc,

    Ich stelle mir das spontan so vor, dass du 2 Listen (Arrays oder sowas) hast, eine mit allen Titeln [a], eine leer[b]. Du nimmst einen zufaelligen Song aus [a] zum Abspielen, pushst ihn in [b] und loeschst ihn aus [a]. Wenn [a] leer ist, machst du das ganze Spiel andersrum.

    Gruß,

    Dieter

    1. Ich stelle mir das spontan so vor, dass du 2 Listen (Arrays oder sowas) hast, eine mit allen Titeln [a], eine leer[b]. Du nimmst einen zufaelligen Song aus [a] zum Abspielen, pushst ihn in [b] und loeschst ihn aus [a]. Wenn [a] leer ist, machst du das ganze Spiel andersrum.

      Hübsch. Aber wie bleibt die Reihenfolge erhalten?

      Wie würde man es "ohne IT" machen? Eine Liste, ein Zeigefinger?

  3. Hallo nochmals,

    eure Vorschläge haben mich auf folgende Idee gebracht, die mir am Besten erscheint:
    Die Playlist bleibt normal so sortiert, wie der Benutzer es haben will, also beispielsweise folgendermaßen:
    0, 1, 2, 3, 4

    In der Playlist werden die zuletzt gespielten Stücke gespeichert - ein Klick auf den "Vorwärts"-Button lost aus den verbleibenden Stücken eines aus. Dieses wird abgespielt und in der Liste gespeichert.
    Diese interne Liste sieht beim dritten Stück beispielsweise so aus: 1, 4
    Beim Klick auf "Zurück" wird also das zuletzt gespielte Stück wieder abgespielt, was ja auch sinnvoll ist - es ist gewissermaßen eine History. Wird ein neues Stück hinzugefügt, ist es ja nicht in der History - kein Problem also. Wird ein Stück aus der Playlist gelöscht, geschieht dies ebenso in der History.
    Auf diese Art und Weise habe ich folgende Vorteile:

    • zuletzt gespielte Stücke können erneut abgespielt werden
    • neue Stücke werden "echt" zufällig abgespielt
    • ist die Wiederholungsfunktion aktiviert, wird die interne Liste gelöscht, sobald sie die Größe der Playlist erreicht hat.

    Ich glaube, so mache ich es. :-)

    Vielen Dank nochmals & Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    1. Ich grüsse den Cosmos,

      Ich hab mal noch ne andere Frage zu deinem Player.
      Ist geplant, das man den auch zum Hören von Webradios nutzen kann? Ich denke, da ist in der Szene einiges an Interesse vorhanden.

      Möge das "Self" mit euch sein

      --
      Neulich dachte ich mir, einmal S/M ausprobieren wäre eine tolle Erfahrung. Also hab ich Windows gebootet ...