seit dem aktuellen Snapshot (b740) funktioniert das angehängte Skript nur noch eingeschränkt. Das Skript soll das nächste Element in der Playlist starten und den aktuellen Player ausblenden. Aber eben dieses Ausblenden funktioniert nicht. Der Player läuft einfach weiter.
[code]var i, player, item, pc: integer;
begin
pc := 0; {only for the playbackcontrol - if you use 2 or more playlists, change this value}
player := -1;
item := -1;
for i := 0 to PlaybackControl(pc).GetPlayerCount - 2 do
if ((PlaybackControl(pc).GetPlayer(i).GetState = psLoaded) or
(PlaybackControl(pc).GetPlayer(i).GetState = psPaused))
and
((item = -1) or
(CurrentPlaylist.IndexOf(PlaybackControl(pc).GetPlayer(i).GetItem) < item))
then begin
player := i;
item := CurrentPlaylist.IndexOf(PlaybackControl(pc).GetPlayer(i).GetItem);
end;
if (player = -1) then
SystemLog('Keinen freien Player gefunden.')
else begin
PlaybackControl(pc).GetPlayer(player).Start;
for i := 0 to PlaybackControl(pc).GetPlayerCount - 2 do
if i <> player then begin
if PlaybackControl(pc).GetPlayer(i).GetItem <> nil then
PlaybackControl(pc).GetPlayer(i).GetItem.SetFadeDuration(10000000);
PlaybackControl(pc).GetPlayer(i).FadeOut;
end;
end;
end.[/code]
Zusätzlich kommt folgende Fehlermeldung:
19.06.2010 12:20:23 Fehler Fehler beim Ausführen des Scripts D:\Sicherung\mAirList\Skripte\next.mls: Laufzeitfehler: (49, 11) Exception: Access violation at address 00407AD5 in module ‘mAirList.exe’. Read of address 00000000
Das Skript nutze ich nur noch deshalb, weil es dem Player sagt, er soll eine Sekunde faden. Die in der config-festgelegte Fade-Zeit ist aber bei drei Sekunden, weil ich das so brauche. Insofern hilft mir das Skript, eine von der Standard-Fade-Zeit losgelöste Next-Fade-Zeit festzulegen. Oder ist dir da ein einfacherer Weg zusammen mit PLAYLIST 1 NEXT bekannt?
Naja, das Script könnte einfach auf allen laufenden Playern die Fade-Zeit entsprechend setzen und danach PLAYLIST 1 NEXT ausführen. Würde das Script sehr vereinfachen
var
i: integer;
begin
for i := 0 to CurrentPlaybackControl.GetPlayerCount - 1 do
if CurrentPlaybackControl.GetPlayer(i).GetState = psPlaying then
CurrentPlaybackControl.GetPlayer(i).GetItem.SetFadeDuration(10000000);
ExecuteCommand('PLAYLIST 1 NEXT');
end.
Wenn’s nicht geht, selbst korrigieren oder altes Script benutzen
Noch ein Hinweis am Rande für ambitionierte Script-Programmierer: Eigentlich müsste die Abfrage “GetState” und dem Bearbeiten des Elementes mit “GetItem” noch in einen BeginRead/EndRead-Block setzen, denn durch die neue Nebenläufigkeit kann es theoretisch (!) vorkommen, dass der Player sich genau zwischen diesen beiden Befehlen entlädt und der zweite dann ins Leere läuft => Access Violation. Ist aber hier relativ unwahrscheinlich, zumal das Script ja offenbar manuell gestartet wird.