Brauche Hilfe bei ein paar Script Befehlen

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.

Zwischenstand:

procedure OnPFLOn(Item: IPlaylistItem; PFLCount: integer);
begin
  if PFLCount = 1 then begin         // <-- Korrektur: "begin" fehlte
    MidiOut(1, $B1, $50, $00); 
    MidiOut(1, $B1, $32, $7F);
    MidiOut(1, $B1, $33, $7F); 
  end;                               //  <-- und "end;" auch
end;

procedure OnPFLOff(Item: IPlaylistItem; PFLCount: integer);
begin
  if PFLCount = 0 then begin         // dito
    MidiOut(1, $B1, $50, $7F); 
    MidiOut(1, $B1, $32, $00);
    MidiOut(1, $B1, $33, $00); 
  end;
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'); // <-- Semikolon ergänzt
end;

begin
end.

begin und end; sind bei den if-Anweisungen wichtig, da sonst nur die erste Zeile unter der Bedingung ausgeführt wird.

Noch eine Verständnisfrage: Trifft es zu, daß Du mAirList als Interface gebrauchst, um auf den Tastendruck hin die für PFL benötigten Mute-Vorrichtungen zu betätigen?

Langsame Grüße

TSD

Also…

Es liegt an dem ersten Script in meiner letzten Antwort. Wenn ich das deaktiviere, kommt kein X32PFLON Befehl mehr in der Fernsteuerungskonsole.

Keine Ahnung warum.

Bezüglich deiner Frage:
Ich möchte eben dass es in beide Richtungen funktioniert. Sowohl ML --> Pult als auch Pult --> ML.

Liebe Grüße

Robert

Gut, dann setze erstmal mein getunetes Skript dafür ein.

Die Frage ziehe ich zurück, ich bin hier bei mir über ein Copy-and-paste-Residuum gestolpert, welches mich vollends verwirrte.

Viel zu warme Grüße

TSD

Was passiert, wenn Du in diesem Skript die Prozeduren OnPFLOn und OnPFLOff komplett auskommentierst? Ich habe den Verdacht, daß das Pult auf MidiOut(1, $B1, $50, $00); hin (getriggert vom OnPFLOn durch Vorhören der Cartwall) von sich aus die MIDI-Nachricht sendet, die mAirList wieder zu X32PFLON macht.

Rekursive Grüße

TSD

Dann hake (außer diesem verdächtigen) in umgekehrter Reihenfolge alle Skripte wieder nacheinander ab, bis das Verhalten nicht mehr auftritt. So kannst Du erkennen, ob eine Kombination zweier Skripte der Übeltäter ist.

Kriminalistische Grüße

TSD

Mir schwant, wir kommen dabei in Schwierigkeiten: In die eine Richtung geht das, wenn in mAirList ein PFL geöffnet ist, unterdrückt man den Befehl vom Pult. Andersherum jedoch, wenn das Pult bereits ein PFL-Fenster geöffnet hat, sehe ich im Moment keine Möglichkeit, das öffnen eines weiteren zu verhindern (es sei denn, es wird befohlen). Wie man einen Klick in der GUI abfangen könnte, ist mir schleierhaft. Ich glaube, das geht gar nicht: Scripting und GUI wollen nicht miteinander.

Ausschließende Grüße

TSD

Liebe Tondose,

ganz großen Dank für deinen unermüdlichen Einsatz.
Wie gesagt bin ich noch nicht so fit in Pascal, deshalb gehen mir auch schon mal ein paar identifier verloren (vor allem bei if then ;)). Hab jetzt alle deine Korrekturen ergänzt.
Es läuft jetzt alles (Hab sicherlich trotzdem noch ein paar Fragen und hoffe ich nerve dich nicht zu sehr damit).

Ich habe den Fehler auch gefunden:
Der Fehler lag hier:

procedure OnPFLOn(Item: IPlaylistItem; PFLCount: integer);
begin

Dabei hat ML in dem Moment, indem eine Cart in PFL abgespielt wird geagt “ja jetzt ist PFL On!” und Midi Befehl 50,00 gesendet. Das führte dann zum Auslösen von ExtraPFL, weil das X32 ja dann sofort auch Midibefehl 50,00 zurückgesendet hat (Damit wird ja ExtraPFL ausgelöst). Es mus also hier heißen:

procedure OnExtraPFLOn(Item: IPlaylistItem; PFLCount: integer);
begin

Bezüglich der ExtraPFL Mimik stimme ich dir zu - man ist nie wirklich sicher vor der “Anwendungskreativität” der User, die oft auf Schaltreihenfolgen kommen, die man vorher nicht bedacht hat. Wenn also jemand am Pult ExtraPFL drückt und danach nochmal in der GUI ist natürlich nichts zu machen. Aber dafür habe ich ja jetzt Mairlist in den Optionen verboten mehr als ein Eigenschaftsfenster aufzumachen. Damit ist das Problem doch gelöst.

Jetzt läuft alles einwandfrei. Was so ein wenig Schlaf und ein ausgeruhter Kopf ausmachen…

Liebe Grüße

Robert

Fein, da lag ich mit meinen Vermutungen ja doch nicht so ganz weitab.Eins noch: Die Prozedur heißt korrekt procedure OnExtPFLOn(…), nicht …Extra…, und ich bin mir nicht so ganz sicher, ob, wenn Du das korrigierst, der Fehler nicht doch wieder da sein wird. Na, wir werden sehen.

Entspannte Grüße

TSD

Yep - du hat recht. Es muss OnExtPFLOn heißen. hab ich gerade bemerkt, als ich alle Scripte nochmal getestet habe. Aber es funktioniert trotzdem. Das ExtraPFL fenster geht nicht auf, wenn ich eine Cart vorhöre. So soll es sein!

Nochmal vielen Dank für deine extrem gute Hilfe und die vielen Denkanstöße!

Liebe Grüße

Robert

Sehr schön, dass das funktioniert. Sowas ähnliches habe ich nämlich auch noch vor. Allerdings muss ich meinem Pult erst noch auf elektrotechnischem Weg beibgringen, auf entsprechende Schaltbefehle zu hören. An meinem sind nur handfeste GPIs.

Mich würde ja doch mal interessieren, was Du genau mit dem X32 machst und wie da der sonstige Workflow ist. Das ist ja nun nicht gerade ein Broadcast Pult aber ich vermute, dass man einen Broadcast typischen Workflow, damit nachbilden kann.
Wir hatten irgendwo schon mal ein Gedankenexperiment mit einem XR-18 und Controlllern.

Hintergrund, ich bin immer noch auf der Suche nach einem kompakten, günstigen mobilen Setup.

So, jetzt hab ich doch noch ein Problem:

Wenn ich die Cartwall auf PFL schalte habe ich leider wieder das Problem, dass ML nicht zwischen ExtraPFL und Cartwall PFL unterscheidet. Gibt es einen Befehl, der konkret den Status von CartwallPFL abfragt? Sowas wie OnCartwallPFL? Das würde mir helfen.

Ansonsten - wie kann ich ausdrücklich den PFL Status der Cartwall im Script abfragen?

Danke und liebe Grüße

Robert

Schreib ich dir später was zu. Bin gerade noch mitten im Scripting Stress :wink:

Liebe Grüße

Robert

Ich hoffe Tondose (oder jemand anderes der es weiß) liest noch mit…

Wäre total nett, wenn du mir noch Antwort auf folgende Fragen geben könntest, weil ich dazu nichts finde:

-Gibt es ein Kommando um explizit den Status der Cartwall abzufragen (On Air/PFL)?
-Welches Kommando muss ich nutzen, wenn ich in der GUI einen erweiterten Button definiert habe um diesen anzuschalten und abzuschalten? Habe dem Button einen Namen gegeben um ihn in der Fernsteuerung anzusprechen - aber ich weiß nicht mit welchem Kommando.

Danke und liebe Grüße

Robert

Das hab ich jetzt gefunden:

// Called when the cartwall switches its on air mode (on air, off air, PFL)
procedure OnCartwallOnAirModeChange(OldMode, NewMode: TCartwallOnAirMode);
begin
end;

Ich bekomme aber immer einen Type mismatch error dabei. Liegt wahrscheinlich an “TCartwallOnAirMode”. müsste das nicht “string” sein?

Außerdem noch die Frage wie ich per Script einen erweiterten Button in der GUI ein- oder ausschalte.

Danke für eure Hilfe!

Liebe Grüße

Robert

Ja, das müßte mit

procedure OnCartwallOnAirModeChange(OldMode, NewMode: TCartwallOnAirMode);
begin
  if NewMode = oamOnAir then begin
    //mach was, wenn On Air;
  end
  else if NewMode = oamPFL then begin
    //mach was anderes, wenn PFL
  end;
end;

gehen.

Das ist hier beschrieben. Allgemein gibt es

ExecuteCommand('<Name des Buttons> ON');
                                 … OFF');
                                 … ENABLE');
                                 … DISABLE');
                                 … TEXT [Text]');

Geschaltete Grüße

TSD


Antworten haben sich überschnitten.