Servus,
ich würde gerne das Beispiel Script für die PFL Notification so umbauen das mAirList (2.2.2) mir den IOW jeweils pro Player schaltet.
Folgendes hab ich schon probiert:
procedure OnPFLOn(PlayerControl: IPlayerControl; Item: IPlaylistItem; PFLCount: integer);
begin
if PFLCount = 1 then
if CurrentPlaybackControl.GetPlayer(0).GetPFL =1 then
IOWarriorRemote(0).SetPort(25, true);
if CurrentPlaybackControl.GetPlayer(1).GetPFL =1 then
IOWarriorRemote(0).SetPort(27, true);
end;
procedure OnPFLOff(PlayerControl: IPlayerControl; Item: IPlaylistItem; PFLCount: integer);
begin
if PFLCount = 0 then
if CurrentPlaybackControl.GetPlayer(0).GetPFL =0 then
IOWarriorRemote(0).SetPort(25, false);
if CurrentPlaybackControl.GetPlayer(1).GetPFL =0 then
IOWarriorRemote(0).SetPort(27, false);
end;
begin
end.
haut aber net hin. Ich bekomme ein ‘Type mismatch’.
Was kann ich tun?
Bei der Fehlermeldung müsste auch die Zeile und Spalte dabeistehen, in der der Fehler aufgetreten ist. Ohne diese Information können wir dir nicht weiterhelfen, schon gar nicht bei dieser alten Programmversion 
achso, sorry, natürlich. War spät gestern.
Der Fehler bezieht sich wohl auf den Boolschen Wert zu GetPFL. Lass ich den Vergleich (=1 oder =0) in der if Abfrage weg dann ist das Script zwar ladbar dann passiert aber beim ausschalten nichts.
Wahrscheinlich möchtest du noch die Zeilen mit “if PFLCount=…” löschen. So wie sie da jetzt stehen, beziehen die sich eh nur noch auf die erste folgende if-Abfrage.
möchte ich das? Klär mich mal auf was da eigentlich gecounted wird.
Das ändert ja dann aber immer noch nichts an meinem “Typ Mismatch” Problem.
Das ist die Gesamtzahl der Player, die derzeit im PFL sind. Das Script ist ursprünglich dafür gedacht, irgendeinen PFL-Weg am Mischer umzuschalten. Daher wird nur was gemacht, wenn der erste Player ins PFL geht (PFLCount=1), und sollte man noch einen zweiten dazuschalten, dann nichts weiter. Umgekehrt genauso, nur wenn PFLCount wieder auf 0 ist, dann umschalten.
In deinem Fall spielt das keine Rolle, weil du dir die Player ja getrennt anguckst.
Zum Type Mismatch: “GetPFL” liefert einen Wert vom Typ “boolean” zurück, du musst also “true” und “false” verwenden statt 1 und 0.
Alternativ mit “not”:
procedure OnPFLOn(PlayerControl: IPlayerControl; Item: IPlaylistItem; PFLCount: integer);
begin
if CurrentPlaybackControl.GetPlayer(0).GetPFL then
IOWarriorRemote(0).SetPort(25, true);
if CurrentPlaybackControl.GetPlayer(1).GetPFL then
IOWarriorRemote(0).SetPort(27, true);
end;
procedure OnPFLOff(PlayerControl: IPlayerControl; Item: IPlaylistItem; PFLCount: integer);
begin
if not CurrentPlaybackControl.GetPlayer(0).GetPFL then
IOWarriorRemote(0).SetPort(25, false);
if not CurrentPlaybackControl.GetPlayer(1).GetPFL then
IOWarriorRemote(0).SetPort(27, false);
end;
Danke für die Info, die Sache funktioniert jetzt. Allerdings musste ich noch was zusätzliches einfügen da mein Mischpult den PFL mittels Impuls an- und auschaltet. Das ganze sieht jetzt so aus:
var
a : integer;
b : integer;
procedure OnPFLOn(PlayerControl: IPlayerControl; Item: IPlaylistItem; PFLCount: integer);
begin
if (CurrentPlaybackControl.GetPlayer(0).GetPFL = true) and (a=0) then begin
a:=1;
IOWarriorRemote(0).SetPort(25, true);
IOWarriorRemote(0).SetPort(25, false);
end;
if (CurrentPlaybackControl.GetPlayer(1).GetPFL = true) and (b=0) then begin
b:=1;
IOWarriorRemote(0).SetPort(27, true);
IOWarriorRemote(0).SetPort(27, false);
end;
end;
procedure OnPFLOff(PlayerControl: IPlayerControl; Item: IPlaylistItem; PFLCount: integer);
begin
if (CurrentPlaybackControl.GetPlayer(0).GetPFL = false) and (a=1) then begin
a:=0;
IOWarriorRemote(0).SetPort(25, true);
IOWarriorRemote(0).SetPort(25, false);
end;
if (CurrentPlaybackControl.GetPlayer(1).GetPFL = false) and (b=1) then begin
b:=0;
IOWarriorRemote(0).SetPort(27, true);
IOWarriorRemote(0).SetPort(27, false);
end;
end;
begin
end.
Zusätzlich dazu muss ich jetzt bevor das “OnPFLOff”-Event eintritt, abfragen ob vom IOW der Port x gerade betätigt wurde, weil wenn JA darf “OnPFLOff” nicht ausgeführt werden. Wie geh ich da vor?
Den Status kannst du mit IOWarriorRemote(0).GetPort(nummer) abfragen, liefert true oder false zurück. Dann einfach an der entsprechenden Stelle in das Script einfügen, zum Beispiel so:
procedure OnPFLOn(PlayerControl: IPlayerControl; Item: IPlaylistItem; PFLCount: integer);
begin
if IOWarriorRemote(0).GetPort(27) then exit;
(der Rest von oben)
end;
Dann springt mAirList sofort aus dem Script raus und führt den Rest nicht aus.
Übrigens, vielleicht ist es lohnenswert, zwischen dem Ein- und dem Ausschalten der Ports noch einen sleep-Befehl (z.b. “sleep(10)” für 10ms) einzubauen, damit der Port auch auf jeden Fall lang genug oben bleibt, damit der Mischer das als Puls erkennt.
die Sache funktioniert.
Nur das mit dem Sleep Befehl tut nicht. Liegt wohl an der 2.2.2, die kennt den noch nicht.