V-Synth XT programming

13 posts / 0 new
Last post
TheMIDIManiac
TheMIDIManiac's picture
V-Synth XT programming

Hello!

I'm breaking my head on the following issue. It was already touched/mentioned in another post of the Roland XV-5080 but I'm not getting the results.

I have a Roland V-Synth XT and I want to control it with my BCR.
The learn-function with the encoders gives a BAD message so I used the Learn function for a button.
The received sysex command for controlling Patch COSM parameter 12 is as follows:
$F0 $41 $10 $00 $53  $12 $10 $00 $50 $12 $08 $00 $04 $05 $7D $F7
This gives a steady result of COSM 1 Cut Off Freq. 69  (because it was the press of a button)
Now I want to use an encoder.
So, according to the MIDI implementation this parameters needs a value between -20000 and +20000 (12768 - 52768)
For the XV-5080 it was explained to divide this amount by 16 to get 798 - 3298.
Then the XV (like the XT) would expect to receive 4 bytes all consisting of 4 bits. (aaaabbbbccccdddd)
The proposed command was ?? ?? ?? 11 | 06 1E - 19 62 | val8.11 val4.7 val0.3 00 ;???
So I tried to create that as a sysex command but it doesn't work.
My XT skips from 00 to 127 several times when I turn an encoder.
The string is like this:
$F0 $41 $10 $00 $53  $12 $10 $00 $50 $12 val val8.11 val 4.7 val0.3 00 cks-1 0 $F7
Value 1 = 798 and Value 2 = 3298.
The resolution of the encoder is set to 798 (because I assume it needs to be set on this value)

What am I doing wrong? What do I miss/don't understand.

Thanks for your help!

best regards,
Roger

Mark van den Berg
Mark van den Berg's picture

The string is like this:
$F0 $41 $10 $00 $53  $12 $10 $00 $50 $12 val val8.11 val 4.7 val0.3 00 cks-1 0 $F7

The parameter section "val val8.11 val 4.7 val0.3 00" is wrong: the first "val" should be removed and there should be no space between the second "val" and "4.7".
So it should be something like "val8.11 val 4.7 val0.3 $00".
(The format of the final "$00" doesn't matter: "$0" works too, and so does your "00", or even "0". However, for consistency with the other bytes in hexadecimal notation I recommend "$00".)

The checksum section "cks-1 0" is also wrong.
For Roland/BOSS DT1 SysEx messages, the number after "cks-1" must indicate the number of bytes before the first address byte in the SysEx message.
In the case of the Synth XT there are 6 bytes before the first address byte: $F0 $41 $10 $00 $53 $12.
So the checksum section must be "cks-1 6".

Thus, the full string must be something like:
$F0 $41 $10 $00 $53 $12 $10 $00 $50 $12 val8.11 val4.7 val0.3 $00 cks-1 6 $F7

The resolution of the encoder is set to 798 (because I assume it needs to be set on this value)

The resolution of an encoder has nothing to do with its range or its default value; the resolution merely indicates how many values constitute a full rotation; so basically it can be set to anything.
Since Value 1 = 798 and Value 2 = 3298, the range consists of 2501 values.
So with a resolution of 798, moving from the minimum value of 798 to the maximum value of 3298 takes more than 3 full rotations (3x798=2394); I doubt you want that - you probably want a higher resolution (although what's best of course depends on the nature of the actual parameter). For instance, with a resolution of 2500 you can get from 798 to 3298 in exactly one full rotation; that might be more convenient.

And (again depending on the nature of the actual parameter) you probably want to set the encoder's Default parameter to the "correct" initial value in the range of 798 - 3298.

Hope this helps,
   Mark.

TheMIDIManiac
TheMIDIManiac's picture

Thanks a lot for your answer. 
Now it makes sense to me. 
I will do the programming tomorrow. 
 

Stay safe and healthy. 
best regards,

Roger

TheMIDIManiac
TheMIDIManiac's picture

Hi Mark,

It didn't work.
I'm getting only 127 as result with the string. It jumps immediately to 127 when I turn the encoder and stays on it.
The string is as follows: $F0 $41 $10 $53 $12 $10 $00 $50 $12 val8.11 val4.7 val0.3 $00 cks-1 6 $F7
Value 1= 798 and Value 2= 32989
General value of encoder = 798 with 2500 values per rotation.

I tried several options but there's no way to make the encoder work with different values.

What do you suggest?

Thanks and take care.
 

Mark van den Berg
Mark van den Berg's picture

I'm getting only 127 as result with the string. It jumps immediately to 127 when I turn the encoder and stays on it.
The string is as follows: $F0 $41 $10 $53 $12 $10 $00 $50 $12 val8.11 val4.7 val0.3 $00 cks-1 6 $F7

The string I suggested in my previous post was:
$F0 $41 $10 $00 $53 $12 $10 $00 $50 $12 val8.11 val4.7 val0.3 $00 cks-1 6 $F7
So you've left out the fourth byte, $00.

Value 1= 798 and Value 2= 32989

Value 2 should be 3298, not 32989.

Hope this helps,
   Mark.

TheMIDIManiac
TheMIDIManiac's picture

I was sloppy in retyping. Still no luck. 
I will search for the midi implementation for version 2.0. Perhaps something has changed. 
thanks anyway. I will keep on trying. 
best regards and stay safe. 

BillB
BillB's picture

Hi MIDIManiac, I hope you will forgive me saying, but you should never be retyping anything, from forum to editor or editor to forum. Always copy and paste, especially where character-critical code is concerned and you are being given very specific code from an expert like Mark.  It might be worth revisiting what you have typed....

TheMIDIManiac
TheMIDIManiac's picture

It's okay to mention this. Perhaps you can explain me how to copy the complete string when in BC. 
I tried Command + C, Ctrrl + C, Copy from BC-manager, Cut from BC-manager but the result was all the time when pasting (Command + V, Ctrl+V) my last copied content from other programs. 
For me it would be also more easy to use a copy function instead of retyping strings. 
What am I doing wrong?

I assume that you think that I mistyped Mark's string, which I didn't. I checked it multiple times to make sure it would work. 
In fact, I didn't understand why it didn't work after Mark's advice, just because I also know he's an expert. 
I felt dump posting this question because all other functions are working after programming. 
I read the XV-5080 post, I've checked the .ini file, but no -20000 +20000 commands are programmed. 
so, my answer about being sloppy, was that I mistyped the string in BC into my previous message

Perhaps you have a solution or at least a tip for copying strings. 
thanks!

Mark van den Berg
Mark van den Berg's picture

BC Manager does allow you to copy/paste these "custom output" strings from/to preset/button/encoder/fader definitions.
For instance, to move a "custom output" string from a forum topic to an encoder, do as follows:

  1. In your browser, copy the string from the forum topic to the operating system's clipboard, e.g. via Ctrl+C.
  2. In BC Manager, open the Encoder dialog box of the encoder of your choice, and select the "Custom output" tab.
  3. Press the "+" button. This opens a dialog box titled e.g. "B-Control 1 (BCR2000): Preset 1: Encoder 1: Line 1".
  4. Press the "T" button (that's the seventh button from the left). This opens a dialog box titled "Output statement".
  5. Paste the string from the operating system's clipboard into the "Output items" field via Ctrl+V. (The "Paste bare hex sequence" button is not what you want in this case: it prefixes a "$" to any "word" in the string currently on the clipboard.)
  6. Press OK to close the "Output statement" dialog box. If all is well, all individual elements of the string now appear as separate items in the "Output items" list in the "...: Line 1" dialog box.
  7. Press OK to close the "...: Line 1" dialog box. The full string should now appear as Line 1 under "Output" on the "Custom output" tab.

I readily admit that all these nested dialog boxes aren't simple to use.
I should probably try to simplify things, but I have so many other things to do...

Note: the Cut, Copy and Paste buttons (leftmost on the toolbar) on the "Custom output" tab and in the "Line" dialog box concern BC Manager-internal clipboards that allow you to move "custom output" lines and items around in BC Manager, but don't interact with the operating system's clipboard.

Hope this helps,
  Mark.

TheMIDIManiac
TheMIDIManiac's picture

Thanks for your explanation regarding copy/paste. It works perfect!
Now I still have to figure out how to create the correct string to make the encoder work.
I can imagine that you're a busy man. Thanks for taking time to help me/us.

TheMIDIManiac
TheMIDIManiac's picture

Sorry to bother again, Mark.
I've managed to get it working for 93%.
The created string is as follows: 
$F0 $41 $10 $00 $53 $12 $10 $00 $50 $12 $08 $00 val4.7 val8.11 cks-1 6 $F7   (copied like you've mentioned before ;-)
Value1 = 0 and Value2 = 128
Encoder general = 128
Up to value 90 the movement is gradual. From 90 to 128 is divided in 3 steps.
I would like to have it perfect. Can you give me something what I'm missing in my string?

Thanks for your help!

Best regards,
Roger

 

Mark van den Berg
Mark van den Berg's picture

The created string is as follows: 
$F0 $41 $10 $00 $53 $12 $10 $00 $50 $12 $08 $00 val4.7 val8.11 cks-1 6 $F7   (copied like you've mentioned before ;-)
Value1 = 0 and Value2 = 128

There are two problems with the definition of the four value bytes ("$08 $00 val4.7 val8.11") here:

1. The COSM parameters on the V-Synth XT require a "big-endian" approach during transmission, meaning that the four bytes (or rather, the four 4-bit "nibbles") must be ordered from most-significant ("highest") to least-significant ("lowest"). Therefore the "val..." nibbles in the BCR definition should also go from most-significant to least-significant. So your "... val4.7 val8.11" can never be correct. You're getting away with it here because with Value1=0 and Value2=128, val8.11 (consisting of bits 8 to 11 of the encoder's value) is always zero.

2. There is no "val0.3" in your definition, so you're not using bits 0 to 3 of the value of the BCR encoder. Consequently encoder values 0 to 15 all output the same byte sequence, namely "$08 $00 $00 $00", and so on:
0-15: $08 $00 $00 $00
16-31: $08 $00 $01 $00
32-47: $08 $00 $02 $00
48-63: $08 $00 $03 $00
64-79: $08 $00 $04 $00
80-95: $08 $00 $05 $00
96-111: $08 $00 $06 $00
112-127: $08 $00 $07 $00
128: $08 $00 $08 $00
I doubt this is what you want.
You probably want to include val0.3, as follows:
$08 $00 val4.7 val0.3
So the total string then becomes:
$F0 $41 $10 $00 $53 $12 $10 $00 $50 $12 $08 $00 val4.7 val0.3 cks-1 6 $F7

Encoder general = 128
Up to value 90 the movement is gradual. From 90 to 128 is divided in 3 steps.

I don't understand this behavior. Are you still dealing with the Cutoff Frequency parameter you mentioned in your original post? If so, what is its maximum value? The fact that you're using 128 here suggests it is 128, but is that correct?
In any case, since "$08 $00 val4.7 val0.3" fully supports any BCR encoder value from 0 to 255, you should be able to simply define Value2 as the maximum value of the actual parameter on the V-Synth.
You can set Default to any value in the Value1-Value2 range.
For Resolution, try the standard 96 for a start.

Hope this helps,
   Mark.

TheMIDIManiac
TheMIDIManiac's picture

Mark! Thanks! It works better than ever before.
Now figuring your why it gives some glitches during movements.
But already so happy with this.

Regarding the Cutoff Frequency: yes, I'm still with this parameter and according to the manual I need to use -20000 +20000.
I will try again your proposal regarding 798-3298.

Thanks a lot and stay safe.

Roger