help with Roland Juno 106/MKS7 Sysex strings please

2 posts / 0 new
Last post
JK808
JK808's picture
help with Roland Juno 106/MKS7 Sysex strings please

Hi guys! anybody familiar with sending sysex to the synths? how to send only one specific button command to the synth an not the whole buffer including switches like transposition, waveform, chorus etc. at the same time...potis work perfect...

thats an example string i want to change the waveform etc. seperately:

Line 1 (button on): ifp $F0 $41 $32 $00 $10 $08 $F7

Line 2 (button off): ifn $F0 $41 $32 $00 $10 $00 $F7

more info about the implementation...see switches 1 and 2:

thx in advance!!! jacob

##### SysEx: Control Change #####

Example:

F0 41 32 00 01 40 F7

240 65 50 0 1 32 247

 

F0(240)    Begin SysEx     

41(65)    Manufaturer ID    41 = Roland

32(50)    Message Type    32 = Control change

00(0)    channel    n = Midi channel (0-F)

01(1)    Control    number of control

40(32)    Value for control

F7(247)    End of SysEx

 

Where "cc" can be:

00 = LFO rate

01 = LFO delay time

02 = DCO LFO

03 = DCO PWM

04 = DCO Noise

05 = VCF Freq

06 = VCF Res

07 = VCF Env

08 = VCF LFO

09 = VCF Kybd

0A = VCA Level

0B = ENV A

0C = ENV D

0D = ENV S

0E = ENV R

0F = DCO SUB

10 = Switches 1 

        bit 0: 16' on/off

        bit 1: 8' on/off

        bit 2: 4' on/off

        bit 3: Pulse on/off (1=on)

        bit 4: Tri on/off (1=on)

        bit 5: 0 => Chorus on

        bit 6: 0 => Chorus level 2 (if on), 1=> level 1

11 = Switches 2 

        bit 0: 0=>DCO PWM=LFO, otherwise =MAN

        bit 1: 0=>VCA ENV, otherwise GATE

        bit 2: 0=>VCF Polarity +, otherwise -

        bit 3+4: 00 => HPF=3, 01 => HPF=2, 10 => HPF=1, 11 => HPF=0

Mark van den Berg
Mark van den Berg's picture

Hi Jacob,

The BCF2000 and BCR2000 don't provide a consistent way to change individual bits, so it's difficult to define a set-up where individual bits are controlled by individual buttons. All I can think of is the following clumsy way:

First of all, you need to link the buttons involved. That is: when the user presses one of the buttons, the others need to update to the new value too. For this, in addition to the custom output definitions (for the SysEx message), the buttons need to have standard output definitions, using one arbitrary MIDI channel and one arbitrary CC/NRPN/AT number: any channel and CC/NRPN/AT will do, as long as the receiving device ignores the resulting messages. So typically you will choose an unused MIDI channel and an obscure CC/AT number. NRPN is not recommended, since it sends more data than CC or AT. In the example below I use AT for note number 0.

Secondly, you have to set all Mode parameters to Increment, and assign the desired values to Increment. In fact, you need two buttons for every data bit: one to set the bit to 1, one to set it back to 0. So for instance the "Bit 2 ON" button adds 4 to the total value, and the "Bit 2 OFF" button subtracts 4.

So for instance:

$rev R1 ;this is for a BCR2000; for a BCF2000, use "F1"
$preset
  .name 'Bit Test                '
  .snapshot off
  .request off
  .egroups 4
  .fkeys on
  .lock off
  .init
$button 34 ;Bit 6 ON
  .easypar AT 16 0 127 0 increment 64
  .showvalue on
  .default 0
  .tx $F0 $41 $32 $00 $10 val $F7
$button 35 ;Bit 5 ON
  .easypar AT 16 0 127 0 increment 32
  .showvalue on
  .default 0
  .tx $F0 $41 $32 $00 $10 val $F7
$button 36 ;Bit 4 ON
  .easypar AT 16 0 127 0 increment 16
  .showvalue on
  .default 0
  .tx $F0 $41 $32 $00 $10 val $F7
$button 37 ;Bit 3 ON
  .easypar AT 16 0 127 0 increment 8
  .showvalue on
  .default 0
  .tx $F0 $41 $32 $00 $10 val $F7
$button 38 ;Bit 2 ON
  .easypar AT 16 0 127 0 increment 4
  .showvalue on
  .default 0
  .tx $F0 $41 $32 $00 $10 val $F7
$button 39 ;Bit 1 ON
  .easypar AT 16 0 127 0 increment 2
  .showvalue on
  .default 0
  .tx $F0 $41 $32 $00 $10 val $F7
$button 40 ;Bit 0 ON
  .easypar AT 16 0 127 0 increment 1
  .showvalue on
  .default 0
  .tx $F0 $41 $32 $00 $10 val $F7
$button 42 ;Bit 6 OFF
  .easypar AT 16 0 127 0 increment -64
  .showvalue on
  .default 0
  .tx $F0 $41 $32 $00 $10 val $F7
$button 43 ;Bit 5 OFF
  .easypar AT 16 0 127 0 increment -32
  .showvalue on
  .default 0
  .tx $F0 $41 $32 $00 $10 val $F7
$button 44 ;Bit 4 OFF
  .easypar AT 16 0 127 0 increment -16
  .showvalue on
  .default 0
  .tx $F0 $41 $32 $00 $10 val $F7
$button 45 ; Bit 3 OFF
  .easypar AT 16 0 127 0 increment -8
  .showvalue on
  .default 0
  .tx $F0 $41 $32 $00 $10 val $F7
$button 46 ;Bit 2 OFF
  .easypar AT 16 0 127 0 increment -4
  .showvalue on
  .default 0
  .tx $F0 $41 $32 $00 $10 val $F7
$button 47 ;Bit 1 OFF
  .easypar AT 16 0 127 0 increment -2
  .showvalue on
  .default 0
  .tx $F0 $41 $32 $00 $10 val $F7
$button 48 ;Bit 0 OFF
  .easypar AT 16 0 127 0 increment -1
  .showvalue on
  .default 0
  .tx $F0 $41 $32 $00 $10 val $F7
$end

The biggest problem with this setup is that the user will have to remember whether the value of a particular bit is 0 or 1: each button doesn't actually toggle a particular bit, but increases or decreases the whole value by a particular amount, which will change other bits as well when the same button is pressed twice. For instance, pressing "Bit 0 ON" (+1) twice amounts to +2, so erroneously bit 1 becomes 1. So after pressing "Bit 0 ON", you should press "Bit 0 OFF" before pressing "Bit 0 ON" again, etc.

Another problem is of course that this setup takes two buttons per bit.

So alternatively you could "simply" use a single encoder, although then you probably need a value table lying next to you... And I'm not sure whether the receiving synth likes being fed all the unavoidable intermediate values when you (for instance) go from 0 to 64...

A totally different approach is to associate each bit with a separate CC and use an intermediate computer program to collate these into the single SysEx value required by the synth.

Hope this helps,
Mark.