Synth Forum

Notifications
Clear all

Montage M - MIDI 2.0 to MIDI 1.0 CC data - potential data mapping issue

3 Posts
2 Users
0 Reactions
25 Views
 Toby
Posts: 648
Prominent Member
Topic starter
 

If CC#10 is labeled MSB why is it used to store the LSB of the data? Or is it?

Previously we mentioned how there are two sets of 32 CC commands. They are identical except the 1st set is labeled MSB and the second set is labeled LSB.

Except the first set is used most often and is used to store a value from 0-127.

Some controller values in Montage M now have ranges from 0-1023. So how are those values represented using MIDI 1.0 CCs?

CC#10 is defined for 'Pan' and labeled MSB. When a MIDI 1.0 value from 0-127 is used that value is usually passed to other devices using CC#10 rather than using CC#42 which is the 'Pan' LSB.

Only one command is sent for CC#10 with the data value and NO command is sent for CC#42.

But if an instrument supports Pan with a range of 1024 they could choose, if they want, to send values in the range 0-127 by sending a CC#10 with a value of zero followed by a CC#42  with a value from 0-127. In other words by actually using MSB/LSB as labeled and sending the high order 7 bits in CC#10 and the low order 7 bits in CC#42.

That is perfectly valid. But only that manufacturer's instruments would know that encoding was being used. Other instruments might only look at the CC#10 and get a value of 0.

The point is that the MIDI 1.0 spec only defines the raw command structure. But it does NOT mandate how that structure must be used.

Typically what would happen is the range of 0-1024 would be 'scaled' to a range of 0-127 to convert the higher precision value to the required range.

The result is that zero maps to zero and 1024 maps to 127. So a value of 512 for Pan would become a value of 63 if you limit the data value to a range of 0-127. Then the manufacturer would send a CC#10 with a value of 63.

But to do that conversion properly the source machine needs to know the Pan range of the target machine.

That is where the Capability Inquiry (CI) of MIDI 2.0 comes in and the use of profiles. A target instrument doesn't need to support MIDI 2.0 commands but if it is upgraded to support MIDI 2.0 CI it can tell a source machine what its Pan range is so the source machine can map the data properly to the MIDI 1.0 requirements of the target.

CI also accomodates the ability to use non-linear mappings such as those used by velocity curves and aftertouch values.

Great things are coming!

 
Posted : 07/06/2025 2:28 am
Jason
Posts: 8493
Illustrious Member
 

If you have a MSB/LSB structure then only sending the MSB would be appropriate for reducing the granularity to a 7-bit value.   So if you send only the MSB (and not the LSB) then you're back to 127 positions.   Instead of looking at this as a whole number integer with a value of 0-1023, you can look at this as 7 bytes of a whole number then 3 bytes of a fractional value (past the decimal point).  For 0-1023 (1024 numbers) you need 10 bits - this is why I would say the MSB can represent 7 bits of the whole number and then 3 bits left over for a fractional part.  This is just for visualization.

 

So the 7 bits would be 0-127

and the 3 bits would be 8 values 000 001 010 011 100 101 110 111 so 1/8 = 0.125 

 

MSB.LSB (showing all LSB values one-by-one)

0-127.000

0-127.125

0-127.250

0-127.375

0-127.500

0-127.625

0-127.750

0-127.875

 

So if you don't send the LSB then you're back to the 0-127 without the extra granularity.

 

The instrument can "visualize" these numbers however it feels.  0-1023, 1-1024, or the decimal system I used above just to help visualize better how the values related to MIDI 1.0.

 

Ultimately I take it the designers chose 1-1024 as a way to communicate these 10 bits of data to make the numbers smaller on the display.  127.875 takes 3 extra characters vs 1024.  Although 127.875 (etc.) would better relate to MIDI 1.0.   For something like pan (and lots of other extended parameters) you're not going further to the left-pan or further right-pan - you're just getting more granularity for the same limits of L and R as before.  

 

This post was modified 3 weeks ago by Jason

Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R

 
Posted : 09/06/2025 4:52 am
 Toby
Posts: 648
Prominent Member
Topic starter
 

That is why CI (capability inquiry) and profiles are likely to play an important part in allowing different instruments, supporting different MIDI versions, to play 'nicely' with each other.

If you have a MSB/LSB structure then only sending the MSB would be appropriate for reducing the granularity to a 7-bit value.   So if you send only the MSB (and not the LSB) then you're back to 127 positions. 

Yes - that gets the job done. The MIDI spec uses 'coarse' and 'fine' as a caution to not take MSB/LSB literally for the controller CCs.

And the spec does spell out that if you only send LSB then the receiver should assume that the previous MSB (for that control set) still applies. That further reinforces the coarse/fine interpretation. And if MSB is sent the spec says the receiver should internally set its matching LSB to the receiver's interpretation of 0. 

We were just pointing out that since the spec doesn't really dictate how those CCs must be used one manufacturer's device can't just assume another manufacturer's device is going to use them the same way.

That is where CI and profiles come in since they allow a manufacturer to create a profile that can be used to map things properly to their devices.

Ultimately I take it the designers chose 1-1024 as a way to communicate these 10 bits of data to make the numbers smaller on the display.

Who knows? That 'communication' isn't happening yet as far as we know. MIDI 2.0 isn't supported on Windows yet and we haven't seen any usage of LSBs for the controller CCs.

If anyone captures any MIDI output that uses both the  MSB and LSB CCs for a controller they might post it so we can try to figure out what that particular device/manufacturer is doing.

For sure there are no such MSB/LSB controller pairs in the MIDI 2.0 format so it should only be an issue if a device is needing to send MIDI 1.0 data to a device. The 2.0 sender needs to make a choice to ONLY send MSB or to send both MSB/LSB by formatting the higher precision data into two bytes.

There are likely to be some rather immediate 'hiccups' once 2.0 starts rolling out.

Windows 11 work is getting closer but it is still looking like end of this year before a reasonably stable MIDI 2.0 install is available. And there still hasn't been any word/docs from Yamaha about how to configure/use the new Port 4 the M models supposedly have for dealing with MIDI 2.0.

We've asked them multiple times to tell us 'something' about the new port but haven't yet gotten any response.

 
Posted : 09/06/2025 5:21 am
Share:

© 2025 Yamaha Corporation of America and Yamaha Corporation. All rights reserved.    Terms of Use | Privacy Policy | Contact Us