Bc2000 (for the BCF2000 & BCR2000) group photo

Yahoo Groups archive

Bc2000 (for the BCF2000 & BCR2000)

Index last updated: 2026-04-28 23:16 UTC

Thread

SysEx String Programming / Syntax Help for BCR2000

SysEx String Programming / Syntax Help for BCR2000

2013-08-18 by evanlong@ymail.com

I need some serious help programming the BCR2000 to work with SysEx strings (not CC messages).  I have found the documentation from Behringer on the subject to be appallingly sparse.  The BCR seems like a great controller if you are running mostly soft synths or software plugins, where you can just use the "learn" function to set it up, but not so much if you are working with pre-USB hardware.

My background is that I used to have a Peavey PC1600x controller (nice controller BTW), which allowed users to program in a SysEx string per fader and also to specify the minimum and maximum values.  The problem is, I have absolutely no idea how to do something comparable on the BCR2000.  I have read of people using MIDI-Ox to write individual SysEx lines, then trigger "learn" on the BCR, then send the SysEx string to the device.  Apparently though, I don't know what syntax to use because every time I try this, the BCR's readout says "BAD."

Specifically, I am trying to configure the BCR to control a Yamaha RM50 drum brain.  An example SysEx string to control volume would be

F0 43 10 30 03 06 00 00 00 00 VAL F7

with a range of 1-127.  There are also tons of other parameters to set up like that such as waveform, panning, etc., most of which cannot be assigned a CC value.  So how do I program the BCR to work with this SysEx data?  In other words, how do I take the above string and value range and send it to a knob -- through MIDI-Ox or a similar program -- in a way that the BCR will understand ("GOOD")?

Please forgive me if this has already been covered ad nauseam, but I have searched all over the Net and also on this board but haven't seen an explanation.

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-18 by tom649731

Which net have you been searching? 
http://home.kpn.nl/f2hmjvandenberg281/bcman.html ;-)

--- In bc2000@yahoogroups.com, "evanlong@..." <evanlong@...> wrote:
Show quoted textHide quoted text
>
> Please forgive me if this has already been covered ad nauseam, but I have searched all over the Net and also on this board but haven't seen an explanation.
>

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-19 by evanlong@ymail.com

Using BC Manager -- thank you for the link -- I've figured out how to program custom SysEx strings into the BCR which only use one variable, then to set the range of values for the variable.  That worked.

My next question is, how do you set up strings that use 2-part, high and low value variables?  Example, to modify the pitch of voice 1 of the user voice bank in a Yamaha RM50:

F0 43 10 30 [start, Yamaha, device #, RM50]

03 06 00 00 02 [voice parameter change, user bank, voice 1, "easy voice", pitch]

xx yy [parameter value (high), parameter value (low)]

F7 [end]

Overall, the string would be something like F0 43 10 30 03 06 00 00 02 xx yy F7.  The MIDI specifications in the RM50 manual state that the settings/range for the high parameter are 0-1 high 1bit, and the settings/range for the low parameter are 0-127 low 7 bit.  

So, how do I translate this into BC Manager, then into the BCR?

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-20 by Royce


This really just an 8 bit variable 0 to 255


.minmax 0 255
.tx F0 43 10 30 03 06 00 00 02 val7.13 val0.6 F7

It's all in Mark's great manual on the Behringer control language.
This might also be useful SecretBC.pdf in the file section.

All the best
Royce

--- In bc2000@yahoogroups.com, "evanlong@..." wrote:
>
> Using BC Manager -- thank you for the link -- I've figured out how to program custom SysEx strings into the BCR which only use one variable, then to set the range of values for the variable. That worked.
>
> My next question is, how do you set up strings that use 2-part, high and low value variables? Example, to modify the pitch of voice 1 of the user voice bank in a Yamaha RM50:
>
> F0 43 10 30 [start, Yamaha, device #, RM50]
>
> 03 06 00 00 02 [voice parameter change, user bank, voice 1, "easy voice", pitch]
>
> xx yy [parameter value (high), parameter value (low)]
>
> F7 [end]
>
> Overall, the string would be something like F0 43 10 30 03 06 00 00 02 xx yy F7. The MIDI specifications in the RM50 manual state that the settings/range for the high parameter are 0-1 high 1bit, and the settings/range for the low parameter are 0-127 low 7 bit.
>
> So, how do I translate this into BC Manager, then into the BCR?
>

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-20 by evanlong@ymail.com

Thank you, but I'm still confused.  

Now that I've started working with BC Manager and have found it to work, I'm looking for a format I can use that can be inserted into one of its device definition files.  Can you show me how to rewrite what you did in that format?

--- In bc2000@yahoogroups.com, "Royce" <rpcfender@...> wrote:
Show quoted textHide quoted text
>
> 
> This really just an 8 bit variable 0 to 255
> 
> 
> .minmax  0  255
> .tx F0 43 10 30 03 06 00 00 02 val7.13 val0.6 F7
> 
> It's all in Mark's great manual on the Behringer control language.
> This might also be useful  SecretBC.pdf
> <http://f1.grp.yahoofs.com/v1/cLISUolsF_XgLiDySkrGxR-DRKeq-Nbjrba6Hc1Jvb\
> Gsy3cD2ucRrz2z8v4nUpOahYcth6Jt2bEwV8WVm9lT5w/Documentation/SecretBC.pdf>
> in the file section.
> 
> All the best
> Royce
> 
> --- In bc2000@yahoogroups.com, "evanlong@"  wrote:
> >
> > Using BC Manager -- thank you for the link -- I've figured out how to
> program custom SysEx strings into the BCR which only use one variable,
> then to set the range of values for the variable.  That worked.
> >
> > My next question is, how do you set up strings that use 2-part, high
> and low value variables?  Example, to modify the pitch of voice 1 of the
> user voice bank in a Yamaha RM50:
> >
> > F0 43 10 30 [start, Yamaha, device #, RM50]
> >
> > 03 06 00 00 02 [voice parameter change, user bank, voice 1, "easy
> voice", pitch]
> >
> > xx yy [parameter value (high), parameter value (low)]
> >
> > F7 [end]
> >
> > Overall, the string would be something like F0 43 10 30 03 06 00 00 02
> xx yy F7.  The MIDI specifications in the RM50 manual state that the
> settings/range for the high parameter are 0-1 high 1bit, and the
> settings/range for the low parameter are 0-127 low 7 bit.
> >
> > So, how do I translate this into BC Manager, then into the BCR?
> >
>

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-20 by Royce

Sorry.
I don't normally use Mark's editor (as good as it is.)

Go to the editor page that sets the values for the encoder you are interested in.
Set Value 1 (min) to 0
Set Value 2 (max) to 255

Press the red '+' button to add a output line (.tx)

Press the red '+' button on the new screen to add the first element of the .tx line.
It should be a Byte of value F0 in hexadecimal. Type it in the Hex box. Press OK
Press the red '+' button on the screen to add the next element of the .tx line.
It should be a Byte of value 43 in hexadecimal. 
...and so on
Press the red '+' button on the screen to add the next element of the .tx line.
It should be Value bits 7-13. Press OK
Press the red '+' button on the screen to add the next element of the .tx line.
It should be Value bits 0-6. Press OK
...and so on till the F7 end byte

All the best
Royce


--- In bc2000@yahoogroups.com, "evanlong@..." <evanlong@...> wrote:
Show quoted textHide quoted text
>
> Thank you, but I'm still confused.  
> 
> Now that I've started working with BC Manager and have found it to work, I'm looking for a format I can use that can be inserted into one of its device definition files.  Can you show me how to rewrite what you did in that format?
> 
> --- In bc2000@yahoogroups.com, "Royce" <rpcfender@> wrote:
> >
> > 
> > This really just an 8 bit variable 0 to 255
> > 
> > 
> > .minmax  0  255
> > .tx F0 43 10 30 03 06 00 00 02 val7.13 val0.6 F7
> > 
> > It's all in Mark's great manual on the Behringer control language.
> > This might also be useful  SecretBC.pdf
> > <http://f1.grp.yahoofs.com/v1/cLISUolsF_XgLiDySkrGxR-DRKeq-Nbjrba6Hc1Jvb\
> > Gsy3cD2ucRrz2z8v4nUpOahYcth6Jt2bEwV8WVm9lT5w/Documentation/SecretBC.pdf>
> > in the file section.
> > 
> > All the best
> > Royce
> > 
> > --- In bc2000@yahoogroups.com, "evanlong@"  wrote:
> > >
> > > Using BC Manager -- thank you for the link -- I've figured out how to
> > program custom SysEx strings into the BCR which only use one variable,
> > then to set the range of values for the variable.  That worked.
> > >
> > > My next question is, how do you set up strings that use 2-part, high
> > and low value variables?  Example, to modify the pitch of voice 1 of the
> > user voice bank in a Yamaha RM50:
> > >
> > > F0 43 10 30 [start, Yamaha, device #, RM50]
> > >
> > > 03 06 00 00 02 [voice parameter change, user bank, voice 1, "easy
> > voice", pitch]
> > >
> > > xx yy [parameter value (high), parameter value (low)]
> > >
> > > F7 [end]
> > >
> > > Overall, the string would be something like F0 43 10 30 03 06 00 00 02
> > xx yy F7.  The MIDI specifications in the RM50 manual state that the
> > settings/range for the high parameter are 0-1 high 1bit, and the
> > settings/range for the low parameter are 0-127 low 7 bit.
> > >
> > > So, how do I translate this into BC Manager, then into the BCR?
> > >
> >
>

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-20 by Mark v.d. Berg

--- In bc2000@yahoogroups.com, "evanlong@..." <evanlong@...> wrote:
> Now that I've started working with BC Manager and have found it to work, I'm looking for a format I can use that can be inserted into one of its device definition files.  Can you show me how to rewrite what you did in that format?
> 
> --- In bc2000@yahoogroups.com, "Royce" <rpcfender@> wrote:
> > This really just an 8 bit variable 0 to 255
> > .minmax  0  255
> > .tx F0 43 10 30 03 06 00 00 02 val7.13 val0.6 F7

Have you looked at section 16 of the BC Manager manual?
This describes the SysEx model definition file format in detail - there's even a section on Yamaha.
You might also look at AN200.ini (included in the BC Manager package, extracted to the Models subfolder), which looks rather similar to what you'd have to write for your RM50.

I think the header has to look something like this:

[MODEL]
ProgramName=BC Manager
ProgramVersion=2.3.0
ManufacturerName=Yamaha
ManufacturerID=43
ModelName=RM50
ModelID=30
DevicePosition=WithCommand
MinDevice=0
MaxDevice=F
DefaultDevice=0
Command=1
AddressLength=5
ChecksumMethod=
ChecksumStart=
FileVersion=1.0.0
FileAuthor=[Your name]
Comment=[Bla bla...]

(ModelID and AddressLength are crucial here. The other items are mostly the standard Yamaha values.)

Then for each parameter you need to include a line specifying the address (5 bytes), the range, the "val..." and the description.

E.g. the parameter you've been discussing needs a line like:

03 06 00 00 02 | 00 00 - 01 7F | val7.13 val0.6 ;user voice bank: voice 1: pitch

Hope this helps,
Mark.

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-20 by evanlong@ymail.com

I did read Section 16 of the manual, but it's difficult for me to pick all this up on the first few passes, as I haven't worked extensively with MIDI at the hex level before.  I will be happy to share the RM50 files* when I've finished them if you continue to help me through it though.

I think I understand what you both are saying about this being a 0-255 variable.  If so, the first byte can act as a multiplier of sorts on the second.  In other words, to get the total range of a multi-byte variable, one multiplies the range of the high variable -- in this example, 2 -- by the low variable -- in this case, 128 -- in the device manual's Midi Data Format tables.  Though it seems like the full range granted by that setup is not necessarily desired for every string -- correct?  If not, do you just limit that in the MinValue and MaxValue areas of the parameter definitions?  On a similar note, in a two byte variable, will the "val" portion always be written as "val7.13 val0.6," or are there other possibilities/requirements for other circumstances?  If there are others, which is used when -- and how does one know how to tell the difference?

While we're talking multi-byte variable formats, here is another example from the manual that I don't know how to read nor to set up.  This one is for selecting the first of two waveforms/samples (out of 133 options) that make up a drum voice.  I copied this verbatim from one of the data charts on page 127 of the RM50 manual.

Value (high)            | Value (low)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bit 6-5 mem
00 = preset
01 = wave card
10 = internal
bit 4-3 card num
00 = 1, 01 = 1, 10 = 2
bit 0 num high            bit7-0 num low 7bit

What do I do with that in terms of setting up a string in BC Manager?

*The copy of BC Manager that I just downloaded has a max parameter address length of 4, but I need 5 for the RM50 (as Mark noted).  I can work around that by putting an extra byte in the model ID field after the 30, but it means I have to break up the device definition files by parameter group.

--- In bc2000@yahoogroups.com, "Mark v.d. Berg" <markwinvdb@...> wrote:
Show quoted textHide quoted text
>
> --- In bc2000@yahoogroups.com, "evanlong@" <evanlong@> wrote:
> > Now that I've started working with BC Manager and have found it to work, I'm looking for a format I can use that can be inserted into one of its device definition files.  Can you show me how to rewrite what you did in that format?
> > 
> > --- In bc2000@yahoogroups.com, "Royce" <rpcfender@> wrote:
> > > This really just an 8 bit variable 0 to 255
> > > .minmax  0  255
> > > .tx F0 43 10 30 03 06 00 00 02 val7.13 val0.6 F7
> 
> Have you looked at section 16 of the BC Manager manual?
> This describes the SysEx model definition file format in detail - there's even a section on Yamaha.
> You might also look at AN200.ini (included in the BC Manager package, extracted to the Models subfolder), which looks rather similar to what you'd have to write for your RM50.
> 
> I think the header has to look something like this:
> 
> [MODEL]
> ProgramName=BC Manager
> ProgramVersion=2.3.0
> ManufacturerName=Yamaha
> ManufacturerID=43
> ModelName=RM50
> ModelID=30
> DevicePosition=WithCommand
> MinDevice=0
> MaxDevice=F
> DefaultDevice=0
> Command=1
> AddressLength=5
> ChecksumMethod=
> ChecksumStart=
> FileVersion=1.0.0
> FileAuthor=[Your name]
> Comment=[Bla bla...]
> 
> (ModelID and AddressLength are crucial here. The other items are mostly the standard Yamaha values.)
> 
> Then for each parameter you need to include a line specifying the address (5 bytes), the range, the "val..." and the description.
> 
> E.g. the parameter you've been discussing needs a line like:
> 
> 03 06 00 00 02 | 00 00 - 01 7F | val7.13 val0.6 ;user voice bank: voice 1: pitch
> 
> Hope this helps,
> Mark.
>

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-20 by evanlong@ymail.com

Just to clarify, the section copied out of the Midi Data chart looked fine in the monospaced font that I was typing in, then it got all out of whack when the board reformatted it.  Here's a redo:

Value (high)            
------------
bit 6-5 mem
00 = preset
01 = wave card
10 = internal
bit 4-3 card num
00 = 1, 01 = 1, 10 = 2
bit 0 num high            

Value (low)
-----------
bit7-0 num low 7bit

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-21 by Mark v.d. Berg

--- In bc2000@yahoogroups.com, "evanlong@..." <evanlong@...> wrote:
> The copy of BC Manager that I just downloaded has a max parameter address length of 4, but I need 5 for the RM50. I can work around that by putting an extra byte in the model ID field after the 30, but it means I have to break up the device definition files by parameter group.

Ah, yes; I hadn't realized 4 is the current maximum; sorry about that.

Another (probably slightly better) workaround would be to set AddressLength to 3 and put the RM50's two parameter address bytes ("Parameter 1" and "Parameter 2") at the front of the "Data"/"value" group; this wouldn't force you to use multiple files.

However, it's best to avoid all these workarounds altogether:
you can now download a beta version of BC Manager that allows addresses of up to 8(!) bytes from my website:
http://home.kpn.nl/f2hmjvandenberg281/download/BC/BCMan242b1.zip
Just extract the exe and copy it to your existing BC Manager program folder. (For safety, you may like to rename the old BCMan.exe first.)

> it seems like the full range granted by that setup is not necessarily desired for every string -- correct?  If not, do you just limit that in the MinValue and MaxValue areas of the parameter definitions?

Indeed: if both MinValue and MaxValue are smaller than 128, you only need to write the LSB in a BC Manager SysEx model definition file.

> in a two byte variable, will the "val" portion always be written as "val7.13 val0.6," or are there other possibilities/requirements for other circumstances?  If there are others, which is used when -- and how does one know how to tell the difference?

The BCR maintains a 14-bit value for every encoder/button, and it can output certain portions of that value (see "BC MIDI Implementation.pdf", section 14.6.1), in any order you like. You can even mix these "val..." identifiers with fixed values.
What is appropiate totally depends on the receiving device.

> While we're talking multi-byte variable formats, here is another example from the manual that I don't know how to read nor to set up.  This one is for selecting the first of two waveforms/samples (out of 133 options) that make up a drum voice.  I copied this verbatim from one of the data charts on page 127 of the RM50 manual.
> 
> Value (high)            | Value (low)
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> bit 6-5 mem
> 00 = preset
> 01 = wave card
> 10 = internal
> bit 4-3 card num
> 00 = 1, 01 = 1, 10 = 2
> bit 0 num high            bit7-0 num low 7bit
> 
> What do I do with that in terms of setting up a string in BC Manager?

First of all, I think the RM50 manual is incorrect in specifying "bit7-0 num low 7bit": it should say "bit6-0".

Secondly, unfortunately the BCR can't apply maths to items like "val7.13" or "val8.11": it can only send them as they are.
Obviously this is very inconvenient in complicated cases like this.
In this case, bit 0 of the high byte (=bit 7 of the encoder/button's value) is particularly problematic.
It may be easiest to send the high parameter byte as a fixed value (representing fixed choices for all that's in this parameter); of course this would only give the user a choice of 128 values (as defined by the low byte), but at least that's something.
So the definition in the BC Manager ini file would then look like:
<5-byte address> | 00 - 7F | <high byte: fixed value> val0.6 ;<description>
(Actually you could use "val" instead of "val0.6", since these are equivalent.)

Mark.

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-21 by evanlong@ymail.com

> Another (probably slightly better) workaround would be to set >AddressLength to 3 and put the RM50's two parameter address bytes ?  >("Parameter 1" and "Parameter 2") at the front of the "Data"/"value" >group; this wouldn't force you to use multiple files.

I tried that, but when I put values over 09 there, it gave me an error message.

> It may be easiest to send the high parameter byte as a fixed value (representing fixed choices for all that's in this parameter); of course this would only give the user a choice of 128 values (as defined by the low byte), but at least that's something.
> So the definition in the BC Manager ini file would then look like:
> <5-byte address> | 00 - 7F | <high byte: fixed value> val0.6 ;<description>
> (Actually you could use "val" instead of "val0.6", since these are equivalent.)

OK, so the way to go is basically to set up different knobs for each high-val (which in this case is specifying the voice bank -- and low-val specifies the voice number), since the last-used knob will just overwrite the previous one (i. e. jump to a different bank.  Since I am actually just interested in the user bank anyway, this is not a problem.  The RM50 is set up kind of strangely in that different banks have different numbers of voices in them -- some 27, some 60, etc.

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-21 by Mark v.d. Berg

--- In bc2000@yahoogroups.com, "evanlong@..." <evanlong@...> wrote:
>
> > Another (probably slightly better) workaround would be to set >AddressLength to 3 and put the RM50's two parameter address bytes ?  >("Parameter 1" and "Parameter 2") at the front of the "Data"/"value" >group; this wouldn't force you to use multiple files.
> 
> I tried that, but when I put values over 09 there, it gave me an error message.
> 

Can you give an example of this?
(Assuming the new beta works for you, this method isn't crucial to you, but I'm curious anyway, since this should work.)

Mark.

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-21 by evanlong@ymail.com

> > I tried that, but when I put values over 09 there, it gave me an > > error message.
> > 
> Can you give an example of this?
> (Assuming the new beta works for you, this method isn't crucial to > you, but I'm curious anyway, since this should work.)

This string worked (as did nine others like it [00 00 val - 08 00 val]):

01 00 00 00 | 00 - 01 | 09 00 val ;Channel 01 Filter (off/on)

These did not:

01 00 00 00 | 00 - 01 | 0A 00 val ;Channel 01 Balance (off/on)
01 00 00 00 | 00 - 01 | 0B 00 val ;Channel 01 Modulation (off/on)
01 00 00 00 | 00 - 01 | 0C 00 val ;Channel 01 Pitch Bend Range (off/on)

When I tried to reload the definition, BC Manager said, "Error 10: Invalid numerical argument."  I tested all the lines individually to identify the problem, and all the 00 - 09 value lines worked, but none of the 0A - 0C lines worked.

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-22 by Mark v.d. Berg

--- In bc2000@yahoogroups.com, "evanlong@..." <evanlong@...> wrote:
> This string worked (as did nine others like it [00 00 val - 08 00 val]):
> 
> 01 00 00 00 | 00 - 01 | 09 00 val ;Channel 01 Filter (off/on)
> 
> These did not:
> 
> 01 00 00 00 | 00 - 01 | 0A 00 val ;Channel 01 Balance (off/on)
> 01 00 00 00 | 00 - 01 | 0B 00 val ;Channel 01 Modulation (off/on)
> 01 00 00 00 | 00 - 01 | 0C 00 val ;Channel 01 Pitch Bend Range (off/on)
> 
> When I tried to reload the definition, BC Manager said, "Error 10: Invalid numerical argument."  I tested all the lines individually to identify the problem, and all the 00 - 09 value lines worked, but none of the 0A - 0C lines worked.
>

The error message occurs because the "Data" ("val...") section of a parameter definition line must be in the BCR's own BCL format, which requires "$" in front of hexadecimal numbers.
So e.g.:
01 00 00 00 | 00 - 01 | $0A 00 val ;Channel 01 Balance (off/on)

I'll try to make this point a little clearer in the discussion of the Data parameter in the BC Manager manual.

Mark.

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-24 by evanlong@ymail.com

The RM50 definition file is coming along, but wow, is it ever long.  That is a consequence of the RM50 being a drum synth, with separate settings for practically every note of every preset.

I managed to get around most of the complicated hi val/low val problems by using a fixed value for the hi vals, but I have some of questions about irregular low vals/low val ranges.  (Except where otherwise indicated, none of these have an accompanying hi val.)

1) There are some parameters which define the range as:

0-15 [bit3 = sign bit, 1 = (-), 0 = (+)]

What does the bit3 section mean?

2) There's a parameter which sets the low val range as:

low 7b -15 to +15 2' comp

Do I just represent this as a val with a range of 0-31?  What does the 2' comp part mean?

3) There's a parameter for the velocity curve that says:

Hi Val:
high 1bit

Low Val:
0-11

There are only 12 settings for the velocity curve.  Why did they put anything in the Hi Val column?

4) A few of the parameters have a split low val range of:

1-31, 33-122

Can I just set the range to 1-122?  What's the best way to handle this?

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-25 by evanlong@ymail.com

5) When there's a split high val/low val variable with an odd-numbered range, how do you break up the high and low ranges?  Example, with range being 211:

High Value:
high 1 bit

Low Value
low 6-0 bit (0-210)

I know on the 0-255 split variable, it was "00 00 - 01 7F" so that the first range effectively multiplied the second (2 x 128 = 256), but of course an odd number doesn't divide by two evenly.

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-25 by evanlong@ymail.com

Never mind on this last one; I got it.

--- In bc2000@yahoogroups.com, "evanlong@..." <evanlong@...> wrote:
Show quoted textHide quoted text
>
> 5) When there's a split high val/low val variable with an odd-numbered range, how do you break up the high and low ranges?  Example, with range being 211:
> 
> High Value:
> high 1 bit
> 
> Low Value
> low 6-0 bit (0-210)
> 
> I know on the 0-255 split variable, it was "00 00 - 01 7F" so that the first range effectively multiplied the second (2 x 128 = 256), but of course an odd number doesn't divide by two evenly.
>

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-25 by Mark v.d. Berg

--- In bc2000@yahoogroups.com, "evanlong@..." <evanlong@...> wrote:
> The RM50 definition file is coming along, but wow, is it ever long.  That is a consequence of the RM50 being a drum synth, with separate settings for practically every note of every preset.

You might consider splitting things up into multiple files.

There are more MIDI devices having huge amounts of parameters, so for some time I have been thinking about allowing hierarchical structures (i.e parameter groups) in the ini files, which BC Manager's dialog box could then display in a tree. But that is something for the future.

> 1) There are some parameters which define the range as:
> 0-15 [bit3 = sign bit, 1 = (-), 0 = (+)]
> What does the bit3 section mean?

I think it means this: if bit 3 is 1, the value indicated by bits 0-2 (decimal values: 0-7) is to be interpreted as negative:

3210
----
0000= 0
0001=+1
...
0111=+7

1000= 0 (?!)
1001=-1
...
1111=-7

> 2) There's a parameter which sets the low val range as:
> low 7b -15 to +15 2' comp
> What does the 2' comp part mean?

See http://en.wikipedia.org/wiki/Two%27s_complement

> Do I just represent this as a val with a range of 0-31?

If this is indeed a SEVEN-bit 2's complement notation as the manual says, this won't work, because -1 is then represented as 1111111 (decimal 127, hex $7F), and -15 as 1110001 (dec. 113, hex $71), so you can't use 0-31: you'd need to define the ranges of 0-15 and 113-127, which unfortunately the BCR doesn't allow.
(This is a well-known limitation of the BCR: it doesn't allow you to define a range that includes both negative and positive values in 2's complement notation.)

You COULD define a range of 0-127 here, but that would of course include many undesired values too; how bad that is, depends in part on how the RM50 reacts to these invalid values.

However, if this is actually a FIVE-bit 2's complement notation (unlikely, since the manual says "7-bit"; but you never know), 0-31 WOULD work: e.g. -1 would then be represented as 11111 (decimal 31, hex $1F). You'd have to try this out.

> 3) There's a parameter for the velocity curve that says:
> 
> Hi Val:
> high 1bit
> 
> Low Val:
> 0-11
> 
> There are only 12 settings for the velocity curve.  Why did they put anything in the Hi Val column?

No idea. It seems that Hi Val's "high 1bit" is always 0 here.

> 4) A few of the parameters have a split low val range of:
> 1-31, 33-122
> Can I just set the range to 1-122?  What's the best way to handle this?

From the RM50 manual I gather that these parameters are the MIDI controller numbers of Control Change messages: this may explain why 0 ("Bank Select (MSB)") and 32 ("Bank Select LSB") are excluded, and why 122 is the upper limit.
If you use 1-122, the only potential problem is 32. (I can't see a way to exclude 32, cf. the discussion of point 2 above.) But if the RM50 simply doesn't accept 32, it isn't much of a problem anyway.

Hope this helps,
Mark.

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-25 by evanlong@ymail.com

> You COULD define a range of 0-127 here, but that would of course include many undesired values too; how bad that is, depends in part on how the RM50 reacts to these invalid values.
> 
> However, if this is actually a FIVE-bit 2's complement notation (unlikely, since the manual says "7-bit"; but you never know), 0-31 WOULD work: e.g. -1 would then be represented as 11111 (decimal 31, hex $1F). You'd have to try this out.

I'll definitely try 0-127, possibly both.


5) Looks like I don't have this one after all.  When there's a split high val/low val variable with an odd-numbered range, how do you break up the high and low ranges? Example, with range being 211 ("Tempo" parameter in the "System" group):

High Value:
high 1 bit

Low Value
low 6-0 bit (0-210)

I know on the 0-255 split variable, it was "00 00 - 01 7F" so that the first range effectively multiplied the second (2 x 128 = 256), but of course an odd number doesn't divide by two evenly.

At first, I thought I was interpreting it incorrectly, and that 0-210 should just be the range for the low variable.  Then I realized that the maximum range for any one-byte variable is 00-7F.  This also brings me to my next question:

7) What is the best way to set this one up, voice element wave selection:

High Value
bit 6-5 mem
00 = preset
01 = wave card
10 = internal
bit 4-3 card num
00 = 1, 01 = 1, 10 = 2
bit 0 num high

Low Value
bit 7-0 num low 7bit

What I want to do is only use preset waves (internal and wave card waves are very rare, since they require the installation of optional ROM cards or sample-loading RAM), so bit 6-5 should be 00.  The other problem is that the range on the wave number is 1-133, just a few too many to fit into a byte, and of course, some of the most appealing waves (pulse, saw, and triangle) are in the 129-133 range.  

At first, I was thinking, since I want to use only preset waves, I could just set the hi-val to 00, and then I realized that it's more complicated than that because it's actually specifying bits there, not hi val values directly.

Aside from these questions, the definition is pretty much done; that's the good news.  The bad news is, if wave selection is impossible on the BCR2000 due to the 1-133 range, there is basically no point to the project from my current point of view, since I was intending to use this to set up the BCR primarily as a voice editor.

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-25 by Mark v.d. Berg

--- In bc2000@yahoogroups.com, "evanlong@..." <evanlong@...> wrote:
> 5) Looks like I don't have this one after all.  When there's a split high val/low val variable with an odd-numbered range, how do you break up the high and low ranges? Example, with range being 211 ("Tempo" parameter in the "System" group):
> 
> High Value:
> high 1 bit
> 
> Low Value
> low 6-0 bit (0-210)
> 
> I know on the 0-255 split variable, it was "00 00 - 01 7F" so that the first range effectively multiplied the second (2 x 128 = 256), but of course an odd number doesn't divide by two evenly.
> 
> At first, I thought I was interpreting it incorrectly, and that 0-210 should just be the range for the low variable.  Then I realized that the maximum range for any one-byte variable is 00-7F.

You're probably right: the manual wrongly suggests that Low Value's seven (available) bits ("low 6-0 bit") could hold 0-210, whereas High Value's extra bit is needed too.

To convert a "normal" byte (with actual data in all 8 bits) to two bytes with the highest bit ("bit 7") being 0 (as required for MinValue and MaxValue in the ini file), you insert a 0 at bit 7 (the most significant (leftmost) bit) of the original byte: thus, the original value at bit 7 is shifted one position to the left, i.e. to bit 8.
This new bit 8 then becomes bit 0 of the "Most Significant Byte" (MSB), and the original bits 0-6 together with the new bit 7 (being 0) become the "Least Significant Byte" (LSB).

So in this case we can calculate MaxValue as follows:

Actual MaxValue:
11010010 (decimal: 210)

Insert 0 at bit 7:
101010010

MSB=00000001 (hex: 01)
LSB=01010010 (hex: 52)

So I think the MinValue - MaxValue section of the parameter definition line should be "00 00 - 01 52".

> 7) What is the best way to set this one up, voice element wave selection:
> 
> High Value
> bit 6-5 mem
> 00 = preset
> 01 = wave card
> 10 = internal
> bit 4-3 card num
> 00 = 1, 01 = 1, 10 = 2
> bit 0 num high
> 
> Low Value
> bit 7-0 num low 7bit
> 
> What I want to do is only use preset waves (internal and wave card waves are very rare, since they require the installation of optional ROM cards or sample-loading RAM), so bit 6-5 should be 00.  The other problem is that the range on the wave number is 1-133, just a few too many to fit into a byte, and of course, some of the most appealing waves (pulse, saw, and triangle) are in the 129-133 range.  
> 
> At first, I was thinking, since I want to use only preset waves, I could just set the hi-val to 00, and then I realized that it's more complicated than that because it's actually specifying bits there, not hi val values directly.

If all bits of "Value High" except bit 0 can be 0, you can apply the same principle as above:

Actual MaxValue:
10000101 (decimal: 133)

Insert 0 at bit 7:
100000101

MSB=00000001 (hex: 01)
LSB=00000101 (hex: 05)

So if MinValue is 1 (as you say), the MinValue - MaxValue section of the parameter definition line should be "00 01 - 01 05".

Hope this helps,
Mark.

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-25 by evanlong@ymail.com

> So I think the MinValue - MaxValue section of the parameter definition line should be "00 00 - 01 52".

> So if MinValue is 1 (as you say), the MinValue - MaxValue section of the parameter definition line should be "00 01 - 01 05".

Both of these worked (though the range turned out to be 00 00 - 01 05 on the second one).  Actually, with a few exceptions, everything seems to be working now, including the tempo parameter with the range of 211.

The exceptions have in common that their ranges include both negative and positive values:

1) User Voice 1: Element 1: Delay Pitch

High Value
bit 0 high 1 bit

Low Value
bit7-0 -120 to +120 2' comp

What this parameter translates out to is a pitch change of -12.0 semitones to +12.0 semitones in the echoes.  The BCR knob covers the full range when the vars are set to 00 00 - 01 7F, but -- and this is a significant but -- it starts at zero and increases up to +12.0, then drops down immediately to -12.0 and starts counting back up for the remainder of the range, sort of like an upward sawtooth wave with a range of -12 to +12 starting at 1/2 phase.  

The four Voice Element parameters that have the "Bit 3 = sign bit" notes in their margins [bit3 = sign bit; 1 = -, 0 = +] (Level sensitivity, Pitch sensitivity, EG sensitivity, and Filter sensitivity) exhibit the same type of behavior.  It's better than nothing, but if there is a way to get these running in numerical order, that would be preferable.

2) User Voice 1: Element 1: Delay Level

High Value
00

Low Value
low 7bit -15 to +15 2' comp

Neither 00 00 - 01 1F nor 00 00 - 01 7F worked on this one.  Knob turns only give me 0 - 15, nothing in the negative part of the range, not even in that "sudden drop" fashion described above.

Otherwise, I did break up the definition files by parameter group, so the files for the Channel Setup Parameters, Rhythm Kit Parameters, System Setup Parameters, and Program Change Table Parameters are all ready.  I can't test them completely -- that would take weeks -- but I tested a few at random, and they worked.  Assuming I double-checked all the numbers correctly, they should all be fine.  As soon as the above parameters have been sorted out, I can share the RM50 definitions.

Also, for reference, the CC assignment parameters with the split ranges (1-31, 33-122) work fine with a continuous 01 - 7A range.  The RM50's readout just skips over 32.

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-26 by evanlong@ymail.com

Also, I know I read this somewhere before but can't find the source...

Is it possible to make the BCR's buttons play notes?  Let's say, for example, that I wanted to play a C1 at max volume.  It's for a drum voice that doesn't recognize note-off messages, so I don't care about note duration.  How would I set that up in BC Manager?

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-28 by Mark v.d. Berg

--- In bc2000@yahoogroups.com, "evanlong@..." <evanlong@...> wrote:
> Actually, with a few exceptions, everything seems to be working now, including the tempo parameter with the range of 211.
> 
> The exceptions have in common that their ranges include both negative and positive values:
> 
> 1) User Voice 1: Element 1: Delay Pitch

>  it starts at zero and increases up to +12.0, then drops down immediately to -12.0 and starts counting back up for the remainder of the range

> The four Voice Element parameters that have the "Bit 3 = sign bit" notes in their margins [bit3 = sign bit; 1 = -, 0 = +] (Level sensitivity, Pitch sensitivity, EG sensitivity, and Filter sensitivity) exhibit the same type of behavior.  It's better than nothing, but if there is a way to get these running in numerical order, that would be preferable.

This is more or less typical 2's complement behavior.
Since the BCR basically can't "think in negative values", I can't see a way to get rid of the jump.

> 2) User Voice 1: Element 1: Delay Level
> 
> High Value
> 00
> 
> Low Value
> low 7bit -15 to +15 2' comp
> 
> Neither 00 00 - 01 1F nor 00 00 - 01 7F worked on this one.  Knob turns only give me 0 - 15, nothing in the negative part of the range, not even in that "sudden drop" fashion described above.

You don't get any negative responses at the high end of these ranges?
So does this parameter simply not HAVE negative values?
Any luck with "00 00 - 7F 7F"?

> Otherwise, I did break up the definition files by parameter group, so the files for the Channel Setup Parameters, Rhythm Kit Parameters, System Setup Parameters, and Program Change Table Parameters are all ready.  I can't test them completely -- that would take weeks -- but I tested a few at random, and they worked.  Assuming I double-checked all the numbers correctly, they should all be fine.  As soon as the above parameters have been sorted out, I can share the RM50 definitions.

Great work!
I'll think about an extension to the ini file format that will allow hierarchical groups in one file, but that's for the future...

Mark.

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-28 by Mark v.d. Berg

--- In bc2000@yahoogroups.com, "evanlong@..." <evanlong@...> wrote:
> Is it possible to make the BCR's buttons play notes?  Let's say, for example, that I wanted to play a C1 at max volume.  It's for a drum voice that doesn't recognize note-off messages, so I don't care about note duration.  How would I set that up in BC Manager?

There are 2 ways:

1. Via the BCR's "standard" (".easypar") Note message.
The only drawback of this is that you get unnecessary Note Off messages. (In fact, on drum devices that DO react to Note Off, these messages might even be unwanted.)
You can set this up in BC Manager by going to the "Standard output" tab of the button dialog and setting "Type" to "Note"; in your case, you want Mode to be "Toggle Off".

2. Via the BCR's "custom" (".tx") message system.
The advantage of this is that you can avoid sending any Note Off messages. (In fact, in this way you can send any message(s) you like - even SysEx messages, as you're well aware by now...)
In BC Manager: go to the button dialog's "Custom output" tab, click "Insert new line" (the red "+"), then (in the dialog box that says "... Line 1") click "T" and enter e.g. "$90 24 127" (without the quotes).
On the "Custom output" tab, "Mode" should be left at "Down", and Value 1 and Value 2 can be left at 0,

Hope this helps,
Mark.

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-30 by evanlong@ymail.com

> This is more or less typical 2's complement behavior.
> Since the BCR basically can't "think in negative values", I can't see a way to get rid of the jump.

OK, we'll have to live with it.  I'll note it in the comments.

> Any luck with "00 00 - 7F 7F"?

Actually yes.  I had to scroll all the way up to 241 to register a -15, but 241-271 does yield the full -15 to +15 range in numerical order.  (Actually it repeats periodically after that, every few hundred numbers.)  Can we limit the variable values to 241-271?

Otherwise done.

RE: Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-30 by <markwinvdb@...>

--- In bc2000@yahoogroups.com, <evanlong@...> wrote:
> I had to scroll all the way up to 241 to register a -15, but 241-271 does yield the full -15 to +15 range in numerical order. (Actually it repeats periodically after that, every few hundred numbers.) Can we limit the variable values to 241-271?

The manual says "low 7bit -15-+15 2' comp" - but judging from the behavior you're describing, bit 0 of "Value (High)" is also relevant.
So yes, I think 241-271 is best here; there's one slight drawback, though: with the encoder's "Show value" enabled, the user will see these "strange" values in the display.

> OK, we'll have to live with it. I'll note it in the comments.

Just a thought: can't you do something similar to this parameter ("Delay pitch", isn't it?) as to Delay Level?
You described the behavior of Delay Pitch as an upward sawtooth, but how exactly does that work?
The range of -120 - +120 consists of 241 values, but an 8-bit "period" has 256 values, so is there a "dead" area of 15 bytes in each period? If so, it's probably NOT a good idea to "raise" the range for this one.

Mark.

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-31 by evanlong@ymail.com

"The manual says "low 7bit -15-+15 2' comp" - but judging from the behavior you're describing, bit 0 of "Value (High)" is also relevant.
So yes, I think 241-271 is best here; there's one slight drawback, though: with the encoder's "Show value" enabled, the user will see these "strange" values in the display."

No problem.  IMO, strange values that work are better than familiar values that are 90% useless/invalid.  But -- how do I actually set up a 241-271 range in the definition?  I don't know enough about how the HiVal and LoVal bytes interact mathematically to do this myself, and I can't seem to set the Value 1/Value 2 knobs on the Custom Output tab that precisely.


"Just a thought: can't you do something similar to this parameter ("Delay pitch", isn't it?) as to Delay Level?  You described the behavior of Delay Pitch as an upward sawtooth, but how exactly does that work?  The range of -120 - +120 consists of 241 values, but an 8-bit "period" has 256 values, so is there a "dead" area of 15 bytes in each period? If so, it's probably NOT a good idea to "raise" the range for this one."

Delay pitch works OK for practical purposes with a dead zone at 120-136.  Turning the knob quickly, you almost don't notice it's there.

On the "sawtooth" parameters, I extended the range to 00 00 - 7F 7F, and all that happens is that the same, offset, positive/negative pattern just recurs with huge dead zones between them.  I think it's better to leave them as they are, even though they're a bit counter-intuitive, than to set the functioning portions up with 100 dead values in the middle.

Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-31 by evanlong@ymail.com

"The manual says "low 7bit -15-+15 2' comp" - but judging from the behavior you're describing, bit 0 of "Value (High)" is also relevant.
So yes, I think 241-271 is best here; there's one slight drawback, though: with the encoder's "Show value" enabled, the user will see these "strange" values in the display."

No problem.  IMO, strange values that work are better than familiar values that are 90% useless/invalid.  But -- how do I actually set up a 241-271 range in the definition?  I don't know enough about how the HiVal and LoVal bytes interact mathematically to do this myself, and I can't seem to set the Value 1/Value 2 knobs on the Custom Output tab that precisely.


"Just a thought: can't you do something similar to this parameter ("Delay pitch", isn't it?) as to Delay Level?  You described the behavior of Delay Pitch as an upward sawtooth, but how exactly does that work?  The range of -120 - +120 consists of 241 values, but an 8-bit "period" has 256 values, so is there a "dead" area of 15 bytes in each period? If so, it's probably NOT a good idea to "raise" the range for this one."

Delay pitch works OK for practical purposes with a dead zone at 120-136.  Turning the knob quickly, you almost don't notice it's there.

On the "sawtooth" parameters, I extended the range to 00 00 - 7F 7F, and all that happens is that the same, offset, positive/negative pattern just recurs with huge dead zones between them.  I think it's better to leave them as they are, even though they're a bit counter-intuitive, than to set the functioning portions up with 100 dead values in the middle.

RE: Re: SysEx String Programming / Syntax Help for BCR2000

2013-08-31 by <markwinvdb@...>

"how do I actually set up a 241-271 range in the definition?"

01 71 - 02 0F

MinValue = 241
high byte = 01 hex (standing for 128)
low byte = 241-128 = 113 = 71 hex

MaxValue = 271
high byte = 02 hex (standing for 256)
low byte = 271-256 = 15 = 0F hex

"I can't seem to set the Value 1/Value 2 knobs on the Custom Output tab that precisely."

See section 20 of the BC Manager manual.

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.