Ständig "Keine Rückmeldung", ewige Reaktionszeiten und durcheinander in den Titeln

Dieses snippet sieht nicht nach dem aktuellen Template aus, das ist irgendwas relativ altes.

procedure OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer);
begin
  ShellExecute ('C:\ProgramData\mAirList\6.1\sfk174.exe', 'udpsend 192.168.51.103 3310 "LED2:ON"');
  SystemLog ('C:\ProgramData\mAirList\6.1\sfk174.exe udpsend 192.168.51.103 3310 "LED2:ON"');
end;

Ich habe das mal schnell aus diesem Faden hier abgeschrieben.

Was wäre denn die Alternative dazu?
Ach so sorry, dein zweiter Code ist die Version wie es richtig ist? @shorty.xs

Ich habe aus:

procedure OnPlayerEOFWarning(PlaylistIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);
begin
Item := PlaybackControl(PlaylistIndex).GetPlayer (PlayerIndex) .GetItem;
if (Item.GetItemType = pitMusic) then begin
  ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 4"');
  SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 4"');
end;

Jetzt mal

procedure OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem);
begin
if (Item.GetItemType = pitMusic) then begin
  ShellExecuteHidden ('C:\tools\sfk.exe', 'udpsend 127.0.0.1 51235 "BANK-PRESS 1 4"');
  SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 4"');
end;

gemacht.
Immerhin ist der Fehler weg, der beim Laden des Scriptes angezeigt wurde. Nun kommt im “Auslösemoment” des EOF folgende Meldung:
23.09.2021 20:57:48 Fehler Runtime error “Null Pointer Exception” in background script R:#PC-Config\mAirlist\Master-Scripts\QLCRemote-via-Companion.mls (line 73, column 1) handling message:

Muss vor der if Abfrage vermutlich stehen bleiben.

1 Like

Das Funktioniert, jetzt kommt aber ein neuer Fehler

23.09.2021 21:12:14 Fehler       Runtime error "List index out of bounds (6)" in background script C:\Scripts\QLCRemote-via-Companion.mls, handling message: PLAYERCONTROL_EOFWARNING 43CBF91C3056D191 00 00000000 00000001

Ich habe das Scrippt mittlerweile auch mal auf den lokalen PC verschoben um Netzwerk-Fehler auszuschließen.

GetItem liefert keinen String mehr zurück, wenn ich diesen Beitrag von @Tondose hier richtig lese.

Bin hier gerade nur eingeschränkt handlungsfähig mit dem Tablet.

Ersetze mal pitMusic durch 1

Das Script scheint schon sehr alt zu sein. Da hast Du noch einiges an Arbeit vor Dir.

Edit, hat nichts mit dem Problem zu tun: Da hängt QLC oder QLC plus dahinter? Über welche Schnittstelle nimmt das die Daten entgegen?

Ja tut es. Aber auf einem RaspberryPi. Die Eingaben im Script gehen an sfk.exe und dieses sendet die Befehle an Companion weiter, welches Art-Net Kanäle verändert.

Zwischenfrage: Hat sich denn mittlerweile das Startverhalten von mAirList geändert oder läuft immer noch alles sehr schleppend?

Das hat sich etwas beschleunigt, nachdem ich eine Server-Datenbank deaktiviert habe.

1 Like

Nein, Item wird doch schon im Prozeduraufruf mitgeliefert. Das noch einmal zu definieren ist sinnlos.

Weiter:

  • Der Prozeduraufruf
    procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);
     
    ist falsch. Es muß laut Background Script Template.mls heißen:
     
    procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem);

    • In der Zeile
      SystemLog ('C:\tools\sfk.exe udpsend 127.0.0.1 51235 "BANK-PRESS 1 1"')
       
      fehlt das abschließende Semikolon.

 

  • Der Prozeduraufruf
    procedure OnPlayerEOFWarning(PlaylistIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);
     
    ist falsch. Es muß laut Background Script Template.mls heißen:
     
    OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer);

    • In der Zeile
      Item := PlaybackControl(PlaylistIndex).GetPlayer(Player-Index) .GetItem;
       
      ist die Variable Player-Index nicht definiert. Es müßte heißen: PlayerIndex. Ist aber egal, da …
       
    • … die beiden Zeilen, die mit Item := beginnen, zu tilgen sind (siehe oben).

 

  • Am Schluß des Skripts fehlt
     
    begin
    end.
     

  • Statt procedure OnStartup würde ich die procedure OnLoad verwenden.
     

  • Inwieweit die Programmausführung von sfk.exe die Leistung des Sytems beeinflußt, ist zu klären.
     

  • Anmerkung: procedure OnPFLOn und procedure OnPFLOff senden jeweils denselben Befehl über sfk.exe. Inwieweit das sinnvoll ist, mußt Du selber wissen.

3 Likes

Danke @Tondose Ich nutze sfk.exe ja auch, nur nicht ganz so exzessiv. Ich konnte da keine Performance Verluste feststellen. Die OBS Fernsteuerung zickt da schon eher, die bleibt nämlich hängen, wenn OBS nicht antwortet/ nicht läuft.
Trotzdem, kann mAirlist nicht direkt UDP Pakete senden und man kann sfk weg lassen?

Was zum teufel ist eigentlich dieses „Companion“? Übersetzt sich als Begleiter, Weggefährte. Im Modellnau kenne ich die 9x companion.
Wird mit dem eigentlichen Problem nichts zu tun haben aber wenn schon, hätte ich versucht, QLC+ irgendwie direkt anzusteuern.
Artnet oder OSC sind ja auch nur UDP Pakete, die muss man zwar einmal ermitteln aber so spart man sich den Umweg über noch ein Stück Software dazwischen.

Grundsätzlich ja. Dann müsste man die OSC-Pakete irgendwie von Hand (binär) im Script zusammenbauen.

OSC-Fernsteuerung ist in Planung aber (wie so vieles) noch nicht fertig.

Eine alternative Steuersoftware für das Elgato Streamdeck.

Aber jetzt machen wir erstmal das.

2 Likes

Korrektur:

Item wird bei der EOF-Prozedur nicht mitgeliefert. (Habe ich mit der Prozedur für die Cartwall verwechselt, sorry.) Item muß also tatsächlich einmal (!) definiert werden, allerdings in folgender Form:

procedure OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer);
var
  Item: IPlaylistItem;
begin
  Item := PlaybackControl(PlaylistIndex).GetPlayer(PlayerIndex).GetItem;
  if (Item.GetItemType = pitMusic) then begin
    // usw.
  end;
end;

(@Torben: Könntest Du in dieser Prozedur das Item nachreichen?)

1 Like

Theoretisch ja, klar. Aber dann kommen wir genau in die Situation bzw. das Problem, das oben beschrieben ist: Alle müssten ihre Scripts anpassen, da sie sich sonst den Speicher zerschießen.

Daher würde ich sowas nur beim nächsten großen Versionssprung machen (in der Hoffnung, dass alle das Changelog lesen); oder in Form einer zweiten Variante OnPlayerEOFWarning2.

Na, dann warten wir mal auf den Versionssprung …

Das ist um einen virtuellen Schalter ein- und wieder auszuschalten.

Entschuldigt bitte, wenn ich die nächsten Tage sehr inaktiv sein werde, ich bin da leider nicht mehr in der Nähe des Studios. Ich habe das Script aber dabei um eure Verbesserungen (Vielen vielen Dank dafür!!!) einzuarbeiten.

Eine meiner Lieblingsstellen. Danke.

1 Like

Ich bin nun wieder aktiver und auch wieder beim Studio.

Um die Diskussion wieder zum Laufen zu bringen und vor allem meine Probleme zu lösen würde ich gerne wissen, wie ich das Script anpassen muss, damit mAirlist wieder flüssig und ohne Fehler läuft?

Viele Grüße
Dennis