BCR's display / Knob controling other knob / .ini files

27 posts / 0 new
Last post
ThoDX7
ThoDX7's picture
BCR's display / Knob controling other knob / .ini files

Hi everybody!

Hard times for humanity, good times for synth programming!

I'm working on BCR presets to program the fabulous DX7. I also did some for the D10. In order to do this I've been doing the complete SysEx mapping for both of them, in .ini files that can be used in BC manager. Need a few more time to clean them and I'll send it to Mountain Utilities for further implementation!

Now, doing this huge task, 3 questions came to my mind :

- Can I modifiy the 4 digit display of the BCR in order to display the name of the preset (for example OP 1, or even a bigger scrolling text)? I've already read the posts about that subject and understood that it would implicate to modify BCR's firmware. How can I do this? Is that 'affordable'?

- For some complex SysEx editing, it would be interesting if one of the BCR's knobs was able to modify some others knobs message... From inside the BCR. To be more accurate, I was thinking of making a 'mobile phone like keyboard', which would be one of the solutions to enter a patch's name more easily... But each caracter of DX7 patch's name has a specific SysEx adress (F0 43 10 01 11 val F7 to F0 43 10 01 1A val F7), which means I would have to program 1 keyboard per caracter... So my question is can I use one knob to modify the adress sent by another knob or button? If we use my example, it means that my knob would modify the bold hexadecimal number between 11 and 1A, so that the other knob would be able to modify caracter 1 to caracter 10 on the specified range of ASCII code.

- Last question : is there any way that .ini files could contain more data, to automaticaly set knobs parameters like values/default value/resolution/led type...?

 

Thanks for that great freeware!

Mark van den Berg
Mark van den Berg's picture

Can I modifiy the 4 digit display of the BCR in order to display the name of the preset (for example OP 1, or even a bigger scrolling text)? I've already read the posts about that subject and understood that it would implicate to modify BCR's firmware. How can I do this? Is that 'affordable'?

Modifying the BCR's firmware would be a hell of a job.
First of all, it's heavily encrypted, so you first have to decrypt it.
After decryption the firmware is about 64 KiB of ARMv7 machine code, mostly 16-bit "Thumb" code.
You then have to disassemble the machine code to generate the source code.
Then you can apply your changes to the source code and compile ("re-assemble") the source code. In itself, this is already difficult: you have to know exactly what you're doing, how the BCR's data structures work, how to control its hardware etc. But probably the most tricky part of this is that for a successful compilation you must make the source code distinguish between constants and addresses: e.g. if you insert a section of code somewhere, all references (anywhere in the firmware!) to addresses beyond that point must be updated accordingly; so basically you must designate all values in the whole firmware as either a constant or an address, which is a huge task.
Finally, you must of course re-encrypt the re-assembled code.
Have I already said that it would be a hell of a job...?

A totally different point: I'm not sure how useful it would be to show the name of the preset on the BCR's display, because it would interfere with what the BCR normally shows, which could in fact be confusing to the user rather than helpful.
I'm talking from experience here: the Roland D-5 synthesizer has a display of two lines of 16 characters. These characters can be simply changed via MIDI SysEx, so my D-5 editor puts certain messages on this display, e.g. after uploading a preset. However, despite my initial excitement over my ability to send messages to the D-5's display, I soon discovered that these messages are somehow unsettling to the user: as an end user I always want to get rid of these messages as soon as possible to return the D-5 to "normal operation".
And of course the BCR's display only has 4 characters, so I suspect that whatever you put there isn't going to be "life-changing" to the end user.

can I use one knob to modify the adress sent by another knob or button? If we use my example, it means that my knob would modify the bold hexadecimal number between 11 and 1A, so that the other knob would be able to modify caracter 1 to caracter 10 on the specified range of ASCII code.

If I understand your intention correctly, I think this is far beyond the capabilities of the BCR (but I'm not claiming this is the final word on this).
In general, lots of people have asked whether it's possible to have one button/encoder influencing another. See for instance this topic: https://mountainutilities.eu/forums/query-value-encoder

is there any way that .ini files could contain more data, to automaticaly set knobs parameters like values/default value/resolution/led type...?

To quote from the BC Manager manual (section 19):

the person writing the SysEx model definition file only has to provide a list of parameter addresses, ranges and names, and end users can simply assign these parameters to their B-Control elements by name, having to know no technical details.

So the idea has always been that the ini files only provide the input to the "preprocessor" of the "Insert SysEx parameter" dialog box. Thus, there is a rather strict, hopefully clear and convenient separation between what the ini files offer, and what the end user has to do via the "Insert SysEx parameter" dialog box.
BC Manager offers extensive tools for manipulating individual parameters of buttons, encoders and faders. For instance, the end user can edit multiple parameters simultaneously via the "Parameters" pull-down menus of the preset/button/encoder/fader list windows.
So I've always thought that it would not be necessary/opportune to define all these parameters in the ini files. If the ini files could do that, they would be getting close to actual BCF/BCR preset definitions, which would beg the question: why not distribute actual presets rather than ini files? After all, it's very simple in BC Manager to move button/encoder/fader definitions around, via mouse-dragging in the layout windows, or cut/copy/paste via the keyboard.
So I feel that expanding the ini file format to include other parameter definitions would be like reinventing the wheel.
The ini file format is pretty complicated as it is: over the years I've had to guide many people on how to create these files. So I wouldn't particularly relish expanding the ini format, both for the work involved in designing and implementing the expansions, and the extra support I might have to provide for aspiring ini file writers...

Mark.

ThoDX7
ThoDX7's picture
ThoDX7
ThoDX7's picture

Thanks for your response.

1. You're right about BCR's LCD Dispaly. I don't think it's worth going to such a process for such a little difference! But it would have been interesting to be albe to name the preset, for example : OP 1 to OP 6 instead of P-01 to P-06...

I'm realy interested about how you did change what your D5 displays. When I change parameters on the D10 i have this remaining problem which is that d10 display doesn't show the being edited parameter... At the end BCR doesn't really help me to visualize in a better way what i'm doing, which was the idea of doing a set of presets. Have you been able to call by any way the corresponding screen of the being edited parameter? It seems to me that you used an other technique...

2. I'm going to take a look on this...

3. I totally understand your position about changing the definition of .ini files... I just can't imagine how much time you spent on BC manager's developpement and support!

4. An other question came to my mind, as I actually tested my DX7 preset... and got so disappointed : DX7 is so slow and is overwhelmed by the amount of SysEx messages generated by rotating a simple 100 values knob!!! No way you can edit it in real time this way! So is there a way to skip part of the values according to the rotating speed of the knob? e.g. slowest rotation > sends all values ; slow rotation > sends 1 SysEx command out of 2 ; fast rotation > sends 1 out of 4 ; fastest rotation sends 1 out of 10... Does'nt seem possible at first look, but maybe someone had a brilliant idea about that!

In the same way can a button send 4 values specified by me, e.g. 0-25-50-99 instead of 0-3?

 

I'm sorry to bother you with my endless questions... But I spent so much time on understanding my old synth, undertanding MIDI, understanding BCR, understanding BC manager... That I'm frustrated not to be able to overcome those obstacles.

 

Thank you/

Mark van den Berg
Mark van den Berg's picture

I'm realy interested about how you did change what your D5 displays. When I change parameters on the D10 i have this remaining problem which is that d10 display doesn't show the being edited parameter... At the end BCR doesn't really help me to visualize in a better way what i'm doing, which was the idea of doing a set of presets. Have you been able to call by any way the corresponding screen of the being edited parameter? It seems to me that you used an other technique...

I've taken a look at the source code for D-5 Manager:

What it does to the display of the D-5 is not very spectacular:
Whenever D-5 Manager has uploaded a complete timbre or patch from the computer to the D-5, D-5 Manager sends a single SysEx message to the D-5, changing all 32 characters of its display simultaneously, for instance to ''PC timbre part 3" (line 1) plus "AcouPiano1 CH  3" (line 2).
However, D-5 Manager does not change the display of the D-5 when a single parameter is being edited.

Apparently it is possible in principle to change the 32 display characters individually, but in practice it's probably impossible, considering the following remark I made in the source code for D-5 Manager (about 28 years ago!):

when sending display characters to the D-5, it is possible to choose any starting point, but I think (I haven't FULLY investigated this) that the D-5 clears all display positions BEFORE that point (i.e. they become blank)

I'm too lazy to retrieve my D-5 from storage to check whether the D-5 indeed behaves like this.
But anyway it seems impossible to control the display of a D-5 or D-10 conveniently from a BCR2000.
So if you want to visualize what you're doing to your D-10, particularly when designing sounds, it's probably better to use an editor (like D-5 Manager) running on a computer, so that you can see all the timbre/tone parameters on the computer screen.
Using a BCR2000 to control a D-5 or D-10 is more something one would do in a live situation, to control a limited set of "performance" parameters (for instance cutoff frequencies) of existing sounds.

Mark.

ThoDX7
ThoDX7's picture

I've been looking at my .ini file for D10 and I found those SysEx display parameters. I now remeber I had seen it already : you can send a simple advertising message to the screen but there's no way you can pilot the usual edit display this way... However I found a little 'reset display' command which I did'nt pay attention at the time. I'll try it to see what it provides...

Thanks.

ThoDX7
ThoDX7's picture

when sending display characters to the D-5, it is possible to choose any starting point, but I think (I haven't FULLY investigated this) that the D-5 clears all display positions BEFORE that point (i.e. they become blank)

Well, well, well... I have it!

This SysEx message will display "PLEASE WAIT" on the bottom-right of the screen :

$F0 $41 $10 $16 $12 $20 $00 $21 $50 $4c $45 $41 $53 $45 $20 $57 $41 $49 $54 cks-1 5 $F7

After the usual beginning of a Roland Sysex, comes 'Displayed letter 21' adress $20 $00 $21 (I choose to begin here to set the position of the message on bottom-right).

Then you have to enter the complete string of ASCII characters (1 byte per character).

You end with the usual cheksum method and close SysEx message... That's all.

I didn't succeed yet with the 'Reset Display' message. I don't know if it needs a value after adress. And as I'm not sure it's implemented on D10...

Have fun.

ThoDX7
ThoDX7's picture

I found the response for the second part of my last question, about sending specified values with a button...

> BC MIDI Implementation, chapter 15.10 Increment mode...

Not exactly what I meant to do, but could be enough.

Knobs don't have that option?

Royce
Royce's picture

Hi

in response to part 4 and the filling of the DX7 buffer, there are two things you can do.

Firstly the encoders have a resolution of 96 per rotation. That is you can get all the value from 0 to 95 in a single rotation. This is the standard value and is the fastest change without missing a value in the output.

The BC's encoders can have 4 different resolutions based on speed ...

.resolution 96 96 96 96 ; all rotation speeds are 96.

When the values are the same this can be abbreviated to..

.resolution 96

Another example....

.resolution 24 48 96 192

At a slow rotation speed, 24 means you have to rotate it four times the distance to change a value. Easy to hit the correct number. 48 at the next fastest speed it is half as sensitive as 96 which is quicker but the change is more sensitive.

So the first three resolutions put out all the values in the range (no values missing). To get a resolution of 192 (96 x 2) half of the values have to be skipped, so you get less data in the buffer, but it is harder to hit the exact value you want.

The resolution values can be the min and max of the BC and don't have to be factors of 96 so try ...

.encoder 24 48 192 384

Spinning the encoder should get you close to the start or end of the range with few values in the buffer. Turning very slowly is how you get the value you need. It's all a compromise. Just play with different values to get the 'feel' you want.

 

The second way is using a Global setting, but that means it effects all the present, not just the DX7 editor. It is called txinterval (see section 12.6)

Basically the control's timer is set when a control is changed and it's value is sent. Further changes in that control will be ignored until the timer is back to 0.

The settings are 2, 5, 10, 20, 50 or 100 and are in milliseconds I believe.

Hope that helps

Royce

 

 

ThoDX7
ThoDX7's picture

Hope that helps

Yes, I knew how to set various resolutions, but I didn't know that thing about standard resolution and skinpping resolutions. I'll try to set my resolutions differently. Quite interesting!

I didn't know more about txinterval, which could be a great solution in my specific case.

I'll test these ideas and tell you about the results I can get.

Thanks!

fabi
fabi's picture

I'd be delighted if it ever became possible to use one of my spare bcr as a dx7 editor if it turned out to be compatible with my Korg Volca fm running unofficial firmware 1.09 with its new dx7 compatible mode. 

I've got two bcr running the custom zaquencer firmware and two spare regular bcr2000. 

Keeping an eye on this. :-)

ThoDX7
ThoDX7's picture

Hmm... I'm not sure it's possible. Volca FM's abilities to communicate with SysEx are limited to bulk data, which means dumping sounds in/out of the memory.

I dont' understand why they didn't make it CC programmable. Seems to be a DX7 SysEx banks 'player'!

fabi
fabi's picture

That is why I mentioned unofficial firmware update 1.09 for the fm. Among other things it makes the fm programmable via sysex live, for example via the dexed vst gui 

Google ranzee unofficial fm firmware mirror 

fabi
fabi's picture

Sorry, it's sort of hidden. 

https://ranzee.com/volca-fm-firmware-1-09-unofficial/

1.08 unofficial was already great with new CCs and program change message support , but almost live sysex (changes don't update currently playing notes because of undesirable sound glitches, but all new notes play the updated sound) with 1.09 unofficial is huge! 

By the way, I think that there used to be a bcr sdk for developing own firmware floating around. That's how the zaquencers came into existence. Maybe contact zaqaudio.com if you think Christian's know how might be of use. He wrote an entire midi  sequencer firmware for the bcr. And my zaquencers are so much more powerful than any beatstep, pro or not. They're no pyramid, though. ;-)

Rangr
Rangr's picture

From the reddit page for the new unofficial 1.09 volca FM firmware:

"Also, I put the SYSEX Parameter Change commands as NRPN number 0-155 if you e.g. happen to have a MIDI controller with NRPN support"

So it looks like using the BCR to edit parameters live would be straightforward.  Didn't know about this update and will try this ASAP! This was probably the biggest limitation of the Volca FM

 

fabi
fabi's picture

I've never used the bcr2000 with nrpn. 

Have you tried it out yet? Would be awesome to be able to program the Volca fm via bcr...

Rangr
Rangr's picture

Yes, it works and is a lot of fun! The NRPN numbers match the parameter numbers in the sysex documentation for dexed:

https://github.com/asb2m10/dexed/blob/master/Documentation/sysex-format.txt

I use one preset per operator but with the push-encoders always controlling the same global parameters.  The only thing I haven't figured out is how to properly send the operator on/off message.  I have a Deluge sampler/sequencer and I can even automate the parameters from there (although changes only take effect on the following note)

fabi
fabi's picture

Sounds great. I'll have a look at that documentation. Would you mind sharing your bcr presets, though? It'd probably be quicker to load those and adjust channel e.g. in BC Manager starting from your presets... Your layout sound logical.

Only hardware sequencers I have are the two zaqs. Well, you could count the Keystep, but I haven't actually used its sequencer, yet, only the arp. :-D

fabi
fabi's picture

Just headed over to the documentation and while installing the new firmware on the Volca fm was okay, worked just like on the old monotribe, this documentation goes way over my head. Don't really know the first thing about sysex.... 

Rangr
Rangr's picture

Sure, where can I upload them?

You don't actually need to know much about sysex, just select NRPN for the knobs on the BCR and match the parameter number and the min/max values to the ones listed in the sysex documentation.

 

fabi
fabi's picture

Hm, I thought there was an upload area for presets on here, but either I am mistaken or I simply can't find it anymore. And apparently there is no private messaging system in place on this forum, either. 

And I don't really want to share my email address publicly...

I'll try to think of something. :-D

fabi
fabi's picture

Maybe wikisend.com is an option? The bcr files are pretty small, they allow 100mb per file. Not sure if they'd need to be zipped or rared/certain file type. 

It's free and apparently ad-free...

I had a look at the dx7 documentation and just got very confused...

BillB
BillB's picture

Is this what you are looking for?

https://mountainutilities.eu/userfiles/b-control

 

fabi
fabi's picture

Oh, yes, precisely what I meant. 

Got two spare bcr, so I could edit two operators at once. 

Really looking forward to the files. :-)

fabi
fabi's picture

Having looked at the documentation again, it all seems much clearer now. 

However, I still have a few questions. For one, which are the global parameters you have put on every preset? Did you stay simply with the order controllers on the BCR, is it sensible to put 0-1 value parameters on buttons on the BCR?

Hope someone can shed some light on this. 

Too bad the envelope parameters don't have helpful names. Might have to look at the dexed GUI for when I want to put a labeled overlay on my BCR...

Rangr
Rangr's picture

Here's a link to the six BCR presets, one for each operator. 

https://we.tl/t-ihzz1IZyoo

If you view the first preset in the BCR manager you'll see the names of the parameters corresponding to each encoder & button (I'm too lazy to name all in all six presets - it's the exact same parameters). The global parameters are controlled by push encoder groups 1-2 and button rows 1 & 2 (although many buttons don't do anything). Control of chorus and most things having to do with global LFO parameters are in encoder row 1.  So these encoders/buttons control the same global parameters on presets 1 through 6.  The most important parameters for each individual operator are controlled by encoder rows 2 & 3 and the buttons to the right of these.  But I also hid away some remaining operator parameters that are rarely used (at least by me), but I wanted to keep in anyway, in push encoder group 3.  Hope this makes sense. 

About the buttons - in most cases the buttons are used to toggle on/off and are sending 1/0, but I've made use of some of them to scroll through presets, transpose an octave up/down and semitone up/down.  

fabi
fabi's picture

Just downloaded the file. thank you so much, will try it out as soon as possible. :-)