Behringer BCF2000 midi remote

I’ve already done the BCR version but I don’t have BCF2000 at moment so… let’s do some :see_no_evil:blind-scripting!

Will it work? Please let me know.

behringer_bcf2000.midiremote (2.5 KB)

i’ll test for you next wee. no scripting, just direct control, yes?

1 Like

I made it with javascript and exported .midiremote, since I can’t connect the hardware…
I am just doubtful about motorized faders.: I binded them from CC81 and following, and set them to absolute mode.
I don’t know if they will work as knobs or it will need some more scripting strategy to follow changes and make them move smootly .

I just linked here and requested the code… however, I did mean to ask how the motorized faders might work since you aren’t getting feedback from Cubase on that.

I was considering coding it directly to the value in question and using the display value change… I don’t have a BCF either.


In the MCU mode the faders are using Pitch Bend. Which mode do you use for the BCF, please?

I have the device, I can test it.

I don’t i was trying to help someone else with a different issue thinking that we could use the script from this thread to make a “blank page”. I don’t have a BCF personally.

But I did ask on a different thread how the motorized faders could possibly work since there isn’t any events coming from Cubase. But I guess there is something happening here I don’t understand. Like, the MIDI values are being sent directly to the device or something. But I swear I tested that and didn’t see any data going to the device in midi-ox when the fader in Cubase was moved with the mouse. It was hard to set up, but I guess I could do it again.

Skipping between 3 threads all about the BCF right now…

1 Like


You can bind any action to the MIDI message. For example like this;

knobStrip.knob.mEncoderValue.mOnProcessValueChange = function (context, newValue, oldValue) {
	midiOutput.sendMidi(context, [0xb0, knobIndex, Math.round(newValue * 127)])

This will send:

  • MIDI Message == MIDI CC (0xb0);
  • MIDI CC Nr == knobIndex
  • Value == new value from Cubase * 127 (because the value in Cubase is normalised 0-1)

If you want to use PitchBend, use:

midiOutput.sendMidi(context, [0xe0, Math.round(newValue * 16384)])

That doesn’t provide feedback though. When the value in Cubase changes this callback is made, but it has the same value as the last time the device sent the data, not the value that is in Cubase!!!

So you move the fader it sends 64, you move the mouse in Cubase all the way to the top, the callback gets 64. You can move the fader all around up and down, the callback still gets 64 until you move the fader again.


No, this sends the normalised value 0-1.

Do you want to use the mOnDisplayValueChange, instead of the mOnProcessValueChange? Is this what you are searching for?

Sure it is normalized, I was just using 64 for simplicity.

Replace 64 with .5 and the statement is still valid. mOnProcessValueChange is triggered when the value changes in Cubase, but it ALLWAYS sends the last value that came from the device.


Then you have a bug in your script.

Nope! This has been verified by many times over. It looks like a bug in Cubase though.


Would you be willing to share the JS file with me (via Private Message)? I’m going to go to bring my BCF2000 today and I would test it out. Btw, which Mode do you use on the BCF, please?

This belongs on a separate thread as it is getting confusing.

As stated already above, I don’t have that device or code for that device.

This has gotten off track from the original thread. I came over to this thread to possibly get help on another and … like I said, there are 3 threads right now. This topic is different it is about mOnProcessValueChange not working as one would expect.

I have shared my code for LCXL and the workaround for this exact issue.
Here: GitHub - oqion/midiremote-userscripts: A place for user created MIDI Remote API scripts

And an earlier discussion about the problem is here:

What??? That can’t be working, can it?


I haven’t tried, sorry. :man_shrugging:


here you go:

var value14Bit = value * 16384
var value14BitLSB = value14Bit & 0x7F
var value14BitMSB = value14Bit >> 7

midiOutput.sendMidi(context, [0xe0, newValue14BitLSB, newValue14BitMSB])


I assume you are referring to the pitch bend code. I believe that you already verified the behavior as I described it. But this jocularity has me concerned. Was the mOnProcessValueChange callback originally intended to work as Martin has described and doesn’t? Is Martin mistaken about a design change, or am I wrong? I would love to be wrong :slight_smile:

Of course, you are right. I should read the specification. :thinking:

That’s what I didn’t try, but would be interesting to check if it works:

var pitchBendOutput = surface.makeCustomVariableValue('PitchBendOutput')

knob.mSurfaceValue.mOnProcessValueChange = function(activeDevice, value) {
	pitchBendOutput.setProcessValue(activeDevice, value)