Hilfe bei Script psPaused

Leider komme ich hiermit nicht weiter:

procedure OnCartwallPlayerStateChange(PlayerIndex: integer; OldState: TPlayerState; NewState: TPlayerState; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem; OnAirMode: TCartwallOnAirMode);
begin
if (PlayerIndex = 0) and (NewState = psPlaying) then begin
-> Ausführung
end;

oder

if (PlayerIndex = 0) and (NewState = psPaused) then begin
-> Ausführung
end;

Leider bekomme ich immer ein Runtime Error.
Vielen Dank für die Hilfe.

Moin,

du bekommst einen Runtime Error? Krass. Normalerweise gibt das Systemprotokoll von mAirlist einen genauen Fehlercode aus. Diesen wäre gut zu kennen, um das Problem zu lösen.

Hast du denn das zweite end; in deinem Script gesetzt? Schließlich öffnest du mit zwei begin.

ja das zweite end habe ich gesetzt, alles andere klappt ja auch, das bei Ausführung klappt auch alles.
Nur mit den If komme ich nicht klar.

Ich will halt haben, Play, Stop, EOF, Pause, Leer, das mit Pause und leer klappte leider nicht.
Vielleicht hat jemand eine Idee.

Ich kann dir noch nicht folgen. Kannst du evtl. das ganze Script posten und den Fehlercode des Systemprotokolls angeben?

psPaused und psEmpty klappt also bei dir nicht. Den Zusammenhang mit deiner angemerkten If-Bedingung verstehe ich noch nicht ganz. Was meinst du damit?

Ja, bitte! Bei der Skripterei kommt es auf einzelne Kommata an, daher ist es unmöglich, aus ein paar solitären Zeilen Schlüsse zu ziehen. Wichtig auch das, was Du als Ausführung bezeichnest, denn ein Runtime Error tritt dann auf, wenn der Code zwar die Syntaxprüfung besteht, dann aber etwas tun soll, was per se nicht geht. Und da er ja in Pause etwas anderes tun soll als in Play, kann es auch daran liegen.

Also: Ohne das ganze Skript kommen wir hier nicht weiter.
 

Vollständige Grüße

TSD

Hallo Leute

Danke bis jetzt für die Hilfe, eigentlich seht ihr schon das ganze Script bis auf die Ausführung.
aber hier nochmal alles:

procedure OnPlayerStop(PlaylistIndex: integer; PlayerIndex: integer; Duration: TTimeValue);
begin
if (PlayList(0).GetPlayer(0).GetState = psPaused) then begin
K8055Remote(0).SetDigitalChannel(8);
sleep(1500);
K8055Remote(0).ClearDigitalChannel(2);
end;
end;

Das ist im Systemprotokoll:
23.12.2019 13:51:09 Fehler Runtime error “List index out of bounds (5196341)” in background script C:\mairlist-scripte\led-pause.mls, handling message: PLAYERCONTROL_STOP 02C1623A2E455727 00 00000000 00000000 6,396 ?

Jemand eine Idee?

Moin,

gerne doch.

Tausche mal die Zeile:

procedure OnPlayerStop(PlaylistIndex: integer; PlayerIndex: integer; Duration: TTimeValue);

mit

procedure OnPlayerStop(PlaylistIndex: integer; PlayerIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);

Der Fehler könnte daher rühren, dass für die Prozedur nicht sämtliche Parameter abgefragt/überliefert werden.

Im Programm-Ordner von mAirlist kannst du in der Datei “Background Script Template.mls” sämtliche aktuellen Prozeduren mit deren Parametern einsehen.

Huhu

Hab soeben eine Lösung gefunden, das Script funktioniert, ich sitze nun daran eine endlosschleife zu machen, aber delphi ist nicht meins, ich kenne mich eher mit BASH aus.

Zur Lösung:
procedure OnPlayerStateChange(PlaylistIndex: integer; PlayerIndex: integer; OldState: TPlayerState; NewState: TPlayerState; Item: IPlaylistItem);

und dann immer mit if was man will:
if (NewState = psPlaying) then begin

ich suche nun nur noch die Lösung für eine schleife.
while (NewState = psPaused) do begin
-> ausführung
end;
geht nicht.

Würde es dir was ausmachen, deine Scripte in Code zu formatieren?
Liest sich leichter.

Das Symbol </> in der Leiste des Edit-Fensters ist da hilfreich. :wink:

Beispiel aus einem anderen Beitrag von dir:

procedure OnPlayerStop(PlaylistIndex: integer; PlayerIndex: integer; Duration: TTimeValue);
begin
if (PlayList(0).GetPlayer(0).GetState = psPaused) then begin
K8055Remote(0).SetDigitalChannel(8);
sleep(1500);
K8055Remote(0).ClearDigitalChannel(2);
end;
end;

Vielen Dank. :slightly_smiling_face:

kann ich machen beim nächsten mal.

1 Like

Funktioniert denn

if NewState = psPaused then begin
  // was bei Pause machen
end
else if OldState = psPaused then
  // was machen wenn keine Pause ist
end;


Ersetzte Grüße

TSD

Ich muss das Thema mit einer schleife nochmal aufgreifen,
leider geht es nicht wie erhofft.

if (NewState = psPaused) then
begin
	while not (NewState = psPlaying) or (NewState = psStopped) do
	begin
		K8055Remote(0).SetDigitalChannel(3);
		K8055Remote(0).ClearDigitalChannel(1);
		K8055Remote(0).ClearDigitalChannel(2);
		sleep(250);
		K8055Remote(0).ClearDigitalChannel(3);
		sleep(250);
	end;
end;

Hier Verennt er sich in einer Dauerschleife und kommt nicht mehr raus.
wie kann ich das lösen?

auch das am anfang geht nicht:

while (NewState = psPaused) do
begin
...

ergibt eine Dauerschleife

EDIT by Mod - Script formatiert.

Obwohl du versprochen hattest:

Bitte diesen Beitrag beachten:

Vielen lieben Dank für eure Mitarbeit.

Ah Okay, ich hab es so eingesetzt und es wurde mir mit einrücken angezeigt,
ich war nun ganz verwundert.
Danke für das Editieren.

1 Like