Ausblenden mit Next-Skript funktioniert nicht mehr

Hallo Torben,

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

Kannst du das mal checken?

Das Script-Update war nicht ganz aktuell. Build 741 liegt bereit.

Wie unterscheidet sich dein Script eigentlich von PLAYLIST 1 NEXT?

Danke, jetzt geht’s wieder.

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. :slight_smile: Oder ist dir da ein einfacherer Weg zusammen mit PLAYLIST 1 NEXT bekannt? :slight_smile:

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 :wink:

Dann müsstest du mir helfen, wenn’s nicht zu viel Arbeit macht. :slight_smile: Ich verstehe leider nichts von der Skriptsprache…

Aus dem Kopf und ungetestet:

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 :wink:

Geht. Danke! :smiley:

Super.

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.