Ja - da ist leider kein “OPEN” dabei. Wie schalte ich ExtraPFL also ein?
Dann probier mal PLAYLIST 1 EXTRAPFL ON
. Steht da unter Playlist.
Ergänzte Grüße
TSD
Ich hab’s im Wiki nachgetragen.
Hi Tondose und UliNobbe,
danke für eure Hilfe.
Das meiste funktioniert jetzt. Aber ein Script bekomme ich nicht ans laufen. Ich bin leider auch nicht so bewandert in Pascal. Ich möchte, dass das Script abgleicht ob Mairlist oder mein Pult (X32) auf PFL geschaltet sind. Wenn ich also an Mairlist PFL drücke, soll das Pult auch auf PFL gehen (Mute Group am X32) und wenn ich am Pult PFL drücke soll Mairlist auf PFL gehen. Ich habe das Script hier geschrieben, aber leider passiert garnichts:
var
x32pfl : boolean;
pflon : boolean;
//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;
if (Status=$B1) and (Data1 = $50) and (Data2= $7F) then
x32pfl := false;
end;
// check if mairlist is on pfl
procedure OnPFLOn(Item: IPlaylistItem; PFLCount: integer);
begin
if (PFLCount = 1) then
pflon := true
end;
procedure OnPFLOff(Item: IPlaylistItem; PFLCount: integer);
begin
if (PFLCount = 1) then
pflon := false
end;
//compare and switch on X32 or mairlist
begin
if pflon and (x32pfl = false) then
MidiOut(1, $B1, $50, $00);
if (pflon = false) and x32pfl then
ExecuteCommand('PLAYLIST 1 EXTRAPFL ON');
if x32pfl and (pflon = false) then
ExecuteCommand('PLAYLIST 1 EXTRAPFL OFF');
if (x32pfl = false) and pflon then
MidiOut(1, $B1, $50, $7F);
end.
Habt ihr eine Idee woran es liegen könnte?
Danke schon mal!
Robert
EDIT by Mod - Formatierung.
Code
bitte auch als solchen formatieren; das erhöht die Lesbarkeit ungemein. Zu diesem Zweck gibt es im Edit-Fenster das Symbol </>
. Vielen Dank!
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.
Lieber shorty xs,
ganz großen Dank für deine sehr ausführliche Antwort, der ich in weiten Teilen nur zustimmen kann.
Ich bin nicht wirklich fit in Pascal, deshalb auch das etwas umständliche Script.
Ja du hast recht, mit einem Befehl aus Mairlist ist das sicherlich schöner, jedoch muss ich sowieso wieder bei Änderungen ins Script rein, da am Schluss die umgekehrte Synchronisation mit dem Pult ja wieder hart verdrahtet ist. Insofern macht es glaube ich keinen Unterschied.
Waren in der Tat ein paar kleine Syntaxfehler drin - die waren aber schnell behoben und ich hab es ausprobiert. Leider passiert genau das, was ich geahnt habe. Du baust dir mit deinem Script eine Schleife, die Mairlist in einen Befehlsloop verfallen lässt und deshalb unresponsive macht.
Wenn du umgekehrt prüfst, ob PFL in Mairlist an ist und dann das Midi Kommando für die Taste an das Pult schickst, bewirkst du bei Mairlist ja den Befehl, dass PFL eingeschaltet werden soll (bzw. den Schalter X32 PFL ON zu setzen) usw. Es ist also zwangsläufig eine ausgedehnte Abfrage nötig um sowas zu vermeiden.
Aber dein Hinweis auf ExtraPFL war sehr gut. Ich versuche es nochmal damit.
Und dein kleiner Codeschnipsel am Anfang zur Initialisierung ist natürlich perfekt! Hab ich gar nicht dran gedacht.
Ich probiere nochmal was rum und poste hier mein Ergebnis.
Vielen Dank nochmal!!!
Robert
@shorty.xs: Augenblick! Die Prozedur OnExtraPFL(…);
gibt es nicht. Hierzu ein Wort vom Boss:
Es hängt also von Deiner, Robert, weiteren Verwendung ab, ob Du OnPFLOn
oder OnExtPFLOn
verwendest. Für mein perönliches Setup nutze ich überhaupt nie die PFL-Funktion der Player, sondern höre mit ExtraPFL immer nur die Playlistelemente vor. (Cartwall ist was anderes.) Dann (bei mir also) ist es aber auch egal, ob Du mit oder ohne Ext
benutzt. (Für das untige Skript habe ich das „normale“ genommen – weitere Gedanken folgen.)
Etwas ganz grundsätzliches @derrotedj:
Du kannst Dein Skript auf Syntaxfehler prüfen, indem Du es unter mAirList > Script ausführen…
hochlädst. Kommt kein Mecker, sieht es in dieser Hinsicht gut aus. (Was aber nicht heißt, daß das Skript auch funktionieren wird.)
Zu @shorty.xs’ Skript:
Ein bißchen mit begin
s und end
s aufgeräumt und wichtig: Bei der Abfrage nach PFLCount
(der Zahl der geöffneten PFLs: Ist PFLCount = 0
, dann sind alle geschlossen, PFL also sicher aus) hast Du einmal >= 1
und dann <= 1
eingesetzt. Das geht nicht, denn wenn PFLCount = 1
, ist der Zustand nicht eindeutig definiert, es könnte beides zutreffen. Also entweder < 1
oder gleich = 0
.
Ansonsten hätte ich es ähnlich gemacht und schlage @shorty.xs’ Skript, dahingehend korrigiert und etwas formschöner, noch einmal vor:
var
x32pfl : boolean;
// On Script load or on mairlist startup, sync status, set variables to false and switch PFL off.
procedure OnLoad;
begin
x32pfl := false;
MidiOut(1, $B1, $50, $7F);
end;
// On Script unload or on mairlist shutdown, switch PFL off.
procedure OnUnload;
begin
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 begin
x32pfl := false;
ExecuteCommand('PLAYLIST 1 EXTRAPFL OFF');
end;
end;
// check if mairlist is on pfl
procedure OnPFLOn(Item: IPlaylistItem; PFLCount: integer);
begin
if (PFLCount >= 1) AND NOT x32pfl then
MidiOut(1, $B1, $50, $00);
end;
procedure OnPFLOff(Item: IPlaylistItem; PFLCount: integer);
begin
if (PFLCount = 0) AND x32pfl then
MidiOut(1, $B1, $50, $7F);
end;
begin
end.
Ich habe noch ein Ausschalten ergänzt, daß, wenn mAirList heruntergefahren wird, PFL am Pult mit ausgeschaltet wird.
@derrotedj: Du mußt vorher noch in der Konfiguration/Systemsteuerung unter Fernsteuerung > Hinzufügen > MIDI
definieren, daß beim drücken von PFL am Pult der Befehl X32 PFL ON
ausgeführt wird (einfach händisch reinschreiben) und umgekehrt mit … OFF
.
Ich mache mal hier eine Zäsur und poste, dann kommt noch ein Gedanke von mir.
Kliffhängende Grüße
TSD
Edit: Ich habe noch die verschachtelte if
-Anweisung zusammengefaßt.
@shorty.xs: Wozu die Variable x32pfl
? Das hat Du doch mit PFLCount
schon abgefrühstückt?! (Jetzt nicht gleich ein neues Skript posten, ich arbeite dran, kann aber noch was dauern.)
Das war noch nicht der Gedanke, aber man denkt sich so vom Stöckchen aufs Hölzchen.
Nachgefragte Grüße
TSD
Liebe Tondose,
vielen Dank für deinen ganzen Aufwand!
ich hab natürlich schon alles gemacht was du schreibst (Midi Befehl, Syntax Check mit Mairlist usw.), ist ja nicht das einzige Script das läuft
Das Script läuft leider nur in eine Richtung (am Pult PFL on bewirkt ExtraPFL in Mairlist). Aber leider nicht andersrum (PFL in Mairlist bewirkt Pult PFL).
Es wird einfach kein Midi befehl gesendet. Das war genau das gleiche Problem dass ich mit meinem Script am Anfang hatte.
Wenn ich im OnLoad Bereich den Midibefehl sende wird er korrekt ausgelöst.
Hmm - das ist genau das, was ich nicht verstehe.
Liebe Grüße
Robert
Ich habe ja das Problem, dass sonst ein zweites PFL Fenster geöffnet wird, weil ich ja die beiden Zustände (Mairlist PFL und Pult PFL) getrennt betrachten muss.
Wenn ich also an Mairlist auf PFL schalte möchte ich, dass am Pult auch PFL geschaltet wird aber dann eben NICHT ein zweites mal ExtraPFL ausgeführt wird.
Deshalb brauche ich meiner Meinung nach auch eine zusätzliche Variable, die den PFL Zustand von Mairlist speichert, damit ich vergleichen kann. Aber vielleicht denke ich einfach zu umständlich und ihr Codingcracks überblickt das besser
Ist kompliziert - ich hoffe du verstehst was ich damit meine.
Liebe Grüße
Robert
Neinnein, erstens bezeichne ich mich nicht als Codingcrack, zweitens muß ich das selber erstmal überblicken können. Wer von uns schließlich zu umständlich gedacht hatte, wird sich weisen.
Wo schaltest Du am Pult auf PFL? An der Taste über dem Regler für den entsprechenden Player? (Dahingehend mein obiger Gedanke.)
Detaillierte Grüße
TSD
nein leider nicht - ist auch hier kompliziert, da das X32 keine Midi Befehle für das Drücken von PFL Tasten sendet. Ich benutze hier eine Mute-Group, die die entsprechenden Ausgänge mutet. Ist wie gesagt kompliziert und umständlich, da das X32 hier leider keine Midi Befehle sendet (oder auch empfängt). Ich möchte nur ExtraPFL nutzen, da sich mir der Sinn des Vorhörens eines Ausspielkanals nicht wirklich erschließt. Es reicht auch für die Anwendung, die ich plane.
Liebe Grüße
Robert
Also im Prinzip wie eine Extratastatur, nur daß sie im Pult eingebaut ist. Wieder was klarer, und mein Gedanke hat sich erledigt. Den Rest kriegen wir auch noch zum laufen, aber jetzt ist bei mir erstmal Pause
.
Hinhaltende Grüße
TSD
genau, nur dass diese Taste im Pult auch noch eine PFL-Mimik durch geschicktes Routing/Muting umsetzt ohne PFL (beim X32 heißt das “Solo”)am Pult zu benutzen.
ich hab gerade nur das Problem, dass der MidiOut Befehl nicht gesendet wird, wenn ich an Mairlist auf PFL schalte. Umgekehrt funktioniert es.
Liebe Grüße
Robert
Echt nicht, das Teil hat doch eine sehr umfangreiche Midi Implemetierung und sogar einen reinen DAW mode, wenn ich mich recht entsinne. Bzw. OSC bzw. das Rauschinger proriptäre etwas, was auch schon entschlüsselt wurde und per LAN funktioniert.
nein - X32 sendet/empfängt keine Midi Befehle bei PFL on/off. Kann sein, dass es über den Umweg der Fernsteuerung oder DAW Mode gehen würde - so tief wollte ich aber nicht einsteigen. Da fehlt mir die Zeit für.
Im DAW Mode muss es außerdem ständig Rückmeldungen geben bzw. per Midi/LAN eine feste Verbindung zu einer gültigen Fernsteuerungskonsole geben. Ist also leider nicht so einfach - nicht unmöglich, aber zeitaufwendig.
Liebe Grüße
Robert
Was mir gerade einfällt: Ist in der procedure OnLoad(…)
auch eine Zeile
MidiOutOpen(1);
untergebracht? (Und in … OnUnload
entsprechend MidiOutClose(1);
.) Die gehören da hin.
Ergänzte Grüße
TSD
Ich hab es jetzt pragmatisch gelöst, indem ich Mairlist verboten habe mehr als ein Eigenschaftsfenster zu öffnen, was jetzt auch funktioniert mit diesem Script:
procedure OnPFLOn(Item: IPlaylistItem; PFLCount: integer);
begin
if PFLCount = 1 then
MidiOut(1, $B1, $50, $00);
MidiOut(1, $B1, $32, $7F);
MidiOut(1, $B1, $33, $7F);
end;
procedure OnPFLOff(Item: IPlaylistItem; PFLCount: integer);
begin
if PFLCount = 0 then
MidiOut(1, $B1, $50, $7F);
MidiOut(1, $B1, $32, $00);
MidiOut(1, $B1, $33, $00);
end;
procedure OnExecuteCommand(Command: string);
begin
if Command = 'X32PFLON' then
ExecuteCommand('PLAYLIST 1 EXTRAPFL ON')
else if Command = 'X32PFLOFF' then
ExecuteCommand('PLAYLIST 1 EXTRAPFL OFF')
end;
begin
end.
Jetzt habe ich nur noch ein weiteres Problem:
Wenn ich die Cartwall auf PFL stelle und mir einen Hotkey für z.B. Play Cart 1 auf ctrl+1 lege, startet nicht nur die cart , sondern auch ein ExtraPFL des angewählten Titels in der Playliste. Warum ist das so? Ich sende ja ausschließlich den Befehl “CARTWALL 1 START/STOP”?
Liebe Grüße
Robert
Das sehe ich so nicht. Kann aber an mir liegen. (Wofür stehen die $50
, $32
und $33
genau?)
Ich dachte, Dein primäres Problem wäre, daß das X32 nicht auf die MidiOut
-Befehle von mAirList hört. Dazu meine obige Frage.
Nachgehakte Grüße
TSD
Hab ich im ersten Script von mehreren gemacht, weil ich sonst einen Fehler bekomme wenn ich in mehreren Scripts versuche den Midi Ausgang zu öffnen.
Wofür stehen die
$50
,$32
und$33
genau?
Die stehen für verschiedene Busse, die gemutet/demutet werden.
Ich habe jetzt leider noch das Problem, dass Mairlist aus mir unerfindlichen Gründen den “X32PFLON” Befehl auslöst, wenn ich auf eine Cart klicke, wenn sich die Cartwall im PFL Mode befindet. Das sehe ich in der Fernsteuerungskonsole. Keine Ahnung warum Mairlist das macht. Das sind die beiden Scripte, die irgendwie nicht miteinander funktionieren:
procedure OnPFLOn(Item: IPlaylistItem; PFLCount: integer);
begin
if PFLCount = 1 then
MidiOut(1, $B1, $50, $00);
MidiOut(1, $B1, $32, $7F);
MidiOut(1, $B1, $33, $7F);
end;
procedure OnPFLOff(Item: IPlaylistItem; PFLCount: integer);
begin
if PFLCount = 0 then
MidiOut(1, $B1, $50, $7F);
MidiOut(1, $B1, $32, $00);
MidiOut(1, $B1, $33, $00);
end;
procedure OnExecuteCommand(Command: string);
begin
if Command = 'X32PFLON' then
ExecuteCommand('PLAYLIST 1 EXTRAPFL ON')
else if Command = 'X32PFLOFF' then
ExecuteCommand('PLAYLIST 1 EXTRAPFL OFF')
end;
begin
end.
und:
procedure OnExecuteCommand(Command: string);
begin
if Command = 'CARTPFLON' then
MidiOut(1, $B1, $51, $00);
if Command = 'CARTPFLOFF' then
MidiOut(1, $B1, $51, $7F);
end;
begin
end.
Hier ist noch ein Ausschnitt aus meinen in Mairlist definierten Midi Befehlen:
Command6_Type=MidiCommand
Command6_Status=177
Command6_Data1=80
Command6_Data2=0
Command6_Data2Condition=Equals
Command6_Command=X32PFLON
Command6_Enabled=on
Command7_Type=MidiCommand
Command7_Status=177
Command7_Data1=80
Command7_Data2=127
Command7_Data2Condition=Equals
Command7_Command=X32PFLOFF
Command7_Enabled=on
Command8_Type=MidiCommand
Command8_Status=177
Command8_Data1=81
Command8_Data2=0
Command8_Data2Condition=Equals
Command8_Command=CARTWALL MODE PFL
Command8_Enabled=on
Command9_Type=MidiCommand
Command9_Status=177
Command9_Data1=81
Command9_Data2=127
Command9_Data2Condition=Equals
Command9_Command=CARTWALL MODE ON AIR
Command9_Enabled=on
Ich verstehe einfach nicht, warum Mairlist den “X32PFLON” Befehl auslöst, wenn ich eine cart im PFL Modus anklicke. Vielleicht kannst du ja meine Ratlosigkeit erhellen.
Danke schon mal im Voraus für all deine Mühe!
Liebe Grüße
Robert
Ich nehme an, das kommt Dir nur so vor. In der Tat öffnet mAirList den Cue-Editor, wenn Du die Cartwall vorhören willst, und das sieht für Dich eben so aus, als sei X32PFLON
abgefeuert worden. Insofern sind meine Zweifel an dem „PFL-Verbot“ offenbar berechtigt. Der Ansatz mit der Variablen ist schon richtig, gib mir aber bitte noch einen Moment.
Forensische Grüße
TSD
Nachtrag: In der Fernsteuerungskonsole auch?! Deaktiviere mal alle Hintergrundskripte und hake sie der Reihe nach wieder an, bis dieses Verhalten bei PFL/Cart wieder auftritt.