Playlist mischen

Hallo!

Gibt es eine Möglichkeit, die aktuellen Einträge im Playlistfenster durchzumischen (zufällig)? Wenn nein: Könnte man sowas einbauen? Wenn ein oder mehrere Player aktiv sind, sollte diese natürlich nicht berücksichtig werden :slight_smile:

Ich gehe nämlich oft die DB durch und ziehe einige Interpreten in die Playlist, die ich während der Sendung spielen möchte. Dann sieht das aber so aus: A - B - C - C - D - D - E (also immer die Anfangsbuchstaben der INterpreten). Wenn man durchmischen könnte, dann wären die Namen nicht so geknubbelt (Musikkenner merken sowas) und man müsste nicht alles per Hand hoch und runter ziehen. Natürlich muss man dann immer noch passende Lieder zusammentun, aber man ist nicht so an den Liedern orientiert, die im Alphabet direkt dahinter kommen.

Ich hoffe ihr wisst, was ich meine.

Gruß,
David

finde ich auch sehr praktisch!

Nein, sowas wird es (fest eingebaut) nicht geben. mAirList versteht sich als reines Abspiel-Frontent fertiger Playlisten. Playlist-Planung, wie einfach oder komplex auch immer, findet in externer Software statt.

Aber ich wette, man kann sehr leicht ein Script dafür schreiben :wink:

Torben

Ein Script würde mir völlig reichen. Wenn jemand weiß, wie das funktioniert, wäre es super, wenn er das erklären konnte :wink:

PS: Zara (reine Automation) hat so eine Funktion glaub ich auch. Daher - so ganz abwegig ist es nicht :wink:

Gruß,
David

hi,

also ich hätte jetzt mal spontan gesagt:

[code]var i : Integer;

begin
for i:=0 to CurrentPlaylist.GetCount-1 do
Move(i,random(CurrentPlaylist.GetCount-1));
end.[/code]

Das müsste zumindest mal “Durchmischen”, gibt aber bestimmt noch bessere lösungen;)

nur kennt mAirList “Move” nicht (Unknown Identifier)… (Das mit “move” habe ich aus dem chm file…?

mache ich da syntaxmäßig was falsch, torben?

grüße, michi

Move ist eine Methode von IPlaylist. Also musst du schreiben:

CurrentPlaylist.Move(....)

danke torben, klingt logisch :wink:

also dann entweder das nehmen:

[code]var i : Integer;

begin
for i:=0 to CurrentPlaylist.GetCount-1 do
CurrentPlaylist.Move(i,random(CurrentPlaylist.GetCount-1));
end.[/code]

oder, falls elemente, die im player geladen sind, nicht verschoben werden sollen, dieses hier:

var i : Integer;
    ziel: Integer;

begin
  for i:=0 to CurrentPlaylist.GetCount-1 do begin
    if CurrentPlaybackControl.GetPlayerOfItem(CurrentPlaylist.GetItem(i)) = -1 then begin  //abfrage, ob das item in einem player liegt
      ziel := random(CurrentPlaylist.GetCount-1);
      if CurrentPlaybackControl.GetPlayerOfItem(CurrentPlaylist.GetItem(ziel)) = -1 then  //abfrage, ob das "zielitem" in einem player liegt
        CurrentPlaylist.Move(i,ziel);
    end;
  end;
end.

getestet mit version 2.1.23 (und 3 playern) … mit dem playlistinhalt steigt die bearbeitungszeit relativ stark an ( so ab 200 items - zumindest bei meinem centrino 1,86Ghz)

grüße, michi

Tipp: Es gibt in IPlaylist zwei Methoden “BeginUpdate” und “EndUpdate”, die sorgen dafür, dass man mehrere Operationen hintereinander ausführen kann, ohne dass jedesmal alle anderen Komponenten “nachziehen” - es werden also weder nach jedem Schritt die Player neu geladen, noch die Playlist neu gezeichnet usw. Wichtig ist, dass man das in einen try…except-Block packt, damit das EndUpdate auf jeden Fall aufgerufen wird, auch wenn es während der Bearbeitung zu einer Exception kommt.

Du kannst das Script also folgendermaßen anpassen:

begin CurrentPlaylist.BeginUpdate; try (dein code von oben) except CurrentPlaylist.EndUpdate; end; end.

Dann geht es vermutlich auch alles etwas schneller.

so:)

und da verliessen sie ihn:)

hab es mal so gemacht:

[code]var i : Integer;
ziel: Integer;

begin
CurrentPlaylist.BeginUpdate;
try
for i:=0 to CurrentPlaylist.GetCount-1 do begin
if CurrentPlaybackControl.GetPlayerOfItem(CurrentPlaylist.GetItem(i)) = -1 then begin //abfrage, ob das item in einem player liegt
ziel := random(CurrentPlaylist.GetCount-1);
if CurrentPlaybackControl.GetPlayerOfItem(CurrentPlaylist.GetItem(ziel)) = -1 then //abfrage, ob das “zielitem” in einem player liegt
CurrentPlaylist.Move(i,ziel);
end;
end;
except
CurrentPlaylist.EndUpdate;
end;
end.[/code]

mairlist zeichnet die playlist garnicht mehr nach aufruf:(
wenn ich in dem “try-bauch” ein konstrukt reinsetze, das mit begin-end; arbeitet, wird es doch als ein kommando angesehen, oder? (ich vergleiche immer mit java;))

grüße, michi

Ach Mist, sorry, mein Fehler. Es muss ein try…finally sein. Also except durch finally ersetzen. Das müsste Pascal Script auch können. Probier mal bitte.

jetzt tuts:)

ein bisschen schneller ist gut… nach ein paar millisekunden ist mairlist fertig :D…

also: hier, finallygg, der code:

[code]var i : Integer;
ziel: Integer;

begin
CurrentPlaylist.BeginUpdate;
try
for i:=0 to CurrentPlaylist.GetCount-1 do begin
if CurrentPlaybackControl.GetPlayerOfItem(CurrentPlaylist.GetItem(i)) = -1 then begin //abfrage, ob das item in einem player liegt
ziel := random(CurrentPlaylist.GetCount-1);
if CurrentPlaybackControl.GetPlayerOfItem(CurrentPlaylist.GetItem(ziel)) = -1 then //abfrage, ob das “zielitem” in einem player liegt
CurrentPlaylist.Move(i,ziel);
end;
end;
finally
CurrentPlaylist.EndUpdate;
end;
end.
[/code]

michi

Na also, hat doch was gebracht :slight_smile:

mAirList ist intern so konstruiert, dass die “aktiven” Objekte (also PlaybackControl, die GUI usw.) automatisch über Änderungen der Playlist benachrichtigt werden und darauf reagieren. Das ist äußerst praktisch, denn dann muss man sich bei allen Playlist-Operationen keine Gedanken mehr darüber machen, dass hinterher die Player wieder richtig geladen werden usw. Wie du siehst, gibt es erst dann Probleme, wenn man viele Operationen nacheinander ausführt. BeginUpdate und EndUpdate sorgen dann dafür, dass die Änderungs-Benachrichtigungen solange nicht geschickt werden. Die GUI usw. kriegen also erst einmal am Ende mit, dass sich was verändert hat.

Soweit Neues aus der Welt der Programmierung, zurück ins Studio :wink:

Torben

Dankeschön an unseren Reporter Torben für die Infos. Und jetzt gibt’s… :wink: g

Und nun kommt der Redakteur Torben mit seiner harten Sendungskritik:

GANZ schlechte Abmod! Denn:

  • “Dankeschön” - ist unnötig. Der Reporter macht da seinen Job, wird evtl. sogar bezahlt :wink: Also muss man sich nicht bedanken.
  • “Reporter” - der Hörer hat wohl mitbekommen, dass das da gerade ein Reporter war.
  • “Für die Infos” - Meta-Satzteil, der gar nichts aussagt. Lieber nochmal kurz das Thema nennen, zu dem die Reportage oder der Beitrag war. Das hilft dem Hörer, der mittendrin eingeschaltet hat.
  • “Und jetzt gibt’s …” - soll das eine Musik-Anmod sein? Unbedingt weglassen! Der Hörer kann sich nur auf eine Information konzentrieren, und das sollte die Abmod des Beitrages sein. Wenn er danach noch einen Musiktitel genannt bekommt, konzentriert er sich nur noch drauf, und hat plötzlich vergessen, was denn da gerade in der Anmod gesagt wurde.

Deshalb, Gegenvorschlag:

“Torben Weibert, Programmierer von mAirList, über die interne Funktionsweise seiner Software” oder so ähnlich.

Tut mir leid, ich konnte nicht widerstehen :wink:

Torben

PS: Zugegeben, die Floskel “Zurück ins Studio” ist in Fachbkreisen auch ziemlich verpönt, aber anders ging es oben nicht :wink:

1 Like

LOL… Geil!
Torben hats drauf!

Also … nen Moderationstoutorial hier wäre echt eine bereicherung. Genau so, wie das hier … nur eben auf alle möglichen Situationen so wie das Ankündigungsforum. Ich glaub das würde mAirList regen besuch bescheren … ^^ (nur so ne idee… für mich als Anfänger [bin zwar schon seid ca. 1,5 Jahren als Webradio Mod aktiv] wäre das eine geniale sache.)

Warum nicht auch mal im Forum was dazulernen.

Also ... nen Moderationstoutorial hier wäre echt eine bereicherung.
Soweit muss man natürlich nicht gehen!
- "Und jetzt gibt's ..." - soll das eine Musik-Anmod sein? Unbedingt weglassen! Der Hörer kann sich nur auf eine Information konzentrieren, und das sollte die Abmod des Beitrages sein. Wenn er danach noch einen Musiktitel genannt bekommt, konzentriert er sich nur noch drauf, und hat plötzlich vergessen, was denn da gerade in der Anmod gesagt wurde.

Das sollte nur der Hinweis für die Leser sein das das Programm weiter geht. OnAir würde ich dass nie sagen!

Aber wie stehst du zu diesem hier (natürlich anderes Thema):
Die CeBit, Deutschlands größte Computermesse, hat ab Heute auch für alle Besucher geöffnet. Informationen waren das von XY.

Ich denke hier ist es OK wenn man schreibt:

Informationen waren das von XY

Danke schonmal für Tipp!

Tut mir leid, ich konnte nicht widerstehen ;)
Trifft bei mir auch zu ;-)

Schönes Wochende! :wink:

Aloha @ all,
ich habe diesen Code

[code]
var i : Integer;
ziel: Integer;

begin
CurrentPlaylist.BeginUpdate;
try
for i:=0 to CurrentPlaylist.GetCount-1 do begin
if CurrentPlaybackControl.GetPlayerOfItem(CurrentPlaylist.GetItem(i)) = -1 then begin //abfrage, ob das item in einem player liegt
ziel := random(CurrentPlaylist.GetCount-1);
if CurrentPlaybackControl.GetPlayerOfItem(CurrentPlaylist.GetItem(ziel)) = -1 then //abfrage, ob das “zielitem” in einem player liegt
CurrentPlaylist.Move(i,ziel);
end;
end;
finally
CurrentPlaylist.EndUpdate;
end;
end. [/code]

per copy and past kopiert und als randomizer.mls zu meinen anderen Scripten gelegt. Finde es jetzt auch unter Aktionen wieder, aber wenn ich es starte bekomme ich die Fehlermeldung: Unknown identifier ‘BEGINUPDATE’

Läuft das Script nur mit v 2.1 oder auch mit 2.0 ich hab 2.0.11

Gruß aus Bünde
Malte

Hi,

Das mit BeginUpdate weiss ich nicht.

Das ist aber auch nicht lebenswichtig… Verhindert nur, dass nach jedem “Move” nicht die Playlist neu gezeichnet wird… Wenn man das nicht hat, dann reagiert bei vielen Tracks mAirList halt nicht, solange das Script läuft.

Aber dein Script wird aus einem anderen Grund noch nicht funktionieren:
die Funktion “random” gibt es in 2.0.X noch nicht…
Lässt sich aber auch durch Auslagerung des randomscripts z.B mit PHP lösen… Ich hab da auch was im Einsatz… falls du es brauchst, kannst dich ja melden.

grüße, michi

Aloha!
sowas hab ich befürchtet. Vielleicht steige ich einfach komplett auf 2.1 um.
Sind ja auch reichlich neue wirklich gute Features dazu gekommen.

Komplett abschmieren wird’s wohl auch nicht wenn man nicht mitten in der Sendung was absolut neues wie Video Playback ausprobieren will. :wink:

Danke Flashlighter!