Ja, sorry das wollte ich euch noch mitteilen. Das war aber auch nur probehalber.
Ich habe mit dem Script tatsächlich so ein paar Probleme. Ich habe jetzt eine Zeile verändert, die in meinen Augen fehlerhaft war, jetzt meckert mAirlist rum dass in dem Script was fehlerhaft ist. Das ist aber auch echt kompliziert mit den Scripts. Ich hab das Script so von jemand anderem übernommen und an meine Bedürfnisse angepasst. Ich versuch mich da mal durchzukämpfen.
MAirlist meckert nicht irgendwie rum, es sagt Dir ziemlich genau wo der Fehler liegt. Allerdings ohne die Meldung und ohne den Quellcode zu kennen, wird Dir hier auch niemand bei dem Problem weiterhelfen können.
Ja ich habe die Stelle auch schon gefunden. Aber ich wüsste nicht wo der Fehler liegen soll.
Das PlayerIndex schmeckt ihm nicht (Unknown Identifier ‘PlayerIndex’). Nehme ich es raus, kommt die Fehlermeldung Invalid number of parameters.
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;
Hast du die Datei Background Script Template.mls
gefunden?
Bei einer Standardinstallation liegt sie im Verzeichnis C:\Program Files (x86)\mAirList 6.3 Randnotiz: Mein Windows Explorer hat für so etwas u.a. eine Suchfunktion.
Das fehlerhafte Script:
Wäre es möglich, dass du das hier mal veröffentlichst?
Bitte dazu das Format Code benutzen wie hier von Tondose beschrieben. Das erleichtert das Lesen erheblich.
Wie shorty.xs schon sagte, meckert mAirList nicht einfach rum, sondern teilt dir in der Fehlermeldung recht präzise mit, wo es ein Problem bei der Ausführung des Scripts hat.
Bitte sei doch mal entgegenkommend und lass’ uns nicht ständig um die tanzen.
Ich sehe gerade, du hast zwischenzeitlich geantwortet. Gut!
Vielleicht schaffen wir ja noch mal eine etwas produktivere Zusammenarbeit. Wir sind inzwischen bei Beitrag #45…
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:
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.
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.
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?)
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.