bestehendes Script aktualisieren

Hallo Freunde,

mit der derzeitigen Version und der Überarbeitung der Playlist, wird dieses Script nicht mehr ordnungsgemäß ausgeführt:

[code]procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer);
var
i: integer;
ii: integer;

begin
for i := 0 to Engine.GetPlayBackControl(0).GetPlayerCount - 1 do
begin
if i <> PlayerIndex then
Engine.GetPlaybackControl(0).GetPlayer(i).Stop;
end;

for ii := 0 to Engine.GetCartwallControl.GetPlayerCount - 1 do
  Engine.GetCartwallControl.GetPlayer(ii).FadeOut;

end;

begin
end.[/code]

Nun hatte ich mir überlegt das Script folgendermaßen umzuschreiben, um es evtl. wieder zum Laufen zu bringen:

[code]procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem);
var
i: integer;
ii: integer;

begin
for i := 0 to Engine.GetPlayBackControl(0).GetPlayerCount - 1 do
begin
if i <> PlayerIndex then
Engine.GetPlaybackControl(0).GetPlayer(i).Stop;
end;

for ii := 0 to Engine.GetCartwallControl.GetPlayerCount - 1 do
  Engine.GetCartwallControl.GetCartPlayerControl.FadeOut;

end;

procedure OnCartPlayerStart(PlayerIndex: integer; Item: IPlaylistItem);
var
i: integer;
ii: integer;

begin
for i := 0 to Engine.GetPlayBackControl(0).GetPlayerCount - 1 do
begin
if i <> PlayerIndex then
Engine.GetPlaybackControl(0).GetPlayer(i).Stop;
end;

for ii := 0 to Engine.GetCartwallControl.GetPlayerCount - 1 do
  Engine.GetCartwallControl.GetCartPlayerControl.FadeOut;

end;

begin
end.[/code]

Nochmal zur Erklärung. Ich möchte bei Start eines Players, dass die Cartwall (egal wie viele Carts aktiv sind) ausgefadet werden und die Player sobald ich eine Cartwall starte sofort stoppen. :-\

Ach ja, die Fehlermeldungs lautet, obwohl es in der CHM-Datei aufgelistet ist:

Unknown identifier 'GETCARTPLAYERCONTROL'

Seit der neuen v5-Cartwall haben sich die Interna der Cartwall verändert, da muss man die Scripts wirklich umprogrammieren. OnCartPlayerStart gibt es nicht mehr, nur noch ein allgemeines OnCartwallPlayerStateChange, wo man nach dem entsprechenden Zustand filtern muss.

procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem);
begin
  ExecuteCommand('CARTWALL FADEOUT ALL');
end;
und die Player sobald ich eine Cartwall starte sofort stoppen. :-\
procedure OnCartwallPlayerStateChange(PlayerIndex: integer; OldState: TPlayerState; NewState: TPlayerState;
      Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem; OnAirMode: TCartwallOnAirMode);
begin
  if (NewState = psPlaying) and (OnAirMode = oamOnAir) then begin
    ExecuteCommand('PLAYER 1-1 STOP');
    ExecuteCommand('PLAYER 1-2 STOP');
    // ggf. ergänzen falls mehr als zwei Player
  end;
end;

Vielen Dank, Torben.

Die ExecuteCommand-Geschichten macht das Script weitaus einfacher und schöner. Aber auf die Programmierung für OnCartwallPlayerStateChange mit if Abfrage wäre ich nicht gekommen. :-[

Danke nochmal.

Müsste im aktuellen Background Script Template.mls so stehen.

Zu OnCartwallPlayerStateChange sei noch angemerkt, dass sich das immer auf die aktuelle Seite bezieht. Wenn du also mehrere Cartwall-Seiten geöffnet hast, irgendwo ein Player läuft, und du dann zwischen den Seiten wechselst, dann wirst du immer wieder einen solchen Aufruf sehen (Wechsel von psPlaying nach psStopped und zurück).

Das deshalb, weil diese Prozedur u.a. dafür gedacht ist, Rückmeldungen zum Beispiel für MIDI-Controller zu programmieren, die dann den Status der aktuellen Seite anzeigen.