More Responsive Bellows

A project log for Concertina MIDI Controller

A Bluetooth LE MIDI controller in the shape of an English concertina

dave-ehnebuskeDave Ehnebuske 03/25/2022 at 18:110 Comments

After using the concertina five or six hours a week for a couple of years, it finally sunk in that I needed to improve the way the bellows pressure controls the MIDI "expression pedal" (instrument volume). The motivation was twofold. First, I suspected that the controller was sending many more expression pedal MIDI messages than was actually necessary. When I really cranked on the bellows, it would sometimes induce a fleeting lag in the synth. Second, pushing (or pulling) the bellows produced less change in volume – particularly at the low pressure end – than I wanted.

So, I reworked the transfer function that converts the bellows pressure to the MIDI expression pedal value. This was really simple to do because it's described by a cubic Bézier curve. All I needed to do was twiddle a few compile-time constants. To see what effect the twiddling would have I used a spreadsheet that plots the curve:

And I reworked the code that issues the midi expression pedal messages to be more careful with how often it sends them. The result was a noticeable improvement on both fronts. It's considerably more responsive without being "jumpy" and I haven't seen the occasional lag I saw before.

Of course, once I got to changing how the bellows worked, it got me to thinking about more "improvements" I could make. For now, though, I'll play it a while with the update to see how I like it. But I suspect I'll be back. A good project is never done.

While opening this project up again, I discovered the only place the code existed was on my laptop. Oops. There's now a Github repo.