[sdiy] MIDI velocity
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
"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