Hallo Ihr bastelnden Radio Modis da draussen
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;