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
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.
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
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)
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.
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;))
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.
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]
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
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 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
Torben
PS: Zugegeben, die Floskel “Zurück ins Studio” ist in Fachbkreisen auch ziemlich verpönt, aber anders ging es oben nicht
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.)
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.
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
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.