[sdiy] MIDI velocity

rsdio at audiobanshee.com rsdio at audiobanshee.com
Thu Apr 14 03:24:59 CEST 2016


On Apr 13, 2016, at 12:20 PM, Neil Johnson <neil.johnson71 at gmail.com> wrote:
> I wrote:
> 
>> About 7 years ago when I was writing the keyboard scanning code for a
>> Siel Opera 6 I had a simple scheme for scanning and measuring play and
>> release velocity (not many folks seem to know about release velocity
>> although some synthesizers do recognise it).
>> 
>> Using an Atmel ATMega8 scanning the entire keyboard every 1ms I run
>> 4-state state machine for each key, where the states are UP,
>> GOINGDOWN, DOWN, GOINGUP, and an 8-bit counter for each key.
>> Debouncing is handled by the algorithm rather than a separate
>> debouncing step.  With the right encoding of the states you can do
>> most of the testing and state transitions using btiwise operations, 8
>> keys at a time (on a 32-bit processor you could do 32 keys at a time).
>> 
>> I'll try and dig out the code and sling it up on github sometime.
>> It's all in C, no assembler required.
> 
> Found it, and hosted up on github:
> 
> https://github.com/nejohnson/kbdscan
> 
> The keyboard scanner talks to a 74LS154 on the keyboard assembly, and
> generates key on and off events with associated velocities.  There's
> also code for reading some analogue inputs and a footswitch, but
> that's not important right now.

Thanks for sharing this!

I was going to suggest that having the 'LS154 on the keyboard assembly is a great design choice, because that allows a simple, 14-pin connector, but then I realized you probably were stuck with that choice because of how the Siel Opera 6 was designed. Sure enough, looking at the schematic I see 8 row bits, 4 column address bits, power and ground. (feel free to swap the row and column nomenclature as you prefer - Roland seems to use the opposite terms)

Brian




More information about the Synth-diy mailing list