Ansteuerung des OnAirScreen

Hatte ich schon mal erwähnt, dass die Suchfunktion in diesem Forum Weltlkasse ist? Ich glaube diesen Monat noch nicht.

Ich habe diesen alten Thread ausgeraben: Codebeispiele mAirListScript
und daraus das OnAirScreen Script etwas erweitert.

const
  iMax = 5;                                        // Hier die maximale Senderanzahl einsetzen
  IP = '192.168.51.103';                           // <-- IP-Adresse
  PORT = '3310';                                   // <-- Port
  PATH = 'C:\ProgramData\mAirList\6.1\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.

Wir haben nun den laufenden Titel und den folgenden Titel gelistet. Müsste man ggf. noch Typfilter einbauen und die Länge begrenzen. Für mich funktioniert das so aber erst mal.

EDIT: Oben war noch ein Copy & Paste Fehler drin.

1 Like