Oct 15, 2019

Quantizer

To help the modular system play in musical tune, I decided I wanted a Quantizer module. After significantly longer development time than I anticipated, the result is this two-channel Quantizer in 10hp Eurorack format.



Quantizer module with printed wooden front panel

In its simplest form, a quantizer is a module that takes in a control voltage, and outputs the same voltage rounded to the nearest note. In the usual V/Oct tuning system, and assuming we use just tuning, that means rounding to the nearest 1/12th of a Volt.

An obvious extension to such a basic quantizer is to have adjustable scales, where some of the 12 notes are disabled and hence will never be output. For example a quantizer could be set to a major scale to make sure the VCOs will always play only notes from that scale.

In my Quantizer I chose to have completely flexile scales, defined by 12 illuminated push buttons that are toggled on and off by pressing them. This allows any custom scale to be programmed, or for example only a subset of a scale to get more control over the resulting music. I often find enabling only 3 or 4 notes gives more useful results than a traditional 7-tone scale.

User interface

Rather than the traditional piano keyboard layout, I ended up with a circular layout of the scale buttons that is comparable to the concept of bracelets. This layout is to me more intuitive compared to the piano keyboard - for example transposing the scale is just rotating the notes on the ring. As shown below, on the front panel layout I still made shaded regions to indicated the black keys on the piano keyboard for reference.

Front panel layout

Below the scale buttons are function buttons, including two buttons to rotate the scale clockwise or counterclockwise, allowing one to easily change the key. Using the shift button in combination with the scale buttons more advanced options can be changed, such as different variations on transposing one or both channels. The operation of all functions is explained in detail in the user manual.

Each of the two quantizer channels has obviously an input and output jack. The Gate output (and corresponding LED) go high whenever a new note is quantized, and can be used for example to trigger envelopes. Finally, each channel has a Trig input, which can optionally be used to trigger the quantization at desired times. When nothing is connected to the Trig input, the quantizer goes to a new note whenever the input voltage changes to the next note.

Finally there are two assignable CV inputs A and B. In my first prototype these inputs were absent, but after playing with rotations and transpositions for a few minutes it became blatently obvious that these functions should be sequenceable with CV. The CV inputs can be assigned to almost all functions, such as changing key, transposing one or both channels, adjusting gate lenght or even loading a completely different scale from memory.

Hardware design

Quantization is inherently a digital operation, and it is no surprise that this module is implemented digitally. While quantizers made up of only discrete logic chips exist (notably Ray Wilson's MFOS Voltage Quantizer), a microcontroller makes the implementation both a lot simpler and more flexible. The venerable ATMega328P is a good match for the complexity of this project, and makes the Quantizer programmable in the Arduino IDE which hopefully lowers the barrier to firmware development if anyone is interested in that.

A key component of a quantizer is a digital-to-analog converter (DAC), which should be highly linear to ensure all quantized notes are in tune. Rather than a fancy DAC chip I went with filtered pulse-width modulation (PWM). While PWM has limitations, it gives excellent linearity since the output voltage steps are derived from the accurate timing of the crystal oscillator. Filtering the PWM signal properly is challenging, but using a 4th order buffered passive filter the results were satisfactory.


A more detailed description of the hardware as well as schematics are available in the build document. The hardware part of this module is not open source, but like with my other designs personal, non-commercial use is allowed.

Software design

The firmware of the Quantizer is written in the Arduino IDE, and made available open-source such that anyone can make modifications or alternatives if desired. Due to the limited resources on the 8-bit microcontroller, hardware and software are fairly tightly knit together. If you fancy developing the firmware for this module, the comments in the code give the best starting point. Also feel free to get in touch, I am happy to help where I can.

Building the Quantizer

Are you intersted in a Quantizer for your own system? I recommend first reading the user manual to see if the Quantizer fits your needs, and then have a look at the build document for building information.

I offer PCBs and front panels for sale, and generally also pre-programmed microcontroller chips if you don't fancy programming it yourself. The build involves a few 0805 and SOIC-size SMD components, but is mostly through-hole. While the component count is high compared to my other modules, there is nothing particularly difficult in the build.

All documentation can be found on Github.

1 comment:

  1. Would good add short video (or not short), if it not difficult.

    ReplyDelete