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

Roland mc-909 SysEx

Roland mc-909 SysEx

2014-04-15 by <sucramgaudio@...>

hi, first message here.

i've tried to do the INC/DEC thing to change some parameters, expecially what i want to do is to increment or decrement PATCHES, as i show in the jpeg attached files.

i've done that (using Royce very useful BCR2000editor)

$button 33
.mode incval 1
.minmax 0 127
.default 0
.tx $F0 $41 $10 $00 $59 $12 $10 $00 $20 $01 $51 $20 $01 val cks-1 6 $F7
.showvalue on

and it doesn't change the Patches. Instead of this, it changes Level...One thing to point is: i midied out sysex from the mc909 to midiox and that was the patch string :

F0 41 10 00 59 12 10 00 20 01 51 20 03 5B F7

while level string was

F0 41 10 00 59 12 10 00 20 04 7E 4E F7

pan string was

F0 41 10 00 59 12 10 00 20 05 3F 0C F7

...so i tried other numbers instead of 01 (the 01 between 20 and 51 on the patch string) and i obtained level, pan,rev,key and out INC/DECchangements...this is weird because the mc909 sysex out to midiox different strings than the ones that worked via brceditor>bcr2000...

...in any case i didn't succeded to inc/dec Patches...

i also tried (sorry the ignorance) to attach 2 strings of 2 different Patches on the BCReditor to see what happened, and the mc909 went rapidly between the 2 Patches, but fixing one in particular...

i also tried on encoder the same processings...no luck...


i also attach the mc909 midi implementation (see , i beleive, page 10 please) and the mc909 manual...


thanks very much (...i have fear that this is only the beginning of headeache... :) )


Attachments

Re: Roland mc-909 SysEx

2014-04-15 by <rpcfender@...>

Hi

" .tx $F0 $41 $10 $00 $59 $12 $10 $00 $20 $01 $51 $20 $01 val cks-1 6 $F7"

I see you are trying to send the Bank message as well as the patch.

.tx $F0 $41 $10 $00 $59 $12 $10 $00 $20 $01 $51 $20 $01 val cks-1 6 $F7
The red part is the correct address to start at the Bank select but you have too many value bytes (the blue ones).

The extra byte means your message is select the Bank then the Patch and use the val as the Part Level.

Bank select only has a MSB and a LSB (2 bytes) then you follow with the patch number.
.tx $F0 $41 $10 $00 $59 $12 $10 $00 $20 $01 $51 $20 val cks-1 6 $F7
This selects the Card Patch (1 to 128)

Hope this helps
Royce

Re: Roland mc-909 SysEx

2014-04-16 by <sucramgaudio@...>

Royce thanks a lot, it works!

if i understand well, the $10 $00 $20 $01 means (in a "primitive" way): number of Bank, number of part (and midi channel too, that is the mc909, every part has its own midi channel), and $51 $20 tells to select Patch...right?

what however surprise me is that when i sent sysex from mc909 to midiox (pushing on INC/DEC), it sent those Bank and Patch strings of that lenght...

Bank

F0 41 10 00 59 12 10 00 20 01 51 00 00 7E F7

Patch

F0 41 10 00 59 12 10 00 20 01 52 00 03 7A F7

so now i cannot say why there is one "XY" number more...

another question is: why the sysex of level,rev,key pan and out sent by the mc909 are different (not in lenght)from the ones sent by the BCR2000...? could the midi implementation manual i attached clarify that and where? i saw on page 8 something that could be concerned to that argument, but i'm a bit confused...and this bring me to the last question: the $10 $00 $20 $01(bank) and $51 $20 (patch)...where to find those on that midi implemantation manual?


thanks again!

Re: Roland mc-909 SysEx

2014-04-16 by <sucramgaudio@...>

...sorry I meant page 10 of the midi implementation manual (it's 3am here :) )

Re: Roland mc-909 SysEx

2014-04-16 by <rpcfender@...>

So for a complete round up of the sysex message...
$F0 $41 $10 $00 $59 $12 $10 $00 $20 $01 $51 $20 PatchNumber Checksum $F7
$F0 $41 $10 $00 $59 $12 this is the header -
$41 is Roland
$10 is the device number (you can change this if you have more than one of these devices chained together)
$00 $59 is the Model Id
$12 is a command byte "Here is a value for you"

$10 $00 $20 $01 this is the START address and must point to the start of a parameter.
It is made up of adding offsets
10 00 00 00 = Part Info
- Midi manual page 7 Start Address: now go to the Part Info box page7
... 00 20 00 = Part Info Part (Part 1) add this offset Go to the Part Info Part box on page 10 bottom 1st column
... .... 00 01= Patch Bank Select MSB (most significant byte of a 14 bit number)

A bank select message needs 2 bytes MSB then LSB.
For Roland gear you can use sysex or normal Midi messages (see below)

If you send, to this address, a value and a checksum the MSB of the bank will be changed but nothing will happen.
If you send a 2 bytes in the value and a checksum the MSB and LSB of the bank will be changed but nothing will happen.
If you send a 3 bytes in the value and a checksum the MSB and LSB of the bank will be changed and the patch number will cause a new patch of the new bank to be loaded.

You could also just send the 2 bytes of the bank in sysex and then a Midi Patch Change message and that would work too.

Roland allows you to send one or a group of parameters in a single sysex message and sometime it is quicker, but not usually.
For instance to change bank at patch without sysex.
B0 00 51 ; Bank MSB 3 bytes
B0 20 20 ; Bank LSB 3 bytes
C0 val ; Patch change 2 bytes
8 bytes verses 15 in the sysex
But if you wanted to change the Volume, Pan, coarse and fine tuning of that Part that is only 4 extra bytes for the sysex but with the 2 NRPN messages for the tuning the difference is getting closer.

You just have to remember that you need to send a complete parameter data.
This is fairly simple as there are only a few cases of parameters that have more than 1 byte of data.

eg address 11 00 00 00 is the Patch in Part 1
add 00 20 00 the first Tone of four
add 00 0A is the Tone Delay time - you can use this to build a patch that does a 4 voice arpeggio or a drum pattern on every pad press.

This parameter needs 2 bytes, so if you sent
$F0 $41 $10 $00 $59 $12 $11 $00 $20 $0A $01 Checksum $F7
The machine would just ignore it . You need two value bytes
$F0 $41 $10 $00 $59 $12 $11 $00 $20 $0A $01 $0A Checksum $F7
Now the parameter is set to $1A - see page 12 up the top

If you wanted to change the parameter before it, Tone Delay Mode, as well
$F0 $41 $10 $00 $59 $12 $11 $00 $20 $09 $00 $01 Checksum $F7
Is short of data. It changes the Tone Delay Mode but not the Delay time. You need
$F0 $41 $10 $00 $59 $12 $11 $00 $20 $09 $00 $01 $0A Checksum $F7

So you can't use an address that is part way through the parameter ($11 $00 $20 $0B is no good) and you have to give enough value bytes to complete the parameter value.

All the best
Royce

Re: Roland mc-909 SysEx

2014-04-16 by <rpcfender@...>

The Bank select MSB and LSB are in the manual on page 1 in the middle of column 1.

Re: Roland mc-909 SysEx

2014-04-16 by <rpcfender@...>

Sorry this is in decimal, so leave out the '$' before the number in your .tx line.

All the best
Royce

Re: Roland mc-909 SysEx

2014-04-17 by <sucramgaudio@...>

Royce thanks again.

i have other questions, maybe noob questions.

"A bank select message needs 2 bytes MSB then LSB...."

the byte question...1 byte=? could explain me that please?


eg address 11 00 00 00 is the Patch in Part 1....in the midi manual part2 is 20 and part 16 is 60...what are the other parts, if ,so it seems, they go by 20 to 20? in any case, shouldn't be also that the address of my first example , i mean that was also part1...? in other words: why there we begun from part info and here from start address>temporary patch (part1)...?


add 00 20 00 the first Tone of four.....why not starting from patch info?


This parameter needs 2 bytes, so if you sent............why 2bytes?
$F0 $41 $10 $00 $59 $12 $11 $00 $20 $0A $01 Checksum $F7
The machine would just ignore it . You need two value bytes
$F0 $41 $10 $00 $59 $12 $11 $00 $20 $0A $01 $0A Checksum $F7
Now the parameter is set to $1A - see page 12 up the top..... why $1A...??


If you wanted to change the parameter before it, Tone Delay Mode, as well
$F0 $41 $10 $00 $59 $12 $11 $00 $20 $09 $00 $01 Checksum $F7
Is short of data. It changes the Tone Delay Mode but not the Delay time. You need
$F0 $41 $10 $00 $59 $12 $11 $00 $20 $09 $00 $01 $0A Checksum $F7....i think i got this...so basicalli in the string $11 $00 $20 $09 $00 $01 Checksum $F7, we change tone delay mode,
in the string
$11 $00 $20 $09 $00 $01 $0A Checksum $F7 we ONLY change tone delay time (or also the tone delay mode?)


other "general" question....

when we see those combination of number and letter near the offset address
❍Patch Tone
+——————————————————————————————————————————————————————————————————————————————+
| Offset | |
| Address | Description |
|—————————————+———————————————————————————————————————————————————————————————— |
| 00 00 | 0aaa aaaa | Tone Level (0 — 127)|
| 00 01 | 0aaa aaaa | Tone Coarse Tune (16 — 112)|
| | | —48 — +48 |
| 00 02 | 0aaa aaaa | Tone Fine Tune (14 — 114)|
| | | —50 — +50 |
| 00 03 | 000a aaaa | Tone Random Pitch Depth (0 — 30)

...those 000a aaaa...what they signify? we have the offset address wich is enough to write a string...or not?


last question: shoundn't i send sysex from mc909 to midiox and start and correct messages (and then resend them to the bcr2000 via your software)? in other words: seen that many times there is no correspondance between what is sent by the mc909 and what the BCR2000 send, should i trust what sysex the mc909 sends?


cheers!

Re: Roland mc-909 SysEx

2014-04-18 by <rpcfender@...>

A byte has 8 bits. A bit is just a switch On or Off - 0 or 1
1111 1111 is the 8 bits grouped as two 4 bit nibbles. A nibble can have a vale of 0 to 15
Hexidecimal (hex) uses 0 1 2 3 4 5 6 7 8 9 A B C D E F to describle these 16 values so our byte can be shown as FF with each nibble = 15
As the BC can use both decimal or hex, it uses $ to mean a hex number.
$FF
$10 = 16

Midi defines two types of bytes, Status byte with the Most Significant bit set and the data byte with it cleared.
Status 1xxx xxxx
Data 0xxx xxxx (x= 0 or 1)

The first Status bytes have the lower nibble for the channel (0 to 15 = channel 1 to 16)
1000 xxxx = $8x NoteOff channel xxxx
1001 xxxx = $9x NoteOn channel xxxx
1010 xxxx = $Ax Polyphonic Key pressure channel xxxx
1011 xxxx = $Bx Continious Controller channel xxxx
etc
the $Fx messages are special and don't have a channel as the second nibble.

The other type of byte is Mid data and can have a value of 0 to 127.
So for example, after a sysex message start $F0 you can't have a byte with bit7 set (bit0 is the least significant bit) until the End of Sysex $F7

To get get bigger numbers than 127 you need to combine two (or more) 7 bit numbers and in Midi it is generallt 2 bytes and you think of this as a single 14 bit wide number xx11 1111 1111 1111 but really it is x111 1111 x111 1111
This means you can count from 0 to $3FFF or 16383 in decimal.
If this is a bit confusing grab my converted on my web site
http://www.bwalk.com.au/Convert/Convert.html

So the byte on the left is the Most Significant byte (MSB) and yes you guessed it, the one on the right is the Least Significant byte (LSB)

"....in the midi manual part2 is 20 and part 16 is 60...what are the other parts"
You might like to grab the MC909 editor. All of the Roland editors I have have the out going Midi message displayed (in hex) in the top to the right.
The patch parameter addressing is a bit confusing. It is a two byte number
11 00 tt pp is the Patch on Part 1 and tt is the tone (20, 22, 24, 26) and pp is the parameter
11 20 tt pp Part 2
11 40 tt pp Part 3
11 60 tt pp Part 4
12 00 tt pp Part 5
12 20 tt pp Part 6
12 40 tt pp Part 7
12 60 tt pp Part 8
13 00 tt pp Part 9
13 20 tt pp Part 10
13 40 tt pp Part 11
13 60 tt pp Part 12
13 00 tt pp Part 13
13 20 tt pp Part 14
13 40 tt pp Part 15
13 60 tt pp Part 16
"add 00 20 00 the first Tone of four.....why not starting from patch info?"
This is the way Roland gives the address of the parameters. The gaps in the address are often used in later devices so there is backward compatibility to earlier gear. Very smart of Roland.

Take the start of the Part and add the Tone Offset to get to the start of that tone in that Part.
Add the offset to get the parameter of that tone in that part.
"This parameter needs 2 bytes, so if you sent............why 2bytes?"
Check page 12 of the Midi spec Roland

The value is divided into two data bytes (0000 aaaa is the MSB and 0000 bbbb is the LSB) because the range is 0 to 127 plus more to use 1/4, 1/8 etc notes of the current tempo..

"$F0 $41 $10 $00 $59 $12 $11 $00 $20 $0A $01 $0A Checksum $F7
Now the parameter is set to $1A - see page 12 up the top..... why $1A...??"
As above 1 = MSB and A= LSB.
The lower nibble of the MSB becomes the upper nibble of the value and the lower nibble of the LSB is the lower nibble of the value.

"| 00 03 | 000a aaaa | Tone Random Pitch Depth (0 — 30)

...those 000a aaaa...what they signify? we have the offset address wich is enough to write a string...or not?"

000a aaaa just shows which bits could be set in byte 'a' of the value. t has nothing to do with the address.
So the max number for this parameter is $1F or 31 decimal.
So the max value possible in a byte looks like 0aaa aaaa or 0 to 127

In the tone delay you had 0000 aaaa (MSB) and 0000 bbbb (LSB) so the max number of either byte is $0F or 15 so $00 to $FF but you can't have $FF for a data byte as bit7 is set for numbers greater than $7F.
So you break it into 2 nibbles and place it into 2 bytes hence the aaaa and bbbb.

"last question: shoundn't i send sysex from mc909 to midiox and start and correct messages (and then resend them to the bcr2000 via your software)? in other words: seen that many times there is no correspondance between what is sent by the mc909 and what the BCR2000 send, should i trust what sysex the mc909 sends?"

I'm a little confused here. Why are you sending Sysex from the MC909?
You are not using LEARN on the BC here. You are programming it directly.
At any rate check out the MC909 editor and look at the displayed output sysex strings.
The editor is really a graphic version of what you want the BC to do.

All the best
Royce

Re: Roland mc-909 SysEx

2014-04-18 by <sucramgaudio@...>

Thanks for your dedication to answer, this is very useful.

Now i have to study all this to answer well, if necessary.

By the way, i would like to try to answer to the last part of your post.

when you say:

"I'm a little confused here. Why are you sending Sysex from the MC909?
You are not using LEARN on the BC here. You are programming it directly.
At any rate check out the MC909 editor and look at the displayed output sysex strings.
The editor is really a graphic version of what you want the BC to do."...

well, i still didn't pointed that my very first approach to the BCR2000 with the mc909 was to use the LEARN function; so i trasmitted sysex to the BCR pushing the INC/DEC buttons or the Value knob...the result was that on BCR buttons the BCR message was "GOOD", on knobs was "BAD"...plus: when i pushed BCR buttons (where mc909 sysex supposed to be trasmitted) they just went to one 909 patch,they didn't scroll (they didn't "inc/dec")...so i verified the 909 sysex sending them to Midiox to see what they was, and then i used BCFReditor to send them back to the BCR2000 but i discover that with this program i couldn't edit those sysex...then i discovered BCRmanager and your BCReditor...i used your because i foud it less complicated and more intuitive...with this soft, i was able to send back 909 sysex also to BCR2000 knobs ...then i posted those sysex here...


many thanks again

ps

it makes a big difference to send sysex from mc909 while on system>type CC or type quick?...anyway i put that command on type quick...

'

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.