Scripting-Hilfe: Encoder-Zustände verarbeiten

So umfangreich die Funktionen in mAirList auch sind, so fehlt doch immer wieder mal das eine oder andere Feature für den gewünschten Zweck. Macht aber nichts, denn genau hierfür gibt es die Scripting-Engine, mit welcher die Möglichkeiten in mAirList noch wesentlich umfangreicher werden als ohnehin schon. Also:

Encoder-Zustände erkennen und verarbeiten

Ein immer wieder gerne genommenes Problem ist wie steuere ich mein schönes Rotlicht an, wenn (in mAirList) das Mikrofon on air geht? Leute mit Mischpulten stellt das kaum vor Probleme, die nehmen einfach den Reglerkontakt. Was aber mit ohne Mischpult, nur mAirList, Soundkarten und sonst gar nichts?

Hierfür hat Torben die Prozedur OnEncoderInputToggle erschaffen, die solcherlei Aufgaben spielend erledigt. Deren Parameter sind TEncoderInput für den zu überwachenden Encoder-Eingang und NewState für dessen jeweiligen Zustand. Die Syntax geht so:

procedure OnEncoderInputToggle(Input: TEncoderInput; NewState: boolean);
begin
  if Input = eiMic then begin
    if NewState = true then
      K8055Remote(0).SetDigitalChannel(1)
    else
      K8055Remote(0).ClearDigitalChannel(1);
  end;
end;

(Aha, ein Velleman-Fan. I/O-Warrior-Betreiber schreiben eben

    IOWarriorRemote(0).SetPort(0, true)

undsoweiter.) Man kann natürlich mit der gewonnenen Zustandsinformation nach Belieben auch ganz andere Sachen anstellen.

Für TEncoderInput gibt es die Auswahl

  • eiPlayer für den ersten Player,

  • eiSecondary für den zweiten,

  • eiPlayer3 für Player 3,

  • eiPlayer4 na, wofür wohl?!,

  • eiHighPriority wird mir Torben noch erklären,

  • eiMic fürs Mikrofon,

  • eiLine für den Line-Eingang und

  • eiAux für den Aux-Eingang.

Zum schalten von Mic, Line und Aux gibt es Buttons in der GUI, für die anderen müßte man (nachdem einem eine sinnvolle Verwendung eingefallen ist) ein Skript bemühen.

Rückgemeldete Grüße

TSD

2 Likes

Hallööö Tondose,
ich bastel mir gerade eine Abfrage vis Script um den Encoder Mic Status in einer Textdatei abfragen zu können…

den Anfang des Oben reingeschriebenen Scriptes von dir, ersetzte ich durch: sl.Add

Mein Script sieht so aus: script.mls (298 Bytes)
Ich hoffe es hat geklappt mit dem hochladen. ^^

Leider kommt bei mir ein Fehler aus…Screenshot_4
Wenn ich ‘sl’ durch StringList ersetze, kommt der selbe fehler. Ich habe den Befehl aus nem älterem Beitrag… Ich denke dass der Befehl in zwischen geändert wurde…

Kann mir jemand weiterhelfen? LG Floriiii

Du hast sl nicht als Variable deklariert, und es fehlt noch so einiges – schau Dir nochmal obigen Link an. (Den zweiten.)

procedure OnEncoderInputToggle(Input: TEncoderInput; NewState: boolean);
var
  sl: TStringList;                        // Das hat gefehlt
begin
  if Input = eiMic then begin             // Input eiMic, Du willst ja das Mikrofon überwachen
    try
      sl := TStringList.Create;
      if NewState = true then
        sl.Add('Mikrofon On Air')         // Hier war 'ne Klammer zuviel
      else
        sl.Add('Mikrofon nicht On Air');  // Rechtschreibfehler korrigiert
      sl.SaveToFile('C:\Users\flori\Desktop\MicON.txt');
    finally
      sl.Free;                            // Das hat auch gefehlt
    end;
  end;
end;

begin                                     // Und das hier auch
end.


Ergänzte Grüße

TSD

Supaaaaaaa, es funktioniert !!!

Danke dir :smiley:

1 Like

A post was split to a new topic: Arduino steuern mittels mAirList-Script

Guten Abend Forum,

2 Jahre Später hab ich eine Frage zur Encoder-Zustandsabfrage.

Ist es möglich, im if zu sagen, dass das nur mit 2 Bedingungen geht?

Also, ich habe an sowas gedacht:

procedure OnEncoderInputToggle(Input: TEncoderInput; NewState: boolean);
begin
if Input = eiMic and Input = eiLine then begin
    if NewState = true then
      ComPort('COM3').SendStr('r')  // Licht auf Rot Schalten
    else
      ComPort('COM3').SendStr('g');  // Licht wieder zurück auf Grün Schalten
  end;
end;

Jedoch funktioniert meine Idee nicht…

Oder evtl., dass die beiden Zustände in einer txt zusammengefasst werden und man das dann auswertet?!

HILFE!
Keine Ahnung von sowas…

Code nach dem Befehl if wird ausgeführt, wen die angegebene Bedingung wahr ist. In Deinem Beispiel wird das kaum der Fall sein, da bei einer Auslösung der Prozedur Input nur entweder eiMic oder eiLine sein kann, aber niemals beides zugleich.

Kann ich mit dem Script einen Autmatischen Szenen wechsel raliesieren in OBS Studio ?

Hat OBS-Studio denn eine entsprechende Schnittstelle?

Sollte dir weiterhelfen :=)

2 Likes

ja erweiterter szenewechseler welcher per txt erkennen soll ob sich da was drin geändert hat

Folgendes Sache ich will den encoder Status in der Text Datei ausgeben aber das script so klappt leider nicht vllt kann mir einer Helfen

//procedure OnLoad;
const 
	FNAME = 'D:\scripts\mic_an_aus.txt';	
var sl: TStringList;
//end;


procedure OnEncoderInputToggle(Input: TEncoderInput; NewState: boolean);
begin
if Input = eiMic then begin
    if NewState = true then
		sl.Add('MIC ON');
		sl.SaveToFile( FNAME );
		sl.Free;
    else
		sl.Add('MIC OFF');
		sl.SaveToFile( FNAME );
		sl.Free;      
  end;
end;

Abfolgen von Statements nach if müssen zwischen begin und end eingeschlossen werden. Vor else darf kein Semikolon stehen. Probiere:

const 
  FNAME = 'D:\scripts\mic_an_aus.txt';	
var
  sl: TStringList;

procedure OnEncoderInputToggle(Input: TEncoderInput; NewState: boolean);
begin
  if Input = eiMic then
  begin
    if NewState = true then
    begin
      sl.Add('MIC ON');
      sl.SaveToFile(FNAME);
      sl.Free;
    end
    else
    begin
      sl.Add('MIC OFF');
      sl.SaveToFile(FNAME);
      sl.Free;
    end;
  end;
end;

Klappt leider nicht
//procedure OnLoad;
const
FNAME = ‘D:\scripts\mic_an_aus.txt’;
var sl: TStringList;
//end;

procedure OnEncoderInputToggle(Input: TEncoderInput; NewState: boolean);
begin
if Input = eiMic then begin
if NewState = true then
sl.Add(‘MIC ON’);
sl.SaveToFile( FNAME );
sl.Free;
else
sl.Add(‘MIC OFF’);
sl.SaveToFile( FNAME );
sl.Free;
end;
end;

// procedure OnExecuteCommand(Command: string);
// begin
// sl := TStringList.Create;
//
// if ( Command = ‘MIC ON’ ) then
// begin
// sl.Add(‘MIC ON’);
// sl.SaveToFile( FNAME );
// sl.Free;
// end;
//
// if ( Command = ‘MIC OFF’ ) then
// begin
// sl.Add(‘MIC OFF’);
// sl.SaveToFile( FNAME );
// sl.Free;
// end;
// end;