[sdiy] MIDI velocity

Richie Burnett rburnett at richieburnett.co.uk
Wed Apr 6 13:15:37 CEST 2016

Yes, I agree, no special de-bouncing action is required if there are 
separate upper and lower contacts for each key as that builds mechanical 
hysteresis into the system.  I had assumed that Roman's specific reference 
to de-bouncing meant he was doing something extra to debounce keybeds that 
only have just a single set of contacts?


-----Original Message----- 
From: Steve
Sent: Wednesday, April 06, 2016 12:04 PM
To: synth-diy at dropmix.xs4all.nl
Subject: Re: [sdiy] MIDI velocity

I never did this, so grain of salt advised ;)
Hrm, the fact that there are two switches with a guaranteed minimum time 
limit between them (assuming a human hits the key, not some robot ;) ) could 
make this easier / no classic debunding needed.
If all a detection of the first switch closing does is marking that key to 
up-count its time counter, and all tis release deteciton is does to reset / 
unmark time counter, nothing further needs to be done for that switch, let 
it bounce? When then the closing of the 2nd switch is detected, generate the 
MIDI event, and ignore any further changes of the 2nd switch until the 1st 
switch is also released. The guaranteed distance between the switches should 
make this not "jumpy" ? So when then the 1st switch starts to bounce again 
it measn the key has rtavelled so far thet 2nd switch will not bounce 
anymore, so it's back to some marking and unmarking of the "key is about to 
strike "stage...


Von: "Richie Burnett" <rburnett at richieburnett.co.uk>
Betreff: Re: [sdiy] MIDI velocity
Roman wrote:

> ...regular scanning starts and is repeated until all keys are
detected released and debounced.

Out of interest, what rule do you use for the de-bouncing of musical
instrument keys?

For general switches in the user-interface of embedded control projects I
have always used the rule that the switch state must have been stable for
10ms before updating the output state. So, whatever action the switch
causes only takes place after the switch has been in the active state
without bouncing for 10ms, and then the action variable only cancels when
the switch has been in the inactive state for 10ms without bouncing. This
works very well for de-bouncing pushbuttons and toggle switches in things
like industrial control equipment because it inherently rejects any brief
glitches due to EMC transients, as well as removing the effects of
mechanical switch bounce. Nobody notices 10ms latency on the start and stop
buttons of a CNC machine, or an oscilloscope, or whatever it is used for.
But for musical keys, or drum pads, I am thinking that this 10ms latency on
the closing of the switch is not acceptable. Maybe I should revise the
algorithm to act on the first inactive-to-active transition and update the
output state to active immediately. I would be interested to hear what rule
you apply.


Synth-diy mailing list
Synth-diy at dropmix.xs4all.nl

Synth-diy mailing list
Synth-diy at dropmix.xs4all.nl

No virus found in this message.
Checked by AVG - www.avg.com
Version: 2016.0.7497 / Virus Database: 4545/11970 - Release Date: 04/06/16

More information about the Synth-diy mailing list