HD Midi
- KVRAF
- 12352 posts since 7 May, 2006 from Southern California
I may have spoken too soon... Diva may be ignoring data sent on CC38 when configured to Continuous14bit. I'll have to investigate more when I have a chance.
- KVRAF
- 12352 posts since 7 May, 2006 from Southern California
It depends.AdmiralQuality wrote:Well, also, what does inc/dec mean with 32 bit floating point resolution? How much is an increment?justin3am wrote:For anyone who is interested, it appears that Ableton Live and U-he's Diva will respond correctly to 14bit absolute values. Diva also responds to inc/dec messages... one of the few instruments I know of that will, outside of Reaktor and such. Most DAWS will respond to inc/dec messages but it's unusual for an instrument to do that (probably because most plug-ins can't send parameter feedback directly to a controller via MIDI).
Ultimately the software receiving the message will have to decide what value to increment by. The controller has no idea what is happening on the receiving end, unless you can transmit parameter feedback.
Most controllers that transmit inc/dec messages use acceleration curves, so if you turn an encoder clockwise at a slow rate, it will send out a value of 1 (this doesn't necessarily mean that the software on the receiving end should increment by 1) for each step/increment, turn the encoder counter-clockwise at a slow rate it will transmit a value of 127 for each step/decrement. If you turn the encoder clockwise but slightly faster it will transmit a value of 2 for each step (telling the software to increment by a coarser value) and if you turn the encoder ccw but slightly faster it will transmit a value of 126 for each step (telling the software to decrement by a coarser value). Does that make sense?
In Diva, you have a few options for how coarse/fine you want parameters to increment each time it receives a new message via a given CC.
-
- Banned
- 1374 posts since 5 May, 2007 from Finland
Don't be silly. Just load up Cubase and enjoy the direct control of vst parameters, with any controller, even the 7bit ones. Even better if you have an inc/dec capable controller.AdmiralQuality wrote: Unfortunately there's no mechanism for VST automation (the correct name for the communication standard you're referencing) to be communicated from any device, to your computer, and on to your host. (There are various "control surface" interfaces but they're all completely proprietary, with no common standard.) You can't even typically send automation events from one plug-in to another. (Some hosts may let you copy automation envelopes, after the fact, from one instrument or effect's track to another, but again this is a far cry from what MIDI offers us).
So sorry, but VST automation is not a substitute for MIDI. I can't buy a keyboard that sends VST automation. And in VST 3.x land, I can't buy a keyboard that sends "Note Events", even though it is Yamaha/Steinberg who are forcing that nonsense on us! (Sorry, a particularly large pet peeve.)
Btw. Why do you need to send automation between plugins?
Proprietary control surface standard:
http://home.comcast.net/~robbowers11/MCMap.htm
- KVRian
- Topic Starter
- 1253 posts since 31 Dec, 2008
The last I've known about it is it's still not implemented http://www.kvraudio.com/forum/viewtopic.php?p=4764068justin3am wrote:I may have spoken too soon... Diva may be ignoring data sent on CC38 when configured to Continuous14bit. I'll have to investigate more when I have a chance.
But thats one year ago, Things might have changed but I can't find any thing about it.
- KVRian
- Topic Starter
- 1253 posts since 31 Dec, 2008
I would love to know how is this done, I don't use cubase, but I have the lite version. I just fired it and midi learned a knob on Sylenth1, same old levels (stepping). I assume your doing some thing else?mkdr wrote:Don't be silly. Just load up Cubase and enjoy the direct control of vst parameters, with any controller, even the 7bit ones. Even better if you have an inc/dec capable controller.AdmiralQuality wrote: Unfortunately there's no mechanism for VST automation (the correct name for the communication standard you're referencing) to be communicated from any device, to your computer, and on to your host. (There are various "control surface" interfaces but they're all completely proprietary, with no common standard.) You can't even typically send automation events from one plug-in to another. (Some hosts may let you copy automation envelopes, after the fact, from one instrument or effect's track to another, but again this is a far cry from what MIDI offers us).
So sorry, but VST automation is not a substitute for MIDI. I can't buy a keyboard that sends VST automation. And in VST 3.x land, I can't buy a keyboard that sends "Note Events", even though it is Yamaha/Steinberg who are forcing that nonsense on us! (Sorry, a particularly large pet peeve.)
- Beware the Quoth
- 33159 posts since 4 Sep, 2001 from R'lyeh Oceanic Amusement Park and Funfair
same reason as to send CVs between parts of a modular synth.mkdr wrote:Btw. Why do you need to send automation between plugins?
if plugins could generate automation data that could be routed to other plugins, all sorts of things would become possible, from sidechaining to LFOs to sequencers etc etc.
my other modular synth is a bugbrand
- KVRAF
- 12352 posts since 7 May, 2006 from Southern California
It is implemented now. I think it was added before v1.1. Right-click on the display at the top of the GUI and select 'MIDI Controllers'. There you can select between Continuous7bit, Continuous14bit and Encoder (inc/dec) message types.S0lo wrote:The last I've known about it is it's still not implemented http://www.kvraudio.com/forum/viewtopic.php?p=4764068justin3am wrote:I may have spoken too soon... Diva may be ignoring data sent on CC38 when configured to Continuous14bit. I'll have to investigate more when I have a chance.
But thats one year ago, Things might have changed but I can't find any thing about it.
- KVRian
- Topic Starter
- 1253 posts since 31 Dec, 2008
Ok, I finally found the way to setup my slimphatty to send 14bit MIDI. Just tried it on Diva with that Continuous14bit setting. Unfortunately no use!!. The knob in diva simply wiggles very slightly when I move the knob in slimphatty.justin3am wrote:It is implemented now. I think it was added before v1.1. Right-click on the display at the top of the GUI and select 'MIDI Controllers'. There you can select between Continuous7bit, Continuous14bit and Encoder (inc/dec) message types.S0lo wrote:The last I've known about it is it's still not implemented http://www.kvraudio.com/forum/viewtopic.php?p=4764068justin3am wrote:I may have spoken too soon... Diva may be ignoring data sent on CC38 when configured to Continuous14bit. I'll have to investigate more when I have a chance.
But thats one year ago, Things might have changed but I can't find any thing about it.
I'm positive I can see 14bit data coming from Slimphatty, two CC controller numbers get sent when I move one knob.
- KVRian
- Topic Starter
- 1253 posts since 31 Dec, 2008
Ok, Just sent you my 14bit MIDI test on SlimPhatty done in ReaperAdmiralQuality wrote:A few other requests to anybody who'd like to send me some 14-bit MIDI controller recorded in .mid files.
- Let me know what controller hardware it is.
- Let me know what host you recorded it in.
- And please do complete knob movement, from 0% to 100% and back, several times. Both fast and slow. The number of knobs you do doesn't matter much, but mixing up a few different ones and particularly moving two at a time would be very helpful.
Thanks! Email to aq AT admiralquality.com
-
- Banned
- 1374 posts since 5 May, 2007 from Finland
If you can record the data to an automation lane, you are done. Now you have 32bit data that gets fed to the synth. Your sequencer draws 32bit fades between the "levels" you just recorded with your 7bit controller. EnjoyS0lo wrote: I would love to know how is this done, I don't use cubase, but I have the lite version. I just fired it and midi learned a knob on Sylenth1, same old levels (stepping). I assume your doing some thing else?
If you need even more control, there's Automap. Go google and watch youtube videos etc.
- KVRian
- Topic Starter
- 1253 posts since 31 Dec, 2008
Thanks, but Won't work, Thats almost exactly like the lag/delay. It can't stop in the middle of two values, unless you MANUALLY edit the recorded and faded data, which is obviously not for a live performance.mkdr wrote:If you can record the data to an automation lane, you are done. Now you have 32bit data that gets fed to the synth. Your sequencer draws 32bit fades between the "levels" you just recorded with your 7bit controller. EnjoyS0lo wrote: I would love to know how is this done, I don't use cubase, but I have the lite version. I just fired it and midi learned a knob on Sylenth1, same old levels (stepping). I assume your doing some thing else?
- KVRAF
- 12352 posts since 7 May, 2006 from Southern California
As far as I know four CC messages should be transmitted when sending 14bit messages.S0lo wrote:I'm positive I can see 14bit data coming from Slimphatty, two CC controller numbers get sent when I move one knob.
NRPN LSB = CC98
NRPN MSB = CC99
NRPN Data Entry LSB = CC38
NRPN Data Entry MSB = CC6
RPN LSB = CC100
RPN MSB = CC101
RPN Data Entry LSB = CC38
RPN Data Entry MSB = CC6
It's possible that Moog are using a non-standard format but they would still need 3 CCs for a 14bit value (one for the control address and two for the value).
- KVRian
- Topic Starter
- 1253 posts since 31 Dec, 2008
This could be my stupidity, But I meant that I'm seeing two controller numbers (19 and 51) NOT two CC messages. I don't know how many messages are sent. Here is what I'm seeing when I do a small tweak on a knob:justin3am wrote:4 CC messages should be transmitted when sending 14bit messages.S0lo wrote:I'm positive I can see 14bit data coming from Slimphatty, two CC controller numbers get sent when I move one knob.
NRPN LSB = CC98
NRPN MSB = CC99
NRPN Data Entry LSB = CC38
NRPN Data Entry MSB = CC6
RPN LSB = CC100
RPN MSB = CC101
RPN Data Entry LSB = CC38
RPN Data Entry MSB = CC6
It's possible that Moog are using a non-standard format but they would still need 3 CCs for a 14bit value (one for the control address and two for the value).
Controller, Channel: 1, Number: 51 (), Value: 45
Controller, Channel: 1, Number: 51 (), Value: 70
Controller, Channel: 1, Number: 51 (), Value: 97
Controller, Channel: 1, Number: 51 (), Value: 124
Controller, Channel: 1, Number: 19 (General Purpose Slider 4), Value: 39
Controller, Channel: 1, Number: 51 (), Value: 23
Controller, Channel: 1, Number: 51 (), Value: 50
Controller, Channel: 1, Number: 51 (), Value: 77
Controller, Channel: 1, Number: 51 (), Value: 104
Controller, Channel: 1, Number: 19 (General Purpose Slider 4), Value: 40
Controller, Channel: 1, Number: 51 (), Value: 3
Controller, Channel: 1, Number: 51 (), Value: 30
Controller, Channel: 1, Number: 51 (), Value: 60
Controller, Channel: 1, Number: 51 (), Value: 87
Controller, Channel: 1, Number: 51 (), Value: 117
Controller, Channel: 1, Number: 19 (General Purpose Slider 4), Value: 41
Controller, Channel: 1, Number: 51 (), Value: 16
Controller, Channel: 1, Number: 51 (), Value: 46
Controller, Channel: 1, Number: 51 (), Value: 76
Controller, Channel: 1, Number: 51 (), Value: 106
Controller, Channel: 1, Number: 19 (General Purpose Slider 4), Value: 42
Controller, Channel: 1, Number: 51 (), Value: 8
Controller, Channel: 1, Number: 51 (), Value: 38
Controller, Channel: 1, Number: 51 (), Value: 65
Controller, Channel: 1, Number: 51 (), Value: 92
Controller, Channel: 1, Number: 51 (), Value: 119
Controller, Channel: 1, Number: 19 (General Purpose Slider 4), Value: 43
Controller, Channel: 1, Number: 51 (), Value: 21
Controller, Channel: 1, Number: 51 (), Value: 48
Controller, Channel: 1, Number: 51 (), Value: 75
Controller, Channel: 1, Number: 51 (), Value: 102
- KVRAF
- 4130 posts since 11 Aug, 2006 from Texas
For what it's worth I wrote a midi JS for Reaper that converts lane automation (32-bit float) to RPN/NRPN messages:
http://forum.cockos.com/showpost.php?p= ... stcount=30
The JS is here:
http://stash.reaper.fm/v/3763/Automation_to_MIDI.zip
JS files are simply text scripts interpreted at run-time. You can open them in any text editor to see what I did.
The heart of the algorithm is the following:
It worked well with all teh VSTs I tried that supported NRPN/RPN messages.
http://forum.cockos.com/showpost.php?p= ... stcount=30
The JS is here:
http://stash.reaper.fm/v/3763/Automation_to_MIDI.zip
JS files are simply text scripts interpreted at run-time. You can open them in any text editor to see what I did.
The heart of the algorithm is the following:
Code: Select all
slider2 == 0 ? (
// RPN mode
cc_msb = 101;
cc_lsb = 100;
) : (
// NRPN mode
cc_msb = 99;
cc_lsb = 98;
);
num_msb = (slider3 / 128) | 0;
num_lsb = (slider3 & 127) | 0;
val_msb = (val_curr / 128) | 0;
val_lsb = (val_curr & 127) | 0;
midisend(offset, (cc_msg + slider1), (cc_msb) | (num_msb * 256)); // MSB Address
midisend(offset, (cc_msg + slider1), (cc_lsb) | (num_lsb * 256)); // LSB Address
midisend(offset, (cc_msg + slider1), (6) | (val_msb * 256)); // MSB Data byte
midisend(offset, (cc_msg + slider1), (38) | (val_lsb * 256)); // LSB Data byte
// The website http://www.philrees.co.uk/nrpnq.htm recommends all RPN/NRPN should
// send the registered RPN (127,127) after sending a data change. This prevents
// a device from accidentally accepting a second change to the RPN/NRPN if CC
// messages 6 or 38 are sent sometime in the future withouth a corresponding
// address.
midisend(offset, (cc_msg + slider1), 32613); // (101 | (127 * 256))
midisend(offset, (cc_msg + slider1), 32612); // (100 | (127 * 256))
run = 0;
Last edited by bmrzycki on Tue Dec 11, 2012 7:21 pm, edited 2 times in total.
- KVRAF
- 4130 posts since 11 Aug, 2006 from Texas
Your controller is sending MSB/LSB CC messages. This is not the same thing as RPN/NRPN.S0lo wrote: Controller, Channel: 1, Number: 51 (), Value: 45
Controller, Channel: 1, Number: 51 (), Value: 70
Controller, Channel: 1, Number: 51 (), Value: 97
Controller, Channel: 1, Number: 51 (), Value: 124
Controller, Channel: 1, Number: 19 (General Purpose Slider 4), Value: 39
Controller, Channel: 1, Number: 51 (), Value: 23
Controller, Channel: 1, Number: 51 (), Value: 50
Controller, Channel: 1, Number: 51 (), Value: 77
Controller, Channel: 1, Number: 51 (), Value: 104
Controller, Channel: 1, Number: 19 (General Purpose Slider 4), Value: 40
Controller, Channel: 1, Number: 51 (), Value: 3
Controller, Channel: 1, Number: 51 (), Value: 30
Controller, Channel: 1, Number: 51 (), Value: 60
Controller, Channel: 1, Number: 51 (), Value: 87
Controller, Channel: 1, Number: 51 (), Value: 117
Controller, Channel: 1, Number: 19 (General Purpose Slider 4), Value: 41
Basically your controller is taking two 7-bit CC messages (19 and 51 in your case) and sending the coarse adjustment as 19 (MSB) and fine adjustment as 51 (LSB).
The resulting number your host sees is a 14-bit integer represented as:
value = (CC_19_VALUE * 128) + CC_51_VALUE;
It's another way to get 14-bit precision in midi and the LSB/MSB pair is always 1 <= LSB <= 32
MSB = LSB + 32
And as you can see 19 + 31 = 51.
Last edited by bmrzycki on Tue Dec 11, 2012 7:31 pm, edited 2 times in total.