OnAirScreeen mit Script ansteuern

Hallo zusammen ich habe die Software Onairscreen, ich habe es schonmal geschafft, dass der ON AIR und EOF status übertragen wird, dennoch bekomme ich es nicht hin, dass der Mic status von dem Encoder übertragen wird ich nutze windows 10 und mAirList 6.2.7 Home. Zudem wird auch der Encoder Status nicht übertragen ich bin echt verzweifelt, vielleicht kann mir ja jemand weiterhelfen vonm euch vielen Dank!

Das hier ist der Code den ich bis jetzt verwendet habe, dennoch spuckt mir mAirlist diesen Fehler aus:

24.04.2020 13:39:35 Fehler Runtime error "List index out of bounds (1)" in background script C:\Users\Megaport\Music\mairlist-scripts\test2.mls, handling message: PLAYERCONTROL_START 5C7F7B6D59966328 00 00000000 00000000 ?

Hier nun mal das Script dass bis jetzt aktiv ist:

const
  iMax = 5;                                        // Hier die maximale Senderanzahl einsetzen
  IP = 'meine IP';                           // <-- IP-Adresse
  PORT = '3310';                                   // <-- Port
  PATH = 'C:\ProgramData\mAirList\6.2\sfk174.exe'; // <-- Pfad
  
var
  sl: TStringList;
  pi: IPlaylistItem;
  idx, c, i: integer;
  EncoderState: array[0 .. iMax] of integer;  

  

procedure PostOnAirScreen(Befehl: string);
begin
  ShellExecuteHidden (PATH, 'udpsend ' + IP + Chr(32) + PORT + Chr(32) + Chr(34) + Befehl + Chr(34) + Chr(32) + '-quiet');
  //ShellExecute (PATH, 'udpsend ' + IP + Chr(32) + PORT + Chr(32) + Chr(34) + Befehl + Chr(34));
end;

procedure OnLoad;
begin
  // Eigentlich muss das nicht mal bei jedem Ladevorgang neu passieren aber so sind wir sicher, dass da keiner was verfummelt hat 
  // und man kann relativ komfortabel die Konfiguration anpassen ohne dass man an die eigentliche Anzeige ran muss
  PostOnAirScreen('CONF:LED2:autoflash=True'); // Diese Anzeige soll blinken, blinkede Anzeigen sehen immer wichtig aus.
  PostOnAirScreen('CONF:LED2:text=EOF'); // Auf dem Button soll EOF stehen.
  PostOnAirScreen('CONF:CONF:APPLY=TRUE'); 
  PostOnAirScreen('LED1:OFF');
  PostOnAirScreen('LED2:OFF');
  PostOnAirScreen('LED3:OFF');
  PostOnAirScreen('LED4:OFF');
  PostOnAirScreen('AIR4:OFF');
  PostOnAirScreen('AIR4:RESET');
  
end;

procedure OnRuntimeDataChange(Key, Value: string);
begin
  if Key = 'EncoderStatus' then begin
    if Value = ('false') then begin
	  PostOnAirScreen('AIR4:OFF');
      PostOnAirScreen('AIR4:RESET');
	  end
	else begin
	  PostOnAirScreen('AIR4:ON');
	  end;
	end
  else if Key = 'GamepadStatus' then begin
    PostOnAirScreen(Value);
	end
  else if Key = 'EncoderError' then begin
    PostOnAirScreen(Value);
	end;
end;

procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem);

begin
  idx := CurrentPlaylist.IndexOf(item);
  if idx = -1 then begin
    SystemLog('Das war kein Element aus unserer Playlist ...');
    exit;
  end;

  sl := TStringList.Create;
  c := 0;                                                                                                       
  while (idx < CurrentPlaylist.GetCount) and (c < 2) do begin
    pi := CurrentPlaylist.GetItem(idx);
    sl.Add(pi.GetArtist + Chr(32) + '-' + Chr(32) + pi.GetTitle );
    c := c + 1;
    idx := idx + 1;
  end;
  PostOnAirScreen('NOW:' + sl[0] );
  PostOnAirScreen('NEXT:' + sl[1] );
  sl.Free;
end;

procedure OnOnAir;
begin
  PostOnAirScreen('LED1:ON');
end;

procedure OnOffAir;
begin
  PostOnAirScreen('LED1:OFF');
end;

procedure OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer);
begin
  PostOnAirScreen('LED2:ON');
end;

//procedure OnPlayerStop(PlaylistIndex: integer; PlayerIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);
procedure OnPlayerStateChange(PlaylistIndex: integer; PlayerIndex: integer; OldState: TPlayerState; NewState: TPlayerState; Item: IPlaylistItem);
begin
  PostOnAirScreen('LED2:OFF');
end;

procedure OnShutdown; // Sollte den Rechner mit den OnAirScreen herunterfahren, funktioniert bisher aber nicht.
begin
  PostOnAirScreen('CMD:SHUTDOWN');
end;


begin
end.

`


EDIT by Mod - Code aus der Formatierung “Zitat” in “Code” (</>) umgewandelt.

1 Like

Vielleicht kann mir jemand so behjilflich sein und sagen wich den Encoder status rüber bekomme, oder das microfon signal also dass auf der uhr eine led angeht

Hallo Manuel,
was genau meinst du denn mit “Encoder status” und “microfon signal”?
Ich nehme an, dass du möchtest, dass sobald du in mAirlist den Mic-Button aktiviert hast, ein entsprechender Befehl an OnAirScreen gehen soll.
Viele Grüße
Dennis

Guggsdu hier.

Erklärte Grüße

TSD

vielen dank, aber leider passiert da nichts also ich habe jetzt mal das ganze hier so geschrieben:
Nur passiert da leider nichts

procedure OnEncoderInputToggle(Input: TEncoderInput; NewState: boolean);
begin
  if Input = eiLine then begin
    if NewState = true then
      PostOnAirScreen('LED1:ON');
    else
      PostOnAirScreen('LED1:OFF');
  end;
end;

Kein Semikolon vor else!

okey das klappt nun mal aber wenn ich noch eine andere led ansteuern will kommt ein fehler:

29.04.2020 20:56:26 Fehler Fehler beim Laden des Hintergrund-Scripts C:\Users\Megaport\Music\mairlist-scripts\test2.mls: [Error] (43:5): Identifier expected

Hier nun der aktuelle Code im Script:

procedure OnEncoderInputToggle(Input: TEncoderInput; NewState: boolean);
begin
  if Input = eiMic then begin
    if NewState = true then
      PostOnAirScreen('AIR1:ON');
      PostOnAirScreen('LED1:ON')
    else
      PostOnAirScreen('AIR1:OFF');
      PostOnAirScreen('LED1:OFF')
  end;
end;

Hierbei wäre es sehr hilfreich zu wissen, welche Codezeile die Zeile 43 ist.
Denn die Zahlen in der Klammer (43:5) sagen in welcher Zeile (43) und an welcher Stelle (5) der Fehler auftritt.
In deinem Fall erwartet die Software einen “Identifier”.

Viele Grüße
Dennis

Semikolon fehlt in der drittletzten Zeile.

Es gibt hier mehrere Artikel namens „Scripting-Hilfe“, die solltest Du mal durcharbeiten. Nachschlagen auf www.delphibasics.co.uk. Damit ausgerüstet ausprobieren, Fehlermeldungen interpretieren und weiter ausprobieren. Und das schließliche begin end. nicht vergessen.So habe ich das anfangs auch gemacht, und ich hatte noch nicht mal die Artikel.

Im übrigen nützt es gar nichts, solch einzelne Codeschnippel zu posten, weil, wie @Dennis.Unlimited richtig bemerkt, der Bezug zum Ganzen nicht gegeben ist. Der Fehler kann auch überall anders stecken, ganz außerhalb von mAirList sogar, wie ich selber vor kürzester Zeit (vulgo: heute) selber erfahren mußte.


Edit: Und der Code der if-Bedingungen ist nicht in begin end; eingeschlossen. Wer weiß, was sonst noch verkehrt ist.

1 Like

Problem gelöst, ich habe einfach ein neues script nur für das mic geschrieben funktioniert nun alles vielen Dank für eure Hilfe und bleibt alle gesund #stayathome :slight_smile:

Hallo zusammen ich hoffe ihr hattet alle eine schöne Weihnachten oder habt sie noch.

Hier zu meiner Frage wenn ich auf meiner Cartwall z.B. die Cartwall 12 Drücke, ist es möglich eine LED auf meinem monitor angehen zu lassen z.B. für den ARI einfach so als zusatz also dass ich diese mit der Cartwall 12 aktivieren und mit der Cartwall 11 deaktivieren