Hallo Robert,
ein Projekt mit einem x32, da muss ich natürlich auch einsteigen. Das Pult interessiert mich und einige Hintergründe, was Du da, wie machen möchtest würden mich ggf. später auch noch interessieren.
Für eine komplettere Lösung wird wahrscheinlich @Tondose noch mal mit einsteigen müssen, ein paar Punkte sind mir dann doch aufgefallen, die noch konzeptionelle Fragen aufwerfen.
Es gibt in mAirlist eine Unterscheidung zwischen PFL und ExtraPFL, das ist historisch gewachsen. PFL Meint das klassische vorhören, einer Quelle auf einem Mixer. Also z.B. einen Deiner Hauptplayer, so wie man es auch bei einem DJ set macht.
Du nutzt hier aber den Befehl für den ExtraPFL, dementsprechend, müsstest Du natürlich auch das Procedure “OnExtraPFLOn” bzw. off benutzen.
Zitat aus dem Background Script Template.mls
// Called when cue editor, mix editor... (but not a player) starts playback
// ExtPFLCount is the number of active such ExtPFL sources
Dementsprechend ein Vergleich des ExtraPFLCount >= 1 oder <= 1
Gut, fangen wir mal an durch zu arbeiten. Unglaubaublich, ich gebe Hineweise zur Script Syntax, man notiere das bitte im Kalender. Ich schweife ab…
Die Variablen Deklaration, kannst Du zusammenfassen:
var
x32pfl, pflon : boolean;
Bei den Midi Nachrichten, weiß ich nicht, ob es so sinnvoll ist, die hier direkt fix zu verdrahten. Wenn dann vermutlich eher so:
//check if X32 is on PFL
procedure OnMidiMessage(Device: integer; Status, Data1, Data2: byte);
begin
if (Status=$B1) and (Data1 = $50) and (Data2= $00) then
x32pfl := true;
end
else if (Status=$B1) and (Data1 = $50) and (Data2= $7F) then
x32pfl := false;
end;
end;
Ich denke da würde ich eher nach diesem Tutorial einen eigenen Befehl stricken. Diesen eigenen Befehl, kannst Du dann in der Fernsteuerung beliebig neu vergeben. Musst also nicht jedes mal ins Script rein, wenn Du hier am Pult noch mal etwas umkonfigurieren möchtes.
procedure OnExecuteCommand(Command: string);
begin
if Command = 'X32 PFL ON' then
x32pfl := true;
end
else if Command = 'X32 PFL OFF' then
x32pfl := false;
end;
end;
Ausserdem möchte ich ja, in dem Moment wo dieser Befehl kommt, immer ein PFL Fenster öffnen, egal was sonst gerade war und wenn eins offen ist, möchte ich beim ausschalten, dass das auch immer zu geht.
procedure OnExecuteCommand(Command: string);
begin
if Command = 'X32 PFL ON' then begin
ExecuteCommand('PLAYLIST 1 EXTRAPFL ON');
x32pfl := true;
end
else if Command = 'X32 PFL OFF' then begin
x32pfl := false;
ExecuteCommand('PLAYLIST 1 EXTRAPFL OFF');
end;
end;
Jetzt müssen wir nur noch die andere Richtung beackern, in mAirlist wird Extra PFL an oder aus geschaltet und das Pult soll folgen.
Etwa so:
// check if mairlist is on pfl
procedure OnExtraPFLOn(Item: IPlaylistItem; PFLCount: integer);
begin
if (ExtPFLCount >= 1) then begin
if not x32pfl then
MidiOut(1, $B1, $50, $00);
end;
end
end;
procedure OnExtPFLOff(Item: IPlaylistItem; PFLCount: integer);
begin
if (ExtPFLCount <= 1) then begin
if x32pfl then
MidiOut(1, $B1, $50, $7F);
end;
end
end;
Wir brauchen also gar keinen weiteren Zwischenstatus um den mAirlist ExtraPFL und den Pult Status zu vergleichen. Wir müssen nur wissen, was das Pult macht. Die Variable pflon
können wir als vernichten.
Komplett sieht das dann ungefähr so aus: (Bestimmt noch Syntax Fehler drin)
var
x32pfl : boolean;
// on Script load or on mairlist Startup, sync Status and switch it all off.
procedure OnLoad;
begin
x32pfl := false;
MidiOut(1, $B1, $50, $7F);
end;
//respond to X32 incoming command
procedure OnExecuteCommand(Command: string);
begin
if Command = 'X32 PFL ON' then begin
x32pfl := true;
ExecuteCommand('PLAYLIST 1 EXTRAPFL ON');
end
else if Command = 'X32 PFL OFF' then
x32pfl := false;
ExecuteCommand('PLAYLIST 1 EXTRAPFL OFF');
end;
end;
// check if mairlist is on pfl
procedure OnExtraPFLOn(Item: IPlaylistItem; PFLCount: integer);
begin
if (ExtPFLCount >= 1) then begin
if not x32pfl then
MidiOut(1, $B1, $50, $00);
end;
end
end;
procedure OnExtPFLOff(Item: IPlaylistItem; PFLCount: integer);
begin
if (ExtPFLCount <= 1) then begin
if x32pfl then
MidiOut(1, $B1, $50, $7F);
end;
end
end;
begin
end.
Ungetestet, nur am Schreibtisch entstanden unter Einfluss von viel zu wenig Kaffee.