Roland XV-5080 definition file

16 posts / 0 new
Last post
tomatoKetchup's picture
Roland XV-5080 definition file

Hello all,

I'm new here, joined in as I just acquired a BCR2000 that I primarily wanted to use to control a Roland XV-5080 and make sound design a bit more fluid. So I'm getting into the nitty gritty of writting the definition file for it. My knowledge of sysex etc. is quite basic so I'm hoping you guys will help me along.

So Anyway, here's what I came up with so far (with the help of the XV-5080 manual, p.290).

ProgramName=BC Manager

; Patch tone
1F 00 00 00 | 00 - 49 | val ;TVF Cutoff Freq
1F 00 00 00 | 00 - 4D | val ;TVF Resonance


First of all, I wasn't sure how to figure out ChecksumMethod and ChecksumStart values, but I'm making a guess they relate to Roland's proprietary checksum method so I picked the values from the JV-1010 definition file that was already there when I installed BCmanager. Is that correct?

Secondly, out of interest, what does DevicePosition relate to?

Finally, can you tell me if the 1st two sysex lines that I entered here are correct (again if I read the manual properly)?

I got the address from "3.Parameter Address map" p.290 of the manual (I specifically want the ability to edit the temporary patch) then Cutoff and Resonance where taken from the bottom left of p.297. Are these lines written correctly? Is that all I have to do then, list all the parameters I want here?

Thanks you for reading.

Mark van den Berg
Mark van den Berg's picture

Page 290 of the XV-5080 manual lists the device's ModelID as "00 10", so you should change your ModelID and ChecksumStart lines:

ModelID=00 10


Apart from this, I think your header is correct.

Just a minor point:
The same page in the XV-5080 manual states that the Device ID range is 00-1F.
So my advice would be to modify the device parameters in your header accordingly:
This wider range doesn't make working with these parameters in BC Manager any more difficult: the user will get DefaultDevice as the default anyway. And if you are going to publish your definition file (which of course you are smiley), it's nice to offer the full range.

How the DevicePosition parameter works is explained in section 19 of the BC Manager Manual, under "SyxEx model definition file format". Also see the "Roland/BOSS" subsection.

Your parameter definitions are wrong: each parameter definition line must specify the address (which on the XV-5080 consists of four bytes) and the value range.
Sticking with your example:
According to the manual (p. 290), the "Temporary Patch/Rhythm (Patch Mode)" section starts at 1F 00 00 00.
Within "1-3 Temporary Patch/Rhythm" (pp. 290-1), "Temporary Patch" starts at 00 00 00, which in this case of course still amounts to 1F 00 00 00 (1F 00 00 00 + 00 00 00).
Within "1-3-1 Patch" (p. 291), "Patch Tone (Tone 1)" starts at 00 20 00. So in this case it starts at 1F 00 00 00 + 00 20 00 = 1F 00 20 00.
Finally, within "1-3-1-6 Patch Tone" (pp. 296-7), "TVF Cutoff Frequency" is at 00 49, which in this case amounts to 1F 00 20 00 + 00 49 = 1F 00 20 49.
The same table specifies the range of TVF Cutoff Frequency as 0-127, which is 00-7F in hexadecimal notation.
So you'll need:
1F 00 20 49 | 00 - 7F | val ;TVF Cutoff Freq
1F 00 20 4D | 00 - 7F | val ;TVF Resonance
(At least if my reading of the manual is correct. These hierarchical Roland System Exclusive tables aren't easy to understand...)
To convert the less common value ranges of some of the parameters, you may need a decimal-hexadecimal converter. For instance TVF Cutoff Keyfollow's specified range of 44-84 (decimal) amounts to 2C - 54 hexadecimal.

Hope this helps,

tomatoKetchup's picture

Hi Mark, and thanks for the quick reply and putting this all up too. I'm glad I get the oporutunity to say that I truly appreciate people like you who go into such time and effort to run projects of this scale and keep improving them years after years. I'll be going through the donate case for sure once I get all this Definition file set up correctly (which I was of course planning to upload here if I get it right).

This turns out to be more complicated than I hoped, but I'll get working on it. Thanks for all the comments and tips. And of course, before I asked and made those mistakes I should have gone a bit more in depth through the BCmanager manual.... RTFM!

I'll probably be back here with more questions soon.

All the best.

tomatoKetchup's picture

Also is this the way it should be mapped instead on the definition file?

1F 00 20 0A | 00 - 7F | val ;Tone Delay (1)
1F 00 20 0B | 00 - 22 | val ;Tone Delay (2)

tomatoKetchup's picture

So, this is working pretty good so far.

In Roland's manual p.297, top left, the "Tone Delay Time" parameter seems to stretch across 2 offset addresses (00 0A and 00 0B), which I understand to be because it's value range goes beyond 127(dec). On my definition file, when typing the range, 00 - 95 (hex) (converted from the given decimal range 0 - 149), I get an error message in BCManager saying the value is out of range.

Does that mean that this parameter can't be set on only one knob on the BCR and that I will have to map it across 2, or is there a work around in the sysex string to allow for this?

Mark van den Berg
Mark van den Berg's picture

By definition any MIDI data byte must be in the 00 - 7F (hex) range: the most significant bit ("bit 7") cannot be used because it must be 0. (MIDI status bytes have "1" in "bit 7".)
This means that any value larger than 7F hex must be sent as a sequence of two (or more) MIDI data bytes.
How this is exactly done, depends on the MIDI device.

The XV-5080 manual on p. 290 explains how this must be done for the XV-5080:

Transmission of "#" marked address is devided [sic] to some packets. For example, ABH in hexadecimal notation will be devided [sic] to 0AH and 0BH, and is sent/recieved [sic] in this order.

So Tone Delay Time's actual value (in the range 0-149) must be sent to an XV-5080 as two MIDI data bytes, each containing four bits of the actual eight-bit value.
The first MIDI data byte must contain the four most-significant bits (bits 4-7) of the actual value. (Note that these bits 4-7 must get "shifted": in the MIDI data byte they must have moved to bits 0-3.)
The second MIDI data byte must contain the four least-significant bits (bits 0-3) of the actual value.

So to make the BCR output the actual value of an encoder in Tone Delay Time's format, you can't use "val" or the equivalent "val0.6": either would make the BCR output bits 0-6 of the actual encoder value as a single byte, which is wrong in this case.
Instead, you must use "val4.7 val0.3": this makes the BCR first output a byte containing bits 4-7 of the actual value of the encoder, then a byte containing bits 0-3 of the actual value of the encoder. This is exactly what the XV-5080 requires.
(For further explanation of the BCR's data specifiers, see BC MIDI Implementation.pdf, section 14.6.1.)

Furthermore, you should realize that BC Manager's parameter range definitions also expect sequences of MIDI data bytes (in hex format).
So that's why BC Manager rejects 95 (hex) as being out of range here.
To determine the MIDI data byte sequence describing a parameter boundary, you can use the "MIDI data calculator" in BC Manager or MIDI Tools:
Enter the decimal value (in this case "149") in the "Decimal"/"Total" field in the "Normal bytes" group, then look at the last two "Hexadecimal" fields in the "MIDI data bytes" group; in this case these will be "01" and "15".
So this is what you must use as the upper bound of the parameter range: "01 15".

So taking all this into account I think the parameter definition should be:
1F 00 20 0A | 00 00 - 01 15 | val4.7 val0.3 ;Tone Delay Time

tomatoKetchup's picture

Cool, I get it! Thanks again. ;)

tomatoKetchup's picture

I'm deducting that the Wave Group Id p.297, comprising 4 Hex numbers and a value range of 0-16384 will be written:

1F 00 20 28 | 00 00 00 00 - 00 01 00 00 | val6.7 val4.5 val2.3 val0.1 ;Wave Group Type

Mark van den Berg
Mark van den Berg's picture

The minimum value of a BCR2000 encoder is 0, the maximum 16383.
Correspondingly, a parameter boundary in a BC Manager ini file has a maximum of two MIDI data bytes. This is exactly enough, because 16383 amounts to "7F 7F" in MIDI data byte format.

So there is no way to assign the whole 0 - 16384 range of Wave Group ID to a BCR encoder.
If you can live without having access to ID 16384, you can simply use:
1F 00 20 28 | 00 00 - 7F 7F | val12.13 val8.11 val4.7 val0.3 ;Wave Group ID
(Side-note: val6.7, val4.5 and val2.3, which you suggested, don't exist. See BC MIDI Implementation.pdf, section 14.6.1.)

If you do need the missing ID 16384, you could assign the above definition to a push encoder (i.e. one in the top row), and hard-code 16384 under the push "button" of the same encoder via the following parameter definition:
1F 00 20 28 | 00 - 00 | 04 00 00 00 ;Wave Group ID 16384
So this doesn't use any "val", hence the parameter range is irrelevant: whenever the user pushes the encoder, the BCR simply outputs the fixed sequence "04 00 00 00", which the XV-5080 interprets as 16384.

Hope this helps,

tomatoKetchup's picture

Ok, I think I (and hopeful anyone else using this definition file) can live without the last value. :)

tomatoKetchup's picture

If the max value the BCR2000 can send is 16383, does that mean that the MFX Parameters p.295 of the manual, whose value range is 12768-52768(dec) cannot be accessed with the BCR?

Mark van den Berg
Mark van den Berg's picture

If the max value the BCR2000 can send is 16383,

Let's be precise here:
In my previous post I wrote

The minimum value of a BCR2000 encoder is 0, the maximum 16383.

But this merely states the range of the internal value of a BCR2000 encoder.
It doesn't say anything (or at least not everything) about what the BCR can send.
That's because what a BCR sends must comply with the format expected by the receiving device; so in this sense "the max value the BCR2000 can send" is undefined: we must always take the demands of the receiving device into account.
Yes, the BCR can only send a value based on the internal encoder value, which lies in the 0-16383 range.
However, a custom output (".tx") definition can include various portions of an encoder value ("val...") and also hard-coded MIDI data bytes, so a receiving device can be "fooled": the MIDI data bytes being sent can be in a format that the receiving device interprets as something else than the internal encoder value. All we have to do is make sure the device receives a sequence of MIDI data bytes that it interprets in the desired way.

The XV-5080 expects to receive an MFX parameter as a sequence of four bytes, each containing four bits:
0000 aaaa
0000 bbbb
0000 cccc
0000 dddd
The XV then converts this to a 16-bit value: aaaabbbbccccdddd. So aaaa are the most significant bits (12-15) of the 16-bit value, dddd the least significant (0-3).
This 16-bit value must be in the decimal range of 12768-52768, with 12768 corresponding with the conceptual (and displayed?) value of -20000, and 52768 with +20000.
Note that this means that you can never have a BCR encoder produce all the values of an MFX parameter: an MFX parameter's full range includes 40001 values, which is more than the 16384 values a BCR encoder is capable of.
There are various ways of working around this. Which method is best, depends on what a specific MFX parameter represents and therefore which values you want to be able to send to the XV.

If you want an encoder to span an MFX parameter's full range but don't need its full resolution, you can make the encoder represent 16 times the MFX parameter's value, as follows:

12768/16 =  798
52768/16 = 3298
So the internal range of the encoder should be 798 - 3298.
This means that the BC Manager parameter definition line should specify a range of 06 1E - 19 62.

Since the XV expects to be sent an MFX parameter as a sequence of four bytes containing four bits each, you can send three bytes containing bits 8-11, 4-7 and 0-3 of the encoder value followed by a byte that is always zero:
val8.11 val4.7 val0.3 00
So basically you "cheat" the XV-5080 by multiplying the encoder value by 16:
Bits 8-11 of the encoder value end up in the SysEx message as bits 12-15 ("aaaa"), bits 4-7 as bits 8-11 ("bbbb"), bits 0-3 as bits 4-7 ("cccc") and 0000 as bits 0-3 ("dddd").
(Side-note: bits 12 and 13 of the encoder value cannot be sent in this situation. But since 3298 (decimal) is the encoder's maximum, bits 12 and 13 are always 0, so don't need to be sent.)

So for instance the definition for MFX Parameter 1 would look something like this:
?? ?? ?? 11 | 06 1E - 19 62 | val8.11 val4.7 val0.3 00 ;??? MFX Parameter 1
Of course you'll have to replace the question marks with the appropropriate area bytes and specification.

Hope this helps,

PatMaximum's picture

I have a Roland XV-2020 and ran into a total basket case wrt MFX parameters, and the same deal applies to JV-1080 and JV-2080. I've not yet met an XV-5080

If you check out the XV-2020 manual you will see a strong "family resemblance" with the XV-5080.

Using the editor, I explored XV-2020 MFX and vame up with:

Selected FX type 09 Compressor and set Output Level to Zero and got:

FO 41 10 00 10 12 1F 00 02 29 08 00 00 00 2E F7. Then Output Level to Max and got:

FO 41 10 00 10 12 1F 00 02 29 08 00 07 0F 18 F7. Then Selected FX Type 23 FBK PITCH SHIFTER, set EQ Gain LOW to Min and got:-

FO 41 10 00 10 12 1F 00 02 29 08 00 00 00 2E F7. Then set EQ Gain LOW to Max and got:-

FO 41 10 00 10 12 1F 00 02 29 08 00 01 0E 1F F7.

First up, the 16-bit value starts with the "08".  

Wrt FX Type 09 Output Level, we see a rangeof 0 - 7F, so in effect we are only sending a 7-bit value. And..

Wrt FX Type 23 EQ Gain LOW, we see a range 0 - 1E..

So, Effect Parameter numbers  and their respective Min-Max values are specific to individual FX Types.

Now let's suppose that you have constructed a BCR preset ( with snapshot enabled) and we call it FX. In that preset we have encoder elements set for all respective FX functions and have FX Type 09 selected and working and Output Level is set to halfway. Here's where the fun starts..

Dial your FX type encoder to FX Type 23, select a different (empty) BCR preset, then re-select your BCR FX preset and you get a data error...

The best way to check how any synth behaves is hook it up to an editor and monitor the traffic, even if you have to resurrect an old PC or whatever is well worth the effort.

Meanwhile, I suggest you don't bother with mapping the BCR to do the FX parameters themselves and resign yourself to using the synth panel, otherwise go for it and enjoy. I'm keen to hear of how it behaves..

tomatoKetchup's picture

Hum, I had indeed guessed that since every MFX/Chorus/Reverb type has it's own specific set of params with different value ranges, it would be impossible to create a generic mapping template for these, so I skipped them.

Anyway, just finished v1.0.0 of the definition file that gives access to all params of the currently selected (temporary) patch. I need to do some testing to make sure everything works fine, then I'll upload it to the database

Royce's picture

Just a comment about the Wave number.

The max internal wave number I could find was a bit over 1000. None of the SRX cards has even 1000 waves.
The XV5080 has 1083 waves. The next synth with a different wave set to the XV was the Fantom S with 1228.
When Roland created the next synth in this type, the Fantom X, they increased the number of waves, but did so by creating
a new group (bank).
The Roland FanX editor only has a range of 1228 waves in Internal and SRX groups with only 2000 samples and 128 Multisamples
The SonicCell returned to the single internal group format and has 1401 waves

I didn't check the Fantom G, but its structure different to the XV, Fan (really an XV), FanS and FanX families.

Roland often keeps the space in their sysex definitions, marked "", and you will find this "reserved" parameter
number used in a different synth, but not applied in this synth. So you can see that they often leave large amounts of
space that is never used.

It is true that you could theoretically create a lot of small samples in any of these machines, but who is going to want
more than a 1000 samples to search through let alone than 16384. I'm sure you would break them up and have meaningful filenames.

So you have 4 possible wave groups (internal, SRX, Sample and multisample).
In each of those there are slots for 16384 Wave Groups.
Each Group can contain 16384 waves.

So far the max groups I found is only 2 for the internal and SRX groups. In those groups you never get close to 2000 waves.

When making these BCR parameter maps and even programming the BCR you need to be aware of the execution of the hardware
not just its sysex definition.

All the best

tomatoKetchup's picture

Thanks Royce for the extra info. I left it as is for simplicity's sake.

I've tested pretty much all parameters and everything seems to be working, so I uploaded the file onto the database here:

Owners of XV-5080 feel free do more testing and/or expand the definition file. I'm not going to do more personnaly, it's quite time consuming and I don't have the time. Multimode and Rhythm params are missing notably.