Background Script - Cartwall EOF Warnung geht nicht

Hallo,
bevor ich hier loslege wollte ich mich erstmal kurz vorstellen. Also ich bin der Frank aus der Nähe von Düsseldorf, 55 Jahre jung und Elektroniker. Ich habe hier im Forum schon oft gesucht und bin bis jetzt auch immer fündig geworden, dafür vielen Dank und auch für die vielen interessanten Beiträge, die ich hier gelesen habe. Tolles Forum mit kompetenter Hilfe.
Nun zu meinem (kleinen) Problem. In der Suche bin ich zur 5er Version fündig geworden, allerdings geht das in meiner 6.2.1 Build 4117 Version leider nicht. Ich habe im Background Script 3 Aufrufe zur Cartwall, die nicht gehen:

// Called when cart player is started
procedure OnCartwallPlayerStart(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem);
begin
   COMPORT('COM1').SendStr('4'); //01.04.2020
end;

// Called when cart player is stopped
procedure OnCartwallPlayerStop(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem; Duration: TTimeValue);
begin
    COMPORT('COM1').SendStr('d'); // Cart Player stopp 01.04.2020
end;

// Called when cart player reaches EOF warning point
procedure OnCartwallPlayerEOFWarning(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem);
begin
    COMPORT('COM1').SendStr('D'); //01.04.2020
end;

Alternativ bin ich ausgewichen auf folgenden Aufruf, das geht auch mit Start / Stopp, aber die EOF Warnung fehlt mir leider:

procedure OnCartwallPlayerStateChange(PlayerIndex: integer;
  OldState: TPlayerState; NewState: TPlayerState;
  Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem;
  OnAirMode: TCartwallOnAirMode);

Gibt es da irgendeine Möglichkeit, die ich vielleicht übersehen habe?
Danke.

LG Frank


EDIT by Mod - Code formatiert. Bitte das Formatierungszeichen </> im Editfenster benutzen. Das erhöht die Lesbarkeit.
Danke. :slightly_smiling_face:

Moin Frank,

damit müßte es folgendermaßen aussehen:

procedure OnCartwallPlayerStateChange(PlayerIndex: integer;
  OldState: TPlayerState; NewState: TPlayerState;
  Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem;
  OnAirMode: TCartwallOnAirMode);
begin
  if NewState = psPlaying then
  begin
    ComPort('COM1').SendStr('4');
  end
  else if NewState = psStopped then
  begin
    ComPort('COM1').SendStr('d');
  end
  else if NewState = psFlashEOF then
  begin
    ComPort('COM1').SendStr('D');
  end;
end;

begin
end.


Angewandte Grüße

TSD


Nicht nur das: Der Code wird auch nicht beschädigt (Einrückungen, Satzzeichen usw.).

Hallo,

erstmal Danke für die schnelle Hilfe und für die Hinweise zur Lesbarkeit, ich versuche sie zu beherzigen. :grinning:
Ich habe das gerade probiert, aber geht leider nur mit Einschränkungen. Start + Stopp gehen, Blinken macht er leider nicht. Hab die Abfrage zum Blinken mal zum Testen in die Mitte verschoben, hat aber nicht funktioniert. Dann habe ich mal die ASCII Zeichen, die über die COM geschickt werden vertauscht, um sicher zu gehen dass das Kommando “Blinken” (D) an sich von der dahinter liegenden Schaltung auch richtig umgesetzt wird, das hat dann funktioniert.
Sieht so aus, als ob psFlashEOF nicht unterstützt wird.
Kurze Frage dazu, gibt es irgendwo eine Übersicht dazu, also welche “Zustände” in den Prozeduren unterstützt werden?

LG

Verständnisfrage: Blinkt es nicht oder reagiert das Skript nicht auf Blinken? Im ersten Fall bitte prüfen, ob Endblinken überhaupt eingeschaltet ist:



Aktivierte Grüße

TSD

Hallo Tondose,

die Einstellungen die Du hier als Screenshoot abgelegt hast, sind bei mir genauso, nur die EOF Warnung steht auf 10S (Standard). Haken bei "während EOF-Warnung blinken" ist gesetzt (Standard).
Mairlist GUI blinkt auch, aber das Script reagiert leider nicht.
Gruß Frank

OnCartwallPlayerEOFWarning ist richtig, war aber offenbar kaputt. Ich lade gerade Snapshot Build 4177 von 6.2 noch, bitte schau mal, ob es da wieder geht. Fließt dann automatisch auch mit in die 6.3 ein.

Dann reiche ich das mal weiter @Torben.

Ratlose Grüße

TSD


Ach ja, PlayerStates gibt es in dieser nicht eben einleuchtenden Hilfedatei:

mAirListScript.chm.mls (615,8 KB)

(Weil das Forum beim Hochlad meckert, bitte im Dateinamen das .mls löschen.)

Prima,

werde ich heute Abend probieren und Feedback geben, muss nun zur Arbeit.

Vielen Dank an euch 2, für die Unterstützung.

LG Frank

Boah, überschneidet sich das hier! :upside_down_face:

Noch bezüglich der Player-Zustände:

TPlayerState = (
  psEmpty,
  psLoading,
  psLoaded,
  psPlaying,
  psFading,
  psEOF,
  psError,
  psPaused,
  psStopped,
  // virtual states
  psPFL,
  psFlashEOF,
  psNext,
  psPlayed,
  psSkipped,
  psOverflow,
  psUnderrun,
  psRegion,
  psOffAir // for cartwall
);

Alle von “psPFL” abwärts sind “virtuelle” Zustände; die kommen in der Realität (OnPlayerStateChange etc.) nicht vor. Sie sind nur als TPlayerState modelliert, weil so das Auslesen und Verarbeiten der skin.ini vereinfacht wird. Ihr könnt sie in euren Scripts einfach ignorieren.

1 Like

Das heißt,

if NewState = psFlashEOF then …

hätte nicht funktioniert?

Unsichere Grüße

TSD

Genau. Bitte einfach ignorieren.

Hallo,
habe es ausprobiert und kann sagen, dass nun die 3 Aufrufe funktionieren, super :+1:
Getestet mit Snapshot Build 4177 von Version 6.2.

Preformatted text// Called when cart player is started
procedure OnCartwallPlayerStart(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem);
begin
   COMPORT('COM1').SendStr('4'); //01.04.2020
end;

// Called when cart player is stopped
procedure OnCartwallPlayerStop(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem; Duration: TTimeValue);
begin
    COMPORT('COM1').SendStr('d'); // Cart Player stopp 01.04.2020
end;

// Called when cart player reaches EOF warning point
procedure OnCartwallPlayerEOFWarning(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem);
begin
    COMPORT('COM1').SendStr('D'); //01.04.2020
end;

Vielen Dank für die Hilfe und für die Übersicht der einzelnen Player-Zustände.
LG Frank

Guten Morgen,

gelten die Zustände noch als aktuell oder sind die teilweise (wie ich vermute) in die Prozeduren ausgelagert?

zumindest find ich diese
... OnPlayerStart ...
... OnPlayerEOFWarning ...
... OnPlayerStop ...

Hiermal mein Code:

procedure OnPlayerStateChange(PlaylistIndex: integer; PlayerIndex: integer; OldState: TPlayerState; NewState: TPlayerState; Item: IPlaylistItem);
begin

// PLAYER 2
  // EMPTY
  if (PlayerIndex = 1) and (NewState = psEmpty) then begin
    MidiOut(APCMini, bright100, 01, off);
  end;

  // LOADING
  if (PlayerIndex = 1) and (NewState = psLoading) then begin
    MidiOut(APCMini, bright100, 01, blue);
  end;

  // LOADED
  if (PlayerIndex = 1) and (NewState = psLoaded) then begin
    MidiOut(APCMini, bright100, 01, yellow);
  end;

  // PLAYING
  if (PlayerIndex = 1) and (NewState = psPlaying) then begin
    MidiOut(APCMini, pulse2, 01, green);
  end;

  // PAUSED
  if (PlayerIndex = 1) and (NewState = psPaused) then begin
    MidiOut(APCMini, pulse8, 01, yellow);
  end;

  // FADING
  if (PlayerIndex = 1) and (NewState = psFading) then begin
    MidiOut(APCMini, blink24, 01, red);
  end;

  // EOF
  if (PlayerIndex = 1) and (NewState = psEOF) then begin
    MidiOut(APCMini, blink8, 01, red);
  end;

  // STOPPED
  if (PlayerIndex = 1) and (NewState = psStopped) then begin
    MidiOut(APCMini, pulse8, 01, red);
  end;

  // ERROR
  if (PlayerIndex = 1) and (NewState = psError) then begin
    EnableTimerEx('Error01Blink', 100);
  end;

end;

Alle funktionieren (soweit ich testen konnte) bis auf // EOF

  1. mach ich ein Fehler?
  2. kann ich irgendwie ein // ERROR provozieren, damit ich die vorgänge prüfen kann?

LG und guts nächtle euch (zumindest für mich aktuell)

Das sollte alles noch so funktionieren in den aktuellen Versionen. Auch psEOF.

Probier doch mal mit

SystemLog(IntToStr(ord(NewState)));

den neuen Status - als Zahl (Nummerierung beginnt bei 0) - ins Systemprotokoll schreiben zu lassen.

moin danke für Die Antwort

ich habe Songs abgespielt und Protokoll beobachtet

in der Automation:


Wechsel zwischen Assist und Automation:
image


im Assist:


Also kurz um 0, 2, 3, 4, 5, 8 werden übermittelt.

Wenn ich richtig gezählt habe, ist psEOF = 5, also scheint es anzukommen.

Hier nochmal die Liste:

  TPlayerState = (
    psEmpty,
    psLoading,
    psLoaded,
    psPlaying,
    psFading,
    psEOF,
    psError,
    psPaused,
    psStopped,
    // virtual states
    psPFL,
    psFlashEOF,
    psNext,
    psPlayed,
    psSkipped,
    psOverflow,
    psRegion,
    psOffAir // for cartwall
  );

Die unteren als “virtual” gekennzeichneten (psPFL und folgende) wirst du in der Realität nie antreffen, sie dienen nur der einfacheren Verarbeitung der Skin.

genau

5 ist korrekt

image

berichtigt mich bitte falls ich falsch liege

In der Prozedure OnPlayerEOFWarning ist es 10 sekunden (oder wie in Konfig eingestellt) vor EndOfFile

und psEOF reagiert genau auf “stop” weil Stop das “EndOfFile” ist

Also heißt es wenn ich es VOR EOF “blinken” lassen will muss ich die OnPlayerEOFWarning nutzen

korrekt?