Behringer BCR2000 midi remote

I created a script for Behringer BCR2000.
To use it first you have to select on your BCR2000 “rel1” mode for all knobs (edit-turn knob- turn mode knob) and “toggle off” for each button (including encoder buttons) .

I implemented only 2 set of top encoders, for quick controls and send level.
Bottom side is used for eq and some other basic track controls.

v 1.0 first release
v 1.1 navigate tracks via side button
v 1.2Focused Quick Control lock added
BCR2000_midi_remote Docs and .bcr (204.5 KB)
Behringer_BCR2000.midiremote (175.9 KB)


For the BCR2000 it would be even better to record a sysex-dump of the preset. In the API you can then send this dump file via the “midiOutput.sendSysexFile(‘filename’, delayMSec)” function. The sysex-file must be placed inside the script’s folder next to the main script file. As far as I remember, BCR2000 needs at least 3 or even 5 ms delay because its microcontroller throws an error.


I created a dump of BCR preset to be sent via script.

Seems that this method requires a third parameter:
SendSysexFile (activeDevice : ActiveDevice, fileName : string, delayMilliseconds : number)

What shoud I put instead of ActiveDevice?
midiOutput.sendSysexFile(ActiveDevice, ‘preset.bcr’, 5)

sorry, of cause. The first parameter “activeDevice” is mandatory on all “low level” functions. Thank you for correcting!

1 Like

I have a question, is the midi remote bi-directional, that is, if you operate say a quick control in cubase does it reflect on the BCR2000 encoder?

1 Like

Sure thing!

1 Like

V1.3 update

  • pre-filter eq controls added.
  • Added push button for Focused Quick Control: if focused parameter is a button now you can push the encoder to switch.

In the attached pdf also a scheme of cc assignement.

Uploading: BCR2000_midi_remote guide and .bcr…
Behringer_BCR2000.midiremote (176.1 KB)


Hi @Giampaolo_Gesuale, have you seen the API feature “Control Layer Zone”? It for handling what on the BCR2000 is called “encoder groups”. Here’s an example, I hope the idea is understandable:

var encoderGroups = surface.makeControlLayerZone('Encoder Groups')
var encoderGroup1 = encoderGroups.makeControlLayer('Group 1')
var encoderGroup2 = encoderGroups.makeControlLayer('Group 2')

var knob0101 = surface.makeKnob(0, 0, 1, 1)
knob0101.mSurfaceValue.mMidiBinding.setInputPort(midiInputDAW).bindToControlChange(0, 21)
var knob0102 = surface.makeKnob(0, 0, 1, 1)
knob0102.mSurfaceValue.mMidiBinding.setInputPort(midiInputDAW).bindToControlChange(1, 21)

var knob0201 = surface.makeKnob(1, 0, 1, 1)
knob0101.mSurfaceValue.mMidiBinding.setInputPort(midiInputDAW).bindToControlChange(0, 22)
var knob0202 = surface.makeKnob(1, 0, 1, 1)
knob0102.mSurfaceValue.mMidiBinding.setInputPort(midiInputDAW).bindToControlChange(1, 22)

1 Like

The variable naming knob0101 is to indicate that it’s the first knob of the first encoder group.

1 Like

@Jochen_Trappe Layer Zones… awesome!!!

Thanks for your hint :ok_hand:

Look at this!

Layers switch automatically when you turn a knob related to his group.

v 1.4
Behringer_BCR2000.midiremote (2.5 KB)



  • Cue level control
  • Control Room Main channel level control
  • Monitor enable control
  • Read and write automation control
  • Foot-switches

Behringer_BCR2000.midiremote (2.8 KB)


this is marvelous work! I have a BCF-2000 which I am going to try and programme when I can work out how this scripting works. I might borrow some of your code if that’s ok to get me started.


Happy to share any info needed!

1 Like

I have one too, but not a clue how to do the API scripting thing. I think I 'll stick with the surface option for now.

Nice work. Sorry for the off-topic comment :man_facepalming:

1 Like

I made this label to be printed (and cut with a lot of patience :sweat_smile:)

BCR2000 label.pdf (98.6 KB)


Man! I don’t know what to say!

1 Like

Hi Giampaolo,

Will happily try your BCR MID Remote.
Great job, really. Thanks a lot for sharing. :pray: :blush:


1 Like

Thank you funkster1! Let me know if you have any suggestions to make it even better!

1 Like


how come that your v 1.4+1.5 are only 2.5/2.8kib in size while the first version weigh in at around 180kb?
I’m having a little problem with the volume control:
When operating from the BCR no problem, lower row knobs 7+8 work independantly (knob 7 not assigned).
When moving the volume slider in Cubase, both knobs work together in sync?

Just a simple GIF animation to show you, sorry for the bad quality :wink: