I was in need of a sequencer controller for my Roland SonicCell
The latest version of the software responds to Midi Machine Control - the control I need are ...
$FA = Start (at the beginning)
$FB = Continue
$FC = Stop
This code works...
$button 50 ;Continue FB
.showvalue on
.tx $FB
$button 51 ;Start FA
.showvalue on
.tx $FA
$button 52 ;Stop FC
.showvalue on
.tx $FC
But I want to combine the STOP and CONTINUE and use just 2 buttons - START and STOP / CONTINUE
It is easy enough to toggle between between two numbers BUT they have to be less than $80 which $FC and $FB are not.
So you can use "if positive change of value" 'ifp' and "if negative change" 'ifn'
0 going to 1 is a positive change and 1 looping back to 0 is a negative change of value.
$button 51 ;Stop - Cycle between FC then FB
.showvalue on
.mode toggle
.minmax 0 1
.default 0
.tx ifp $FC ;in this case it is when the value changes from 0 to 1
.tx ifn $FB ; and this is for 1 back to 0
STOP, CONTINUE, STOP, CONTINUE etc
In fact you can use this ifn ifp technique to toggle two very different sysex messages or even two series of midi messages.
But I also need to handle the situation where the STOP/CONTINUE button press sequence is ...
START, STOP, START, STOP etc
In other words the START /CONTINUE button needs to reset to output a STOP message if the START is pressed.
To do this you need to add the 'feedback' that easypar enables.
easypar is used to keep the BCR's controls in sync with a DAW, but has the side effect of keeping controls locked together.
Here I use CC100 on channel 16 as I am not using this CC on the SonicCell
easypar also takes care of the other parameters like minmax etc
$button 51 ;Start FA
.easypar CC 16 100 1 1 toggleon
.tx $FA
$button 52 ;Stop FC / Continue FB
.easypar CC 16 100 0 1 toggleon
.tx ifp $FB
.tx ifn $FC
It does have the down side of outputting an extra Midi message, but in this case it is unimportant.
Of course I had to add a Tempo control. Here is the whole Preset
$rev R1
$preset ; SC Transport / Tempo
.name 'SoncCell Play Ctrl'
.snapshot off
.request off
.egroups 4
.fkeys on
.lock off
.init
$button 51 ;Start FA
.easypar CC 16 100 1 1 toggleon
.tx $FA
$button 52 ;Stop FC / Continue FB
.easypar CC 16 100 0 1 toggleon
.tx ifp $FB
.tx ifn $FC
$encoder 49 ; Tempo
.showvalue on
.mode 1dot
.resolution 96 96 96 96
.default 20
.minmax 20 250
.tx $F0 $41 $10 $00 $00 $25 $12 $10 $00 $60 $54 val4.7 val0.3 cks-1 7 $F7
$end
Hope this is useful.
Royce
Hi Royce, thank you for sharing this. I’m not sure I followed all of it, especially easypar. But it is always good to see what an expert can do with the BCR. At the very least it gives an idea of the range of possible applications, and approaches to programming the BCR.
Thanks again - keep them coming as and when the inspiration strikes!
regards
Bill
Thanks Bill
When you edit the BCR from the unit itself (EDIT and press or twist a control) "easypar" is the
BCL (Behringer Control Language) that is written to the patch.
"easypar" makes it very easy to handle Midi feedback from Live or your DAW, but you have sysex messages.
You can LEARN sysex and then the "tx" form is used not "easypar", but there is no feedback for "tx" style of BCL.
Strangely the designer Thomas Zint allows you to use both this which really increases the BCR's usefulness.
Mark makes it very easy to program the BC with his graphic editor, but the BCL is not too hard to understand and
it is what I prefer to use.
You can use his editor to write the BCL and have a look at his excellent and complete language manual to see how it is done.
Question for Mark. Is the mixed easypar and tx possible to generate just using the graphic part of the editor?
All the best
Royce
Yes, it's possible. Quoting from the BC Manager manual, section17 under "4. Custom output":
To test the program's robustness, I copypasted the BCL code for the whole preset from your original post into a BCL editor window, performed Execute, then exported the preset to a bcr (i.e. text) file.
It seems that in all relevant aspects the output file contained the same code.
Rather hilariously, the only thing that had disappeared was your " ; SC Transport / Tempo" comment after "$preset". (That's because my program happens to ignore comments after "$preset". My program's preset "Info" field gets stored as multiple bare ";..." lines after the ".name" line.)
Secondly, the output file introduced two "peripheral" setup lines for each of your two button definitions: ".showvalue off" and ".default 1".
And trivially, the output file used a different button/encoder order than the original code...
Not bad, all in all!
Mark.
Very interesting info. I've personally in my almost twenty years now of having owned bcr's never used the midi learn via the unit itself...
One reason is that I prefer having the four bcr menu&learn buttons assignable to CCs to have some extra buttons per preset. But it's all personal preference, at the end of the day... I'm a more visual person than mathmatical, so the BC Manager and vst hosts such as audiomulch or plogue bidule are more my thing than programming in numbers and text. :)
To anyone wanting to experiment with combining ".easypar" and ".tx"/".minmax" (either via manual BCL code or via the "Standard output" and "Custom output" tabs of the element dialog boxes in BC Manager):
For some general discussion of these combinations (such as the required order of the BCL statements), you might want to take a look at section 14.8 ("Standard vs. custom MIDI output") in BC MIDI Implementation.pdf.
One notable thing also discussed in this section concerns a bug in the preset dumps created by the BCF/BCR (e.g. when you press EDIT + "PRESET >"):
Although you can send an element (button/encoder/fader) definition with both ".easypar" and ".tx"/".minmax" statements to the BCF/R, and the BCF/R's element will behave accordingly, a corresponding preset dump back from the BCF/R doesn't contain the ".tx" or ".minmax" statements: these are wrongly suppressed by the presence of ".easypar".
There are several other reasons to avoid sending preset dumps from the BCF/BCR back to the computer, but this is one of the nastiest ones.
Mark.