Cartwall versteht sich nicht mehr mit DHD (Script)

Liebe Kolleginnen und Kollegen,

nach dem Update von 5.3 auf 6.2 verstehen sich Cartwall und DHD nicht mehr über das Script.
Die Fader auf dem DHD werden nicht mehr bei Klick an bzw. automatisch nach Ende des Jingles ausgeschaltet.

Kann wer helfen?

Hier das Script:

procedure OnCartwallPlayerStart(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem);
begin
if (PlayerIndex = 1) then
begin
DHDRemote(0).SetFaderOn(4101, true);
end;
if (PlayerIndex = 2) then
begin
DHDRemote(0).SetFaderOn(4102, true);
end;
if (PlayerIndex = 3) then
begin
DHDRemote(0).SetFaderOn(4103, true);
end;
if (PlayerIndex = 4) then
begin
DHDRemote(0).SetFaderOn(4104, true);
end;
end;

// Called when cart player is stopped
procedure OnCartwallPlayerStop(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem; Duration: TTimeValue);
begin
if (PlayerIndex = 1) then
begin
DHDRemote(0).SetFaderOn(4101, false);
end;
if (PlayerIndex = 2) then
begin
DHDRemote(0).SetFaderOn(4102, false);
end;
if (PlayerIndex = 3) then
begin
DHDRemote(0).SetFaderOn(4103, false);
end;
if (PlayerIndex = 4) then
begin
DHDRemote(0).SetFaderOn(4104, false);
end;
end;

Das Script sieht erstmal korrekt aus. Kannst du mal etwas Debugging-Code einbauen um herauszufinden, ob die Prozedur überhaupt aufgerufen wird? Also sowas hier:

procedure OnCartwallPlayerStart(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem);
begin
  SystemLog('Start: ' + IntToStr(PlayerIndex));
  // ..
  // und hier dann der Rest wie oben
  // ..
end;

Irgendwo hab ich einen Fehler, den ich als Script-U-Boot leider nicht identifizieren kann.
“Identifier expected” lautet der Fehler.

procedure OnCartwallPlayerStart(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem);
begin
SystemLog('Start: ’ + IntToStr(PlayerIndex));
// …
// procedure OnCartwallPlayerStart(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem);
begin
if (PlayerIndex = 1) then
begin
DHDRemote(0).SetFaderOn(4101, true);
end;
if (PlayerIndex = 2) then
begin
DHDRemote(0).SetFaderOn(4102, true);
end;
if (PlayerIndex = 3) then
begin
DHDRemote(0).SetFaderOn(4103, true);
end;
if (PlayerIndex = 4) then
begin
DHDRemote(0).SetFaderOn(4104, true);
end;
end;

// Called when cart player is stopped
procedure OnCartwallPlayerStop(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem; Duration: TTimeValue);
begin
if (PlayerIndex = 1) then
begin
DHDRemote(0).SetFaderOn(4101, false);
end;
if (PlayerIndex = 2) then
begin
DHDRemote(0).SetFaderOn(4102, false);
end;
if (PlayerIndex = 3) then
begin
DHDRemote(0).SetFaderOn(4103, false);
end;
if (PlayerIndex = 4) then
begin
DHDRemote(0).SetFaderOn(4104, false);
end;
end;
// …
end;


    procedure OnCartwallPlayerStart(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem);
    begin
    SystemLog('Start: ’ + IntToStr(PlayerIndex));
    // …
    // procedure OnCartwallPlayerStart(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem);
    begin                       // <=== Dieses 'begin' ist zuviel. 
    if (PlayerIndex = 1) then
   // usw.
    end;
    end;

Du hast durch rabiates Cut-and-Paste ein begin zuviel eingebaut.

Anmerkung: Es ist dem Lesen förderlich, wenn Du beim Posten des Codes ihn als solchen auszeichnest, mit dem Button </> im Editfeld zum Beispiel.

Und wenn Du eine Fehlermeldung postest, dann bitte die Ortsangabe dazuschreiben, die immer mitgeliefert wird, etwa (6:4) usw.

Hoffentlich herausgefundene Grüße

TSD


P.S.: Die Anmerkung liest sich furchtbar schulmeisterlich, ist aber gar nicht so gemeint, sondern als freundliche Bitte gedacht!

Wenn ich das begin an der angegeben Stelle lösche, dann mault er, dass ein begin fehlt (46:1)

Der Identifier expected ist (26:1).

Oha! Sorry, das habe ich aus der Lameng geschossen. Ich kann das aber von unterwegs aus gerade nicht weiterverfolgen.

Mobile Grüße

TSD

Das begin ist tatsächlich überzählig, dazu kommt noch ein end;, welches ebenfalls zuviel ist. Ich hoffe, Du hast die richtigen Hochkommata gesetzt (solche: '), das tolle Forenprogramm zerschießt sie sofort, wenn man nicht als Code einfügt. Etwas bereinigt sähe der Code so aus (wiederum ungetestet, habe hier mAirList zum Ausprobieren nicht zur Verfügung);

procedure OnCartwallPlayerStart(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem);
begin
  SystemLog('Start: ' + IntToStr(PlayerIndex));
  if (PlayerIndex = 0) then
  begin
    DHDRemote(0).SetFaderOn(4101, true);
  end;
  if (PlayerIndex = 1) then
  begin
    DHDRemote(0).SetFaderOn(4102, true);
  end;
  if (PlayerIndex = 2) then
  begin
    DHDRemote(0).SetFaderOn(4103, true);
  end;
  if (PlayerIndex = 3) then
  begin
    DHDRemote(0).SetFaderOn(4104, true);
  end;
end;

procedure OnCartwallPlayerStop(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem; Duration:TTimeValue);
begin
  if (PlayerIndex = 0) then
  begin
    DHDRemote(0).SetFaderOn(4101, false);
  end;
  if (PlayerIndex = 1) then
  begin
    DHDRemote(0).SetFaderOn(4102, false);
  end;
  if (PlayerIndex = 2) then
  begin
    DHDRemote(0).SetFaderOn(4103, false);
  end;
  if (PlayerIndex = 3) then
  begin
    DHDRemote(0).SetFaderOn(4104, false);
  end;
end;
   
begin
end.


Korrigierte Grüße

TSD


Edit: Meinem Verständnis nach sind die PlayerIndizes nullbasiert, also Index von Player 1 = 0. Habe ich oben geändert.

Und wenn wir schon beim Skripten sind, könntest Du auch mal den vereinfachten Code probieren (‘Just to please me, James!’, würde Miss Sophie sagen):

procedure OnCartwallPlayerStart(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem);
begin
  SystemLog('Start: ' + IntToStr(PlayerIndex));
  DHDRemote(0).SetFaderOn(4101 + PlayerIndex, true);
end;

procedure OnCartwallPlayerStop(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem; Duration:TTimeValue);
begin
  SystemLog('Stop: ' + IntToStr(PlayerIndex));
  DHDRemote(0).SetFaderOn(4101 + PlayerIndex, false);
end;
   
begin
end.

Danke für die Codes!
Habe beide probiert und laut Systemprotokoll scheint es zu funktionieren:

2019-10-21 18:06:38 Information Hintergrund-Script C:\ProgramData\mAirList\6.2\DHD_CartwallScript.mls wurde geladen
2019-10-21 18:06:38 Information Hintergrund-Script C:\ProgramData\mAirList\6.2\DHD_EOF.mls wurde geladen
2019-10-21 18:06:43 Playlist Start: D:\Jingles\Dateien\Jingle_Offizielle RK Playlist_Paris Grit.mp3
2019-10-21 18:06:56 Playlist Stop: D:\Jingles\Dateien\Jingle_Offizielle RK Playlist_Paris Grit.mp3 (13 seconds)

Leider geht auf dem DHD der Player trotzdem nicht an.

Hm. Geladen wird es wohl, aber es tut sich sonst recht wenig. Zum Beispiel müßte im Log noch stehen:

2019-10-21 18:06:43 Information Start: 0

bzw. Stop: 0 (oder welchen Player Du auch immer verwendet hast). Das ist (bzw. sollte sein) die Wirkung der Zeile, die Dich @Torben bat einzubauen (und die ich eigenmächtig noch um den Eintrag bei Stop erweitert hatte). Es scheint so, als würde der Prozeduraufruf von mAirList nicht bis zum Skript durchgereicht. Dahinter zu kommen, ist allerdings doch mehr Sache für den Boss …

Inkompetente Grüße

TSD

Auf was steht die Einstellung “Nummerierung” in der Cartwall-Konfiguration?

Ich hab auch im 5.3 Systemlog nachgesehen, da steht das gleiche - es funktioniert aber.

Die “Nummerierung” steht auf links nach rechts.

Gibt es zu dem Thema eine Lösung, @Torben?
Das ist nämlich sehr unpraktisch und wird die Moderatoren auch mehr als aus der Bahn werfen, wenn sie immer den Channel abdrehen müssen, wenn der Jingle vorbei ist.

Sorry, hat etwas gedauert, war auf dem falschem Damper und hatte demnach an der falschen Stelle gesucht. Bitte teste einmal Snapshot 4143, dort müsste es wieder gehen.

Leider nicht.
Der Fader springt beim Start zwar auf ON, aber wenn der Jingle aus ist, springt der Fader nicht auf OFF.

Hier nochmal mein Code (der vereinfachte von TSD führt dazu, dass andere Fader ON gehen etc… ganz komisch):

procedure OnCartwallPlayerStart(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem);
begin
	if (PlayerIndex = 1) then
		begin
		DHDRemote(0).SetFaderOn(4101, true);
		end;
	if (PlayerIndex = 2) then
		begin
		DHDRemote(0).SetFaderOn(4102, true);
		end;
	if (PlayerIndex = 3) then
		begin
		DHDRemote(0).SetFaderOn(4103, true);
		end;
	if (PlayerIndex = 4) then
		begin
		DHDRemote(0).SetFaderOn(4104, true);
		end;
end;

// Called when cart player is stopped
procedure OnCartwallPlayerStop(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem; Duration: TTimeValue);
begin
	if (PlayerIndex = 1) then
		begin
		DHDRemote(0).SetFaderOn(4101, false);
		end;
	if (PlayerIndex = 2) then
		begin
		DHDRemote(0).SetFaderOn(4102, false);
		end;
	if (PlayerIndex = 3) then
		begin
		DHDRemote(0).SetFaderOn(4103, false);
		end;
	if (PlayerIndex = 4) then
		begin
		DHDRemote(0).SetFaderOn(4104, false);
		end;
end;

:

Dann sind wir auf dem richtigen Weg :slight_smile:

Nun Build 4144 testen bitte.

Das erscheint mir seltsam – @Torben, könntest Du mal bitte kurz schauen woran es liegen könnte? Danke!

Neugierige Grüße

TSD

Falsch berechnet. Wenn der erste Fader 4101 ist, und PlayerIndex 1-basiert, dann muss es natürlich 4100+PlayerIndex heißen und nicht 4101+PlayerIndex.

1 Like

Danke. Ich ging davon aus, der PlayerIndex sei nullbasiert.

Erhellte Grüße

TSD


Nachtrag: Falls @pas_onair es mal ausprobieren mag, hier wäre eine korrigierte Fassung:

procedure OnCartwallPlayerStart(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem);
begin
  SystemLog('Start: ' + IntToStr(PlayerIndex));
  DHDRemote(0).SetFaderOn(4100 + PlayerIndex, true);
end;

procedure OnCartwallPlayerStop(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem; Duration:TTimeValue);
begin
  SystemLog('Stop: ' + IntToStr(PlayerIndex));
  DHDRemote(0).SetFaderOn(4100 + PlayerIndex, false);
end;
   
begin
end.

Noch ein Nachtrag: Falls alles zur Zufriedenheit funktioniert, könnte man die beiden Zeilen mit SystemLog(…) auch weglassen.

Schlanke Grüße

TSD

Paaarrrttyyyy!
Jetzt läuft wieder alles!

Vielen Dank Torben und Tondose. Hab auch das vereinfachte Script probiert - jetzt läuft es perfekt.
Und nun wird auch im Systemprotokoll “Start: 1” etc. angezeigt.

2 Likes