Brauche Hilfe bei ein paar Script Befehlen

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… :wink:

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.