Behringer x32 fader start and monitor line muting

Hello everyone. I tried to adapt another mixer from Behringer, but in the end I stopped and just bought a Behringer x32 compact. Not a bad mixer, although a bit pricey for beginners. They chose it, since it can be used not only for broadcasting purposes.

So here is the script for Fader start and disable the monitor line on this mixer.

{*	Midi Control for Behringer x32 compact and mAirList
	version 1.0 (26.10.2021)
  	
	Uses 3 decks (A, B, C) and 2 mics
 	MIDI commands imput via mAirList Control Panel
 	Actions:
		1. Mute Monitor, connected via Matrix (5,6 in my example). It's routed to AUX outs 5 and 6.
		2. Fader-start. For deactivate it for deck - use MUTE button
		3. Talktimer for mics

	Before use please, set MIDI remote control to you Behringer x32 on mAirList control panel.
	Use this commands:
		"PLAYER_A UP" - for deck fader != 0
		"PLAYER_A DOWN" - for deck fader = 0
		"PLAYER_A MUTE" - for deck mute button is pressed and active
		"PLAYER_A UNMUTE" - for deck mute button is unpressed and unactive
		
		Use similar commands for deck B and C. Just change letter, example: "PLAYER_B UP"
		
		"MIC1 ON" - for mic fader != 0
		"MIC1 OFF" - for mic fader = 0
		
		Use similar commands for the second mic. Just change number, example: "MIC2 ON"

	Eugene Fisher, oct 2021

*}

var

MIC1st: boolean; //MICs fader status. If true - fader up
MIC2st: boolean; 

MonOutSt: boolean; //Monitor out status. If true - it's unmuted

DeckAst: boolean; //Deck faders status. If true - fader up
DeckBst: boolean;
DeckCst: boolean;

DeckAplay: boolean; //Deck playing status. If true - deck is playing
DeckBplay: boolean;
DeckCplay: boolean;

DeckAmute: boolean; //Deck muting status. If true - it's muted
DeckBmute: boolean;
DeckCmute: boolean;

//**********************************************************************************************************


// Set deck status on player stop
procedure OnPlayerStop(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem; Duration: int64);
begin
if PlayerIndex = 0 then begin // If player stopped
	DeckAplay :=false; // Set var to false
end;
if PlayerIndex = 1 then begin
	DeckBplay :=false;
end;
if PlayerIndex = 2 then begin
	DeckCplay :=false;
end;
end;

// Set deck status on player start
procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem);
begin
if PlayerIndex = 0 then begin // If player start
	DeckAplay :=true; // Set var to true
end;
if PlayerIndex = 1 then begin
	DeckBplay :=true;
end;
if PlayerIndex = 2 then begin
	DeckCplay :=true;
end;
end;



procedure OnExecuteCommand(Command: string);
begin

// Monitors muting. Please, check you MixBus Midi Outs. In my case - i'm using matrix 5 and 6.
// Note: This script not remember monitor volume. On unmute i'ts set fader to pos -13,7 dB
// Note: you matrix must be linked (L+R) on mixer

if Command = 'MIC1 ON' then begin //If we recieved MIC1 ON command and...
	if MIC2st = false then begin // ... second mic fader is down ...
		if MonOutSt = true then begin // ... and monitors line is unmuted
			MidiOutOpen(1); // Open MIDI out
			MidiOut ( 1, $B0, $45, $00 ) ; // Closed matrix fader.
			MidiOutClose(1);
			MonOutSt := false; // Setting Monitor out var on false
			ExecuteCommand ('TALKTIMER START'); // starting talktimer
		end;
	end;
	MIC1st := true; // Set first mic fader var to false (it's down)
end;
if Command = 'MIC2 ON'  then begin
	if MIC1st = false then begin
		if MonOutSt = true then begin 
			MidiOutOpen(1);
			MidiOutOpen(1);
			MidiOut ( 1, $B0, $45, $00 ) ;
			MidiOutClose(1);
			MonOutSt := false;
			ExecuteCommand ('TALKTIMER START');
		end;
	end;
	MIC2st := true;
end;
if Command = 'MIC1 OFF' then begin // If first mic fader is dowm ...
	if MIC2st = false then begin  // ... and second mic is down ...
		if MonOutSt = false then begin // ... and Monitor line is muted
			MidiOutOpen(1); // Open MIDI
			MidiOut ( 1, $B0, $45, $3A ) ; // Open matrix fader to pos -13,7 dB
			MidiOutClose(1);
			MonOutSt := true; // Set mon out var to true
			ExecuteCommand ('TALKTIMER STOP'); // Stop talktimer
		end;
	end;
	MIC1st := false;
end;
if Command = 'MIC2 OFF' then begin
	if MIC1st = false then begin
		if MonOutSt = false then begin
			MidiOutOpen(1);
			MidiOut ( 1, $B0, $45, $3A ) ;
			MidiOutClose(1);
			MonOutSt := true;
			ExecuteCommand ('TALKTIMER STOP');
		end;
	end;
	MIC2st := false;
end;

// Fader start section

if Command = 'PLAYER_A UP' then begin //If fader with player A is up
	if DeckAst = false then begin // and before its be down
		if DeckAplay = false then begin // and deck doesnt playing
			if DeckAmute = false then begin // and its not muted on mixer
				ExecuteCommand ('PLAYER 1-1 START'); // starting deck
			end;
		end;
	end;
	DeckAst := true; //set var - fader for player A is up
end;
if Command = 'PLAYER_B UP' then begin 
	if DeckBst = false then begin 
		if DeckBplay = false then begin 
			if DeckBmute = false then begin 
				ExecuteCommand ('PLAYER 1-2 START'); 
			end;
		end;
	end;
	DeckBst := true; 
end;
if Command = 'PLAYER_C UP' then begin 
	if DeckCst = false then begin 
		if DeckCplay = false then begin 
			if DeckCmute = false then begin 
				ExecuteCommand ('PLAYER 1-3 START'); 
			end;
		end;
	end;
	DeckCst := true; 
end;

if Command = 'PLAYER_A DOWN' then begin //If fader in down postion
	ExecuteCommand ('PLAYER 1-1 STOP'); //Stop player
	DeckAst := false; // Set var - fader is down
end;
if Command = 'PLAYER_B DOWN' then begin 
	ExecuteCommand ('PLAYER 1-2 STOP');
	DeckBst := false; 
end;
if Command = 'PLAYER_C DOWN' then begin 
	ExecuteCommand ('PLAYER 1-3 STOP');
	DeckCst := false; 
end;

if Command = 'PLAYER_A UNMUTE' then begin //If mute off on mixer
	if DeckAst = true then begin // and fader in up position
		ExecuteCommand ('PLAYER 1-1 START'); // start deck
	end;
	DeckAmute := false; //set var - fader is unmuted
end;
if Command = 'PLAYER_B UNMUTE' then begin 
	if DeckBst = true then begin
		ExecuteCommand ('PLAYER 1-2 START');
	end;
	DeckBmute := false; 
end;
if Command = 'PLAYER_C UNMUTE' then begin 
	if DeckCst = true then begin
		ExecuteCommand ('PLAYER 1-3 START');
	end;
	DeckCmute := false; 
end;

if Command = 'PLAYER_A MUTE' then begin //if mute is active on mixer
	DeckAmute := true; // set var - deck is muted
end;
if Command = 'PLAYER_B MUTE' then begin 
	DeckBmute := true; 
end;
if Command = 'PLAYER_C MUTE' then begin
	DeckCmute := true; 
end;

end;



begin
end.

Yes, it may not be entirely correct in terms of writing, but it works. And this is the main thing.

1 Like

New version of script

[+] ON AIR lamp control via COM Port and Arduino nano
[~] Changing muting mode of monitor line. Now it’s muting by mixer.

{*	Midi Control for Behringer x32 compact and mAirList
	version 1.5 (08.11.2021)
	
	Changelog:
		~ Changing muting mode of monitor line
		+ ON AIR lamp control via COM port and Arduino nano
  	
	Uses 3 decks (A, B, C) and 2 mics
 	MIDI commands imput via mAirList Control Panel
 	Actions:
		1. Mute Monitor, connected via Matrix (5,6 in my example). It's routed to AUX outs 5 and 6.
		2. Fader-start. For deactivate it for deck - use MUTE button
		3. Talktimer for mics

	Before use please, set MIDI remote control to you Behringer x32 on mAirList control panel.
	Use this commands:
		"PLAYER_A UP" - for deck fader != 0
		"PLAYER_A DOWN" - for deck fader = 0
		"PLAYER_A MUTE" - for deck mute button is pressed and active
		"PLAYER_A UNMUTE" - for deck mute button is unpressed and unactive
		
		Use similar commands for deck B and C. Just change letter, example: "PLAYER_B UP"
		
		"MIC1 ON" - for mic fader != 0
		"MIC1 OFF" - for mic fader = 0
		
		Use similar commands for the second mic. Just change number, example: "MIC2 ON"
		

	Eugene Fisher, oct-nov 2021

*}

var

MIC1st: boolean; //MICs fader status. If true - fader up
MIC2st: boolean; 

MonOutSt: boolean; //Monitor out status. If true - it's unmuted

DeckAst: boolean; //Deck faders status. If true - fader up
DeckBst: boolean;
DeckCst: boolean;

DeckAplay: boolean; //Deck playing status. If true - deck is playing
DeckBplay: boolean;
DeckCplay: boolean;

DeckAmute: boolean; //Deck muting status. If true - it's muted
DeckBmute: boolean;
DeckCmute: boolean;

//**********************************************************************************************************

// Open COM Port for ON AIR lamp control

procedure OnLoad; //Do this action on load script
begin
ComPort('COM3').SetParameters(9600, 8, 'N', 1);
ComPort('COM3').Open;
ComPort('COM3').SendStr('WY'); //Off all lamps
end;	



// Set deck status on player stop
procedure OnPlayerStop(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem; Duration: int64);
begin
if PlayerIndex = 0 then begin // If player stopped
	DeckAplay :=false; // Set var to false
end;
if PlayerIndex = 1 then begin
	DeckBplay :=false;
end;
if PlayerIndex = 2 then begin
	DeckCplay :=false;
end;
end;

// Set deck status on player start
procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem);
begin
if PlayerIndex = 0 then begin // If player start
	DeckAplay :=true; // Set var to true
end;
if PlayerIndex = 1 then begin
	DeckBplay :=true;
end;
if PlayerIndex = 2 then begin
	DeckCplay :=true;
end;
end;



procedure OnExecuteCommand(Command: string);
begin

// Monitors muting. Please, check you MixBus Midi Outs. In my case - i'm using matrix 5 and 6.
// Note: This script not remember monitor volume. On unmute i'ts set fader to pos -13,7 dB
// Note: you matrix must be linked (L+R) on mixer

if Command = 'MIC1 ON' then begin //If we recieved MIC1 ON command and...
	if MIC2st = false then begin // ... second mic fader is down ...
		if MonOutSt = true then begin // ... and monitors line is unmuted
			MidiOutOpen(1); // Open MIDI out
			MidiOut ( 1, $B1, $45, $7F ) ; // Mute monitor line
			MidiOutClose(1);
			MonOutSt := false; // Setting Monitor out var on false
			ExecuteCommand ('TALKTIMER START'); // starting talktimer
			ComPort('COM3').SendStr('X'); // Turn on lamp MIC ON AIR
		end;
	end;
	MIC1st := true; // Set first mic fader var to false (it's down)
end;
if Command = 'MIC2 ON'  then begin
	if MIC1st = false then begin
		if MonOutSt = true then begin 
			MidiOutOpen(1);
			MidiOutOpen(1);
			MidiOut ( 1, $B1, $45, $7F ) ;
			MidiOutClose(1);
			MonOutSt := false;
			ExecuteCommand ('TALKTIMER START');
			ComPort('COM3').SendStr('X'); // Turn on lamp MIC ON AIR
		end;
	end;
	MIC2st := true;
end;
if Command = 'MIC1 OFF' then begin // If first mic fader is dowm ...
	if MIC2st = false then begin  // ... and second mic is down ...
		if MonOutSt = false then begin // ... and Monitor line is muted
			MidiOutOpen(1); // Open MIDI
			MidiOut ( 1, $B1, $45, $00 ) ; ; // Unmute monitor line
			MidiOutClose(1);
			MonOutSt := true; // Set mon out var to true
			ExecuteCommand ('TALKTIMER STOP'); // Stop talktimer
			ComPort('COM3').SendStr('W'); // Turn off lamp MIC ON AIR
		end;
	end;
	MIC1st := false;
end;
if Command = 'MIC2 OFF' then begin
	if MIC1st = false then begin
		if MonOutSt = false then begin
			MidiOutOpen(1);
			MidiOut ( 1, $B1, $45, $00 ) ;
			MidiOutClose(1);
			MonOutSt := true;
			ExecuteCommand ('TALKTIMER STOP');
			ComPort('COM3').SendStr('W'); // Turn off lamp MIC ON AIR
		end;
	end;
	MIC2st := false;
end;

// Fader start section

if Command = 'PLAYER_A UP' then begin //If fader with player A is up
	if DeckAst = false then begin // and before its be down
		if DeckAplay = false then begin // and deck doesnt playing
			if DeckAmute = false then begin // and its not muted on mixer
				ExecuteCommand ('PLAYER 1-1 START'); // starting deck
			end;
		end;
	end;
	DeckAst := true; //set var - fader for player A is up
end;
if Command = 'PLAYER_B UP' then begin 
	if DeckBst = false then begin 
		if DeckBplay = false then begin 
			if DeckBmute = false then begin 
				ExecuteCommand ('PLAYER 1-2 START'); 
			end;
		end;
	end;
	DeckBst := true; 
end;
if Command = 'PLAYER_C UP' then begin 
	if DeckCst = false then begin 
		if DeckCplay = false then begin 
			if DeckCmute = false then begin 
				ExecuteCommand ('PLAYER 1-3 START'); 
			end;
		end;
	end;
	DeckCst := true; 
end;

if Command = 'PLAYER_A DOWN' then begin //If fader in down postion
	ExecuteCommand ('PLAYER 1-1 STOP'); //Stop player
	DeckAst := false; // Set var - fader is down
end;
if Command = 'PLAYER_B DOWN' then begin 
	ExecuteCommand ('PLAYER 1-2 STOP');
	DeckBst := false; 
end;
if Command = 'PLAYER_C DOWN' then begin 
	ExecuteCommand ('PLAYER 1-3 STOP');
	DeckCst := false; 
end;

if Command = 'PLAYER_A UNMUTE' then begin //If mute off on mixer
	if DeckAst = true then begin // and fader in up position
		ExecuteCommand ('PLAYER 1-1 START'); // start deck
	end;
	DeckAmute := false; //set var - fader is unmuted
end;
if Command = 'PLAYER_B UNMUTE' then begin 
	if DeckBst = true then begin
		ExecuteCommand ('PLAYER 1-2 START');
	end;
	DeckBmute := false; 
end;
if Command = 'PLAYER_C UNMUTE' then begin 
	if DeckCst = true then begin
		ExecuteCommand ('PLAYER 1-3 START');
	end;
	DeckCmute := false; 
end;

if Command = 'PLAYER_A MUTE' then begin //if mute is active on mixer
	DeckAmute := true; // set var - deck is muted
end;
if Command = 'PLAYER_B MUTE' then begin 
	DeckBmute := true; 
end;
if Command = 'PLAYER_C MUTE' then begin
	DeckCmute := true; 
end;


end;


// Turning on ENCODER ON lamp, when mAirList goes ON AIR
procedure OnOnAir;
begin
	ComPort('COM3').SendStr('Z');
end;

// Turning off ENCODER ON lamp, when mAirList goes ON AIR
procedure OnOffAir;
begin
	ComPort('COM3').SendStr('Y');
end;



begin
end.


Sketch for Arduino nano for Lamp control

int MicLamp = 3; // pin, where connected MIC ON AIR lamp RELAY
int AirLamp = 5; // pin, where connected ENCODER ON lamp RELAY

void setup() {
// Set pins as outputs
  pinMode(MicLamp, OUTPUT);
  pinMode(AirLamp, OUTPUT);

// Open COM port at 9600
  Serial.begin(9600);

// Close all relays
digitalWrite(AirLamp, LOW);
digitalWrite(MicLamp, LOW);
  
}

void loop() {

if (Serial.available() > 0) { // If we recieved something on COM port
  int COMdata = Serial.read(); // Read data to COMdata
    if (COMdata == 87) { //W || If recieved symbol W 
      digitalWrite(AirLamp, HIGH); // Lamp ENCODER ON turn ON
      Serial.println("Air Lamp turned on."); // Send MSG to COM Port
      delay(30); // 
    } else {
    if (COMdata == 88) { //X || If recieved symbol X
      digitalWrite(AirLamp, LOW); // Lamp ENCODER ON turn OFF
      Serial.println("Air Lamp turned off."); // Send MSG to COM Port
      delay(30); // 
    } else {
    if (COMdata == 89) { //Y || If recieved symbol Y
      digitalWrite(MicLamp, HIGH); // Lamp MIC ON AIR turn ON
      Serial.println("Mic Lamp turned on."); // Send MSG to COM Port
      delay(30); // 
    } else {
    if (COMdata == 90) { //Z || If recieved symbol Z
      digitalWrite(MicLamp, LOW); // Lamp MIC ON AIR turn OFF
      Serial.println("Mic Lamp turned off."); // Send MSG to COM Port
      delay(30); // 
    } else { // If symbol is not recignized
      Serial.println("Serial data recived, but not recognised."); // Send MSG to COM Port
      delay(30); // 
    }
    }
    }
    }
}

}

Some photos from our studio:




1 Like