Having spent some time reading about the pitfalls of the MIDI 1.0 standard when using 14 bit CC’s, I decided to implement 3 methods to see what the differences are, and how they translate in use. I have also looked the the Core module, MIDI-CC, where smoothing filters are used. I have used the same filter but added a slider to the context menu to adjust the response, where the original module uses tau = 1/30 = 0.03333333 seconds.
The methods used are:
a. MIDI 1.0, when MSB is set LSB = 0.
b. When MSB or LSB is recieved, the output is updated, with no zeroing or waiting
c. When MSB is updated, LSB is waited upon before updaing all 14bit, LSB are updated with no waiting.
With the smoothing filter set at 0.033333, to match MIDI-CC the scope is showing no noticable glitches, however this changes when the response time of the filter is reduced to the minimum the diffence in the three methods becomes apparent.
a. downward glitches become apparent
b. upward glitches
c. I am yet to see a glitch.
Here is a video showing the differences. My tests have all been using done on a homemade controller consisting of a pi pico, a couple of multiplexers, and some trimmers. It would be very helpful if others could test also to confim the results, but I have been very impressed with the improvements. I have been able to dial in CV values with an accuracy of 0.002V, and tune VCO’s better than I can tune a guitar with a clip-on tuner.
In the video, I have two feeds to the scope, both from the same controller, 7 bit and 14 bit, even though the hardware is at best 12 bit, but more like 9 bit with filtering. The scope is set to 0.25V/div so only covers the range 0 - 1v to be able to clearly see the difference.
The code can be found at rack-modules/Zilah.cpp at Midi-cc-14 · StudioSixPlusOne/rack-modules · GitHub
Windows and Linux build can be found: Release Zilah, · StudioSixPlusOne/rack-modules · GitHub