Behringer BCF2000 Midi Out Player Anzeige

Hallo Ihr bastelnden Radio Modis da draussen :slight_smile:

Ich hab mich mal hingesetzt und die Funktion meines BCF etwas erweitert. Folgendes ist dabei rausgekommen:

[ul][li]Rotary Encoder LEDs leuchten jetzt passend zum Kanalzug, der gerade aktiv ist[/li]
[li]Rotary Encoder LEDs blinken, sobald die EOF Anzeige in mAirList anspringt[/li]
[li]die Buttons unter den Encodern leuchten, sobald der Player des Kanalzugs anspringt[/li]
[li]Rotary Encoder LEDs am Mikrofon Kanalzug Blinken, sobald das Mic offen ist[/li][/ul]

In meiner Konfiguration hängt das BCF über eine Soundkarte durchgeschleift an einem Behringer XAir 12, dessen Kanäle 5 - 12 die Player 1 - 3 bzw. die Cartwall bedienen. Die Kanäle 1 und am XAir sind für die Mikrofone, wovon ich aktuell nur eines nutze. Somit entfällt in diesem Fall die Steuerung von mAirList mittels der Fader…

procedure OnLoad; 
begin
	MidiOutListDevices;
  MidiOutOpen(1); 								// Midi Output öffnen, wenn Script geladen wird
  EnableTimer(500);								// Timer Starten
end;

procedure OnUnload; 
begin
  MidiOutClose(1);								// Midi Output schliessen, wenn Script entladen wird
end;

var 															// Variablen für die Blinker
  blinkP1: boolean;
  stateP1: boolean;
  blinkP2: boolean;
  stateP2: boolean;
  blinkP3: boolean;
  stateP3: boolean;
  blinkM1: boolean;
  stateM1: boolean;

procedure OnTimer;													// Timer für Blinken - betrifft alle Kanäle
begin
  if blinkP1 then begin											// Wenn Trigger für Player 1 aktiviert
    stateP1 := not stateP1;
    if stateP1 then
      midiOut(1, 178, 0, 127)
    else       
      midiOut(1, 178, 0, 0)
  end;
  if blinkP2 then begin											// Wenn Trigger für Player 2 aktiviert
    stateP2 := not stateP2;
    if stateP1 then
      midiOut(1, 178, 2, 127)
    else       
      midiOut(1, 178, 2, 0)
  end;
  if blinkP3 then begin											// Wenn Trigger für Player 1 aktiviert
    stateP3 := not stateP3;
    if stateP3 then
      midiOut(1, 178, 4, 127)
    else       
      midiOut(1, 178, 4, 0)
  end;
  if blinkM1 then begin											// Wenn Trigger für Mikrofon 1 aktiviert
    stateM1 := not stateM1;
    if stateM1 then
      MidiOut(1, 178, 8, 127)
    else       
      MidiOut(1, 178, 8, 0)
  end;
end;

procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem);
begin
  if PlayerIndex = 0 then 									// Wenn Player 1 gestartet, alle Rotary LEDs im Kanalzug leuchten lassen
  begin
   MidiOut(1, 178, 0, 127);
   MidiOut(1, 177, 20, 127);
  end;
  if PlayerIndex = 1 then 									// Wenn Player 2 gestartet, alle Rotary LEDs im Kanalzug leuchten lassen
  begin
   MidiOut(1, 178, 2, 127);
   MidiOut(1, 177, 22, 127);
  end;
  if PlayerIndex = 2 then 									// Wenn Player 3 gestartet, alle Rotary LEDs im Kanalzug leuchten lassen
  begin
   MidiOut(1, 178, 4, 127);
   MidiOut(1, 177, 24, 127);
  end;
end;

procedure OnPlayerStop(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem; Duration: int64);
begin
	if PlayerIndex = 0 then										// Wenn Player 1 gestoppt, alle Rotary LEDs im Kanalzug abschalten
  begin
   MidiOut(1, 178, 0, 0);
   MidiOut(1, 177, 20, 0);
   blinkP1 := false;
  end;
  if PlayerIndex = 1 then										// Wenn Player 2 gestoppt, alle Rotary LEDs im Kanalzug abschalten
  begin
   MidiOut(1, 178, 2, 0);
   MidiOut(1, 177, 22, 0);
   blinkP2 := false;
  end;
  if PlayerIndex = 2 then										// Wenn Player 3 gestoppt, alle Rotary LEDs im Kanalzug abschalten
  begin
   MidiOut(1, 178, 4, 0);
   MidiOut(1, 177, 24, 0);
   blinkP3 := false;
  end;
end;

procedure OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer);
begin
	if PlayerIndex = 0 then										// Wenn Player 1 im EOF Status, alle Rotary LEDs im Kanalzug blinken lassen
  	blinkP1 := true;
  if PlayerIndex = 1 then										// Wenn Player 2 im EOF Status, alle Rotary LEDs im Kanalzug blinken lassen
  	blinkP2 := true;
  if PlayerIndex = 2 then										// Wenn Player 3 im EOF Status, alle Rotary LEDs im Kanalzug blinken lassen
  	blinkP3 := true;
end;

procedure OnCartwallPlayerStart(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem);
begin
   MidiOut(1, 178, 6, 127);									// Wenn Cartwall gestartet, alle Rotary LEDs im Kanalzug leuchten lassen
   MidiOut(1, 177, 26, 127);
end;

procedure OnCartwallPlayerStop(PlayerIndex: integer; Item: IAudioCartwallItem; PlaylistItem: IPlaylistItem; Duration: TTimeValue);			// Wenn Cartwall gestoppt, alle Rotary LEDs im Kanalzug abschalten
begin
   MidiOut(1, 178, 6, 0);
   MidiOut(1, 177, 26, 0);
end;

procedure OnExecuteCommand(Command: string);
begin
  if Command = 'MIC_BTN ACTIVATE' then begin			// Wenn Mikrofon 1 offen, alle Rotary LEDs im Kanalzug blinken lassen
		blinkM1 := true;
  end;
  if Command = 'MIC_BTN DEACTIVATE' then begin		// Wenn Mikrofon 1 geschlossen, alle Rotary LEDs im Kanalzug Ausschalten
		blinkM1 := false;
		MidiOut(1, 178, 8, 0);
  end;
end;