[sdiy] MIDI velocity

Richie Burnett rburnett at richieburnett.co.uk
Sun Apr 10 00:43:50 CEST 2016

Just did some testing of the velocity sensitivity on my Roland Alpha Juno 2 
keyboard to see how it performs, and how it actually works...

1. Playing the keyboard for 5 mins with a wide range of different forces, 
capturing the MIDI messages in MIDI-OX and looking at the velocities 
revealed a minimum NOTE ON velocity of 10 and a maximum of 127.  However, 
not all of the values in between these limits were generated by the synth. 
There are a lot of missing codes at the high velocity end of the scale.  The 
highest four velocities output were something like 109, 114, 120 and 127. 
This is presumably due to limited timing resolution for high velocity hits 
where the time between top and bottom switch closures is very short.  (Note 
offs were always sent as NOTE ON messages with a velocity of zero.)

2. Carefully poking a narrow x10 oscilloscope probe down the gap between two 
adjacent keys enabled me to pick up the scanning waveform from the switch 
matrix via capacitive-coupling without having to dismantle the whole synth. 
(Don't do this at home unless you're sure there aren't any hazardous 
voltages in there!)  The scanning waveform I saw repeated every 234us and 
had eight clearly identifiable regions of 29.25us duration, each region 
changing in amplitude when each of the eight nearby keys were pressed.  So 
the entire 61-key keyboard is scanned every 234us.

3. The gate array in the Juno 2 is common to loads of Roland synths and 
samplers from that era that have velocity sensitivity, and it doesn't scan 
the keyboard in the way that is most intuitive to me.  Instead of driving 
each of the columns in the matrix that support 8 adjacent keys on the 
keyboard in turn and reading back the rows to find which of these 8 keys are 
actually pressed, this chip does the scanning in a different way...  It 
drives each of the rows in turn sequentially (i.e. keys 0, 8, 16, 24, 32, 48 
all together.  Then keys 1, 9, 17, 25, 33, 49 all together.  Then keys 2, 
10, 18, 26, 34, 50, etc...) and reads back which of the columns detects a 
keypress.  The advantage of doing it this way around is that for a velocity 
sensitive keyboards that is essentially an 16x8 matrix of switches it only 
has 8 discrete time periods to the multiplexing, instead of 16.  This makes 
it easier to get round all of the switches as quickly as possible without 
the settling times for the reads getting dangerously small!

4. Page 7 of Roland's S10 service manual also gives some clues as to the 
roll of the gate array and it's accompanying small RAM chip in the velocity 
keyboard scanning...

"Major Tasks of the CPU:
- Keyboard Reading.
Transfers the velocity curve data to IC36 (SRAM HM6116),  The key scanner 
IC37 (gate array 63H149) refers to this table for determining a key dynamics 
and writes it into IC36 together with the key number and the key event (on 
or off).  The CPU reads these data through IC37."


More information about the Synth-diy mailing list