The MiMi-d

Filter page of the MiMi-d Virtual Analog Plugin, running on the
Zynthian platform
36 years after the creation of the
MiMi-a
synthesizer it's time for another Pollux instrument - the MiMi-d.
For a while I've been checking out various, mostly free,
synthesizers in plugin form. However, after a while I get itchy fingers,
wanting to change things or fix deficiencies. However, that would create
a similar but incompatible instrument, so I've had the thought of designing
my own virtual analog synthesizer for some time.
Queue the OB-Xd, which is a widely
acclaimed Open Source virtual analog rendering of the Oberheim OB-X
polyphonic analog synthesizer.
As people who know me will attest, Oberheim synths are not my favorites,
but the OB-Xd has a number of interesting traits:
- Open Source
- Very good sounding Zero Delay Feedback filter
- Low alias oscillators
- Envelopes and filter coefficients are updated at the sample rate,
meaning there is none of the characteristic "zipper noise" that
plagues most digital synthesizer renditions, and even most digitally
controlled analog synthesizers. (In fact, this specific issue was
addressed in the MiMi-a by implementing 'ramp generators' to generate
the digitally controlled envelopes and LFOs).
So, I looked into using the OB-Xd as a starting point to create a
digital synthesizer plugin. Basically, the idea was to keep the DSP code
with a few modifications, and some typical Pollux features added (see below).
The first goal is to create a plugin for the
Zynthian
platform, using the native Zynthian GUI with four knobs per parameter
page.
The instrument implements a fairly basic two oscillator
synthesizer, with the idea of keeping the number of parameters low, so
that it's possible to grasp the instrument easily, thus being more inviting
to create sounds on. In essence, it is a combination of the best ideas
from the Delta Seven and
MiMi-a synthesizers, in digital form.
- Two oscillators, with selectable standard waveforms (saw, triangle, pulse).
- 24 dB/octave low pass filter, with additional 18, 12 and 6 dB/octave modes.
- Rudimentary settable 6 dB/octave high pass filter.
- VCA with overdrive function.
- Cross modulation from one oscillator to the other.
- Audio modulation from one oscillator to the filter.
- Variable level sync between oscillators.
- Two five stage ADSSR envelopes (for the filter and VCA),
i.e. your standard ADSR envelope with an
additional sustain time parameter so that the sustain phase can function
as a second decay.
- Two per-voice LFOs, with optional key sync.
- No modulation matrix! Instead, the output from each modulator is
controlled by a dedicated mod level and routing controls.
- Bidirectional filter envelope modulation - no more running out of the
low end of the cutoff control when adding a lot of envelope modulation.
- After touch and velocity sensitivity.
See also
https://wiki.zynthian.org/index.php/MiMi-d.
The manual can be found in the github repository (see below), or
here.
Nitty gritty details
There were some technical subtleties with the OB-Xd which I'm not completely
happy with which I wanted to address:
- The OB-Xd envelopes are excellent, but the asymptote level for the attack
phase is about 10% over the peak, in contrast to the original CEM 3310
envelope chip which like most analog ADSR envelope generators have
an asymptote that is 1.3 times the peak envelope value. This makes for a
more linear attack and snappier attack response which is usually more
desirable.
- Also, the decay asymptote in the OB-Xd is zero rather than the sustain
level, which tends to cause the decay phase to cut off rather abruptly.
- The OB-Xd GUI has a filter tracking parameter which is either on or off,
but the underlying parameter is actually continuously variable between
0 and 1, and this will be taken advantage of in the MiMi-d.
- While there is a small advantage of having separate on-off switches
for the oscillator and LFO waveforms, it eats up precious space in the
4-parameter-per-page Zynthian UI, and so more traditional waveform
selector parameters will be used. It also saves a bit on DSP usage not
to have to generate more than one waveform at a time.
However, in addition to the above list, numerous tweaks and adjustments were
made to the DSP code, so that even if it's still possible to see its heritage,
the code has largely been significantly reworked.
Development
MiMi-d is a software-only synthesizer, in the shape of a Linux LV2 plugin,
written in the C++ programming language.
Development-wise, it started with the OB-Xd code base, and then over time
was evolved to become the MiMi-d.
OB-Xd uses the JUCE 5 framework for audio plugins, and thus MiMi-d did that too
originally, in the form of a
fork
(
dev-mimid branch)
of the DISTRHO-Ports repository of Linux synthesizer plugins,
which is what is used in Zynthian for the OB-Xd (and several other
software synths) implementation.
(A
separate branch of a
fork of the zynthian-data repository contained the
.ttl file (GUI parameter definition file), in a similar manner to the OB-Xa
.ttl file).
Development has since migrated to use the
DISTRHO Plugin Framework (DPF), which is falkTX's lightweight framework for
developing Linux audio plugins.
The repository is found at
https://github.com/polluxsynth/audio-plugins.
Development takes place on the
dev branch
with the
master branch
containing finalized changes and releases (with appropriate git tags).
Beware that I tend to rebase the dev branch often.
The latest release at the time of writing is 2.0.5 .
Back to my synth page.