MiMi-d - creating a new software synth for Zynthian

We should wait until the refactor is complete before including in Zynthian stable, i.e. if it is not ready for Oram release then we bump it to the next release. So in a change to my initial suggestions, let’s not add to Oram just yet. Users have instructions on how to add this manually if they want to join the testing. Once @ricard is happy that it is stable we could then add it. (This doesn’t mean it never makes it to Oram. Sometimes we do add features after a stable release - if we deem them worthy!)

I sometimes do that with Zynthian but as you say, it isn’t good for other users. I haven’t engaged my brain yet to solve this conundrum. I am sure there is a workflow that supports moving files around locally. (Not just manual file copy that can be a bore.)

Good work on the manual. It is the sign of devotion and quality when a developer or team write good documentation. I know how dull it can get (on the umpteenth revision).

2 Likes

Fantastic @ricard! I just added the PDF link to the wiki:

https://wiki.zynthian.org/index.php/MiMi-d

Is it in the main branch? I will wait you confirm to test again …
If you have time, please, prepare a small preset collection. I really would like to include the MiMi-d in the oram release :wink:

Regards,

2 Likes

The changes are not on the master branch yet (still a few things to iron out), although if you do want to test you can check out the dev branch, which has the latest updates (but also tends to get rebased and changed a lot since I use it for communication between my laptop and Zynthian when testing).

I’m working on a set of ‘factory’ patches too, now that the parameters are getting stable.

I’ll post an update when I’ve merged the changes to master.

When is oram scheduled for release?

7 Likes

Hi @ricard and @zynthianers!

The last Oram update includes the MiMi-d synth. The synth engine is very stable and have a solid and fat sound. An excellent piece of digital luthierism. It’s a pity we still have no presets to demo the capabilities. It’s a complex beast. Please, pleaseeeee, consider creating a few :wink:

BTW, i put this description in the engines DB:

Subtractive, 2 oscillator, sub oscillator, 24dB resonant LP filter, 6dB HP filter, 2 ADSSR, 2 LFO / AD envelope generators.

It can’t be much longer because the limited space in the zynthian UI. Probably you would prefer something more emotional. Feel free to send me the text.

Enjoy!

6 Likes

Thanks for including the MiMi-d and the kind words @jofemodo !

I’ve been spending the last couple of weeks creating some “factory” patches and in the process stabilizing the code, also taking some of the comments I’ve got from @riban and others into consideration. While creating the patches I discovered numerous bugs and inconsistencies, most of them non fatal, but there were a couple of bugs in the envelope generator code which could crash the plugin in some cases (actually, it was only the currently playing voice which crashed which was even more confusing). I’ll try to merge the changes to master within a couple of days, and publish an update, together with the patches.

Unfortunately, some of the changes mean that the patch format is not 100% backwards compatible - one of the changes has involved changing the parameter ranges, so I decided to make some sweeping changes to future proof the instrument as much as possible, so I don’t have to make this type of change again (which breaks everyone’s patches).

Stay tuned.

I’ll also see if I can come up with a better description for the UI.

3 Likes

So, finally, there is a major MiMi-d update on the master branch. Due to various (minor) rebases, either make a fresh clone of the repository, or use git fetch && git reset --hard origin/master when updating.

The update now includes a set of ‘Factory’ presets (the ‘Factory’ bank), which is installed along with the plugin itself when make install is invoked. There are certainly more that could be made, and the existing ones could be tweaked more, but I figured it’s better to get them out in the wild sooner rather than later.

While creating the patches I discovered a number of bugs and inconsistencies, which has led to a change of the preset format (mainly, parameter ranges have been changed from being 0 to 1 for all parameters, to being 0 to 10 for most continuous parameters, and integer steps for enumerated ones), meaning that presets created with the previous version will not load properly. I realize this is a disruptive change, but hopefully thanks to the changes introduced will not have to be done again even when adding features in the future.

As before, to install, clone GitHub - polluxsynth/audio-plugins: Audio plugins using the Distrho Plugin Framework into, say,
/root/src/audio-plugins, and do make && make install in that directory. This will install the plugin and presets into /usr/local/lib/lv2 . After that, perform the webconf “LV2 plugins - Search for new plugins and presets”, likely with some secret combination of a reboot and running the function again which I have yet to discover.

Thanks to everyone for inspiration and comments on the initial version.

@jofemodo Please bring in this version as soon as possible to oram.

@riban There are some of your suggestions which did not make it to this release. Due to the problems I discovered while creating the Factory presets, I decided to have a ‘feature freeze’ and stabilize the code before going on.

9 Likes

Done! MiMi-d will be updated next time users update their zynthian software (oram).

Thanks a lot!!

7 Likes

Perhaps something like this which focuses on the salient features of the synth:

Subtractive 2 oscillator synth with xmod, 6-24 dB ladder filter (LPF) with audio rate modulation, HPF and VCA overdrive.

1 Like

Tonight’s evening jam with Torso T-1:
MiMi-d - Synth Brass
MiMi-d - E Bass
Surge XT - Psiome Send Sound / Neuro Mini

Thanks to @ricard and other helpers.
The presets helped a lot because I wasn’t able to wring the right sounds out of the initial settings

2 Likes

I was wondering how the original was operated and found this video. I like how fast he dialed on that keyboard. And another thing, there is an E-MU module in the back, I don’t know why, but I have two E-MU racks with full ROM slots. And I really like MiMi-d in Zynthian.

P.S. @ricard The offer to redraw the pictures in the manual is still valid.

1 Like

Ah, yes, I’d almost forgotten about that demo.

Annotations for those that can’t follow the narration in Swedish:
0:00: Explanation of the MiMi-a oscillator structure, with a high frequency VCO (bendable +/- one octave) driving a programmable digital divider, ending with an analog sawtooth waveform generator, resulting in a slight analog pitch drift but digitally accurate intonation.
1:07 Demo of MiMi-a oscillators. There is a variable slope sawtooth, which was not carried on to the current incarnation of the MiMi-d (but I’m thinking about adding it at some point later), and the MiMi-a had no triangle waveshape.
2:49 Controls on the MiMi-a generally go from 0 to 100 instead of the more common but less intuitive 0 to 63 or 0 to 127, except oscillator pitch which is in semitones from 0 to 72 (also fine tune goes from -20 to 100 so it fits within a 7-bit range). In the MiMi-d I opted to go from 0 to 10 since I thought it would look better in a potential future GUI, and the Zynthian can show decimal values.
3:12 Sub oscillator. The oscillators in the MiMi-a are called A, B and the sub oscillator C.
3:44 Filter demo. I say that the filter was stolen from the Moog Rogue, but that’s actually not entirely accurate, as there are design elements of the Memorymoog filter in there as well. It is a transistor ladder design.
4:08 Envelope demo, with linear ramps between the sample steps to avoid zipper noise. (In the MiMi-a the envelope generation generates a new envelope sample every millisecond). In the MiMi-d this is accomplished by running the envelopes at the full sample rate rather that at some lower control rate.
5:35 LFO, demo of filter resonance as a possible mod destination.
6:18 Demo of the individual LFOs per voice in Key Sync mode.
6:46 Demo of the General Envelope Generator. The MiMi-a had one LFO and three envelopes, where the third envelope could be used as an LFO. In the MiMI-d there are two combined LFO/modulation envelopes to accomplish this.
7:27 Demo of audio rate modulation of the filter by oscillator 2 (oscillator B in the MiMi-a). Setting the this oscillator several octaves above oscillator 1, ae filternd th resonance almost at self oscillation (9 or so) results in various vowel-like sounds when the filter is swept (for instance in the MiMi-d Jaaaa sound).
9:02 Various patches. Explaining that I don’t really remember exactly why each patch sounds like it does. When you get something that is good, you save it, simply.

Yeah, the keypad work looks fast. After a while one gets good at it. :slight_smile: The individual parameter pages in the MiMi-a are selected by entering the number of the page (0…11, with pages 10 and 11 being seldom used things such as the key assigner) followed by the MC button. So most often two button presses to reach each parameter page.

The E-Mu in the background is a PX-7 Command Station. I really love the pattern sequencer in the Command Stations. I basically swapped it for an XL-7 a little while after, which I still have (same machine, different color scheme). The sound generation section is a little quirky, but it does have a lot of useful sounds. I bought mine when prices were rock bottom, they go for about four times what I paid nowadays, and it’s not even vintage analog!

@ToFF I haven’t forgot about your drawing offer, but I wanted to get the factory patches and bug fixes out as fast as possible as a priority. I’ll get back to you!

EDIT: Augemented the description of audio rate filter modulation.

4 Likes

Today’s jam before lunch. Torso T-1 again and only 5 x MiMi-d:

  • synth brass
  • e bass
  • arpeggio III
  • mimistrings
  • spike

I know the volume is a bit uneven.

013-MiMi-d.zss (20.4 KB)

3 Likes

Yes, people don’t know what to ask for, they don’t play for it and want outrageous money :slight_smile: They should get rid of it for postage. And send it to me… :slight_smile:

I have Proteus 2000 and Virtuoso + Protean drums, Sounds of the ZR, Techno synth construction yard, Protozoa sound, Peter Siedlaczek advanced orchestra ROMs. As I already wrote, I’m addict on it a bit :slight_smile:

2 Likes

It’s actually a bit weird hearing these MiMi-d patches in someone else’s music. :slight_smile:
Nice to hear that they are being put to good use in any case!

BTW, please do tweak or at least save local copies of the factory patches if you use them. I might certainly tweak them in upcoming releases. For instance, I’m reminded that I’ve sortof left the pan spread quite high in most if not all of the factory patches.

1 Like

There’s a minor update on the master branch now (version 2.0.1). Code-wise there’s a minor bugfix for the key assigner, as well as some code cleanups. I’ve added a section on recommended key assignment modes to the manual, and corrected the name and values of the Env Retrig parameter. There are also a couple of minor tweaks to the factory patches.

As I understand it, the build script in oram pulls the latest version from the master branch so when enabling in oram, it always gets the latest release.

Next I want to do some unexciting cleaning up of the code before going on with more development.

1 Like

It may do but it should not. We should define the commit / tag to bind to so as to avoid unexpected change of behaviour. During a test phase (like Oram is currently in) it may be okay to grab the latest version but certainly after moving to a stable release (like Oram will do soon) we need to be on a known, unchanging version. We would then chose if and when we move to a later version.

This could be helped by upstream tagging their releases, e.g. you could add a tag to git to define the current version (0.1, etc.) but even without this, we can chose the commit that we use. (The former allows you as upstream maintainer to indicate the state of affiars, e.g. this is a minor / major change.)

1 Like

That’s fine. I’ve already taken to adding git tags on the master branch whenever a new release is made. The initial release a while back was 1.0.0, the one a couple of weeks ago was 2.0.0 and this last update is 2.0.1 . The version number is also returned by the plugin when queried and is also referenced in the manual.

2 Likes

Unfortunately, MiMi-d does not perform well on RPi3. I just tried it on my V3 running latest Oram and anything but the simplest patches cause the processor to overload with throttling and xruns resulting in severe audio distortion. This is a shame and possibly resolvable. Obx-d does not suffer in this way, nor does NoiseMaker (which I would have expected to trigger such issues). I don’t see what is triggering the issue yet. This is a shame because I was hoping this would be a good synth to run on all Zynthians, including our older population.

1 Like

That’s a great pity, but also strange.

Certainly, MiMi-d uses more CPU than OB-Xd, but (with Economy Mode enabled), just like OB-Xd it only uses DSP for voices that are playing, so playing a single voice on the MiMi-d should definitely be less than say two voices on the OB-Xd.

When you say ‘simplest patches’, do you mean something like a single oscillator with no modulation applied anywhere?

The thing I can think of off the top of my head is if there are any build flags which are not compatible with the Raspberry 3 CPU (ARM Cortex-A53 vs ARM Cortex-A72 in the '4), but both the '3 and '4 use the same instruction set and both have DSP and NEON extensions so I can’t think of any obvious differences in that respect.

1 Like

@riban : Do you think you could run a couple of gcc and build commands on your RPi3 Zynthian (running oram) and report back the results?

First, simply:

gcc -dumpmachine

and then, assuming you have the code checked out in ~/dpf/plugins: first cd to that directory, and then:

make -C plugins/mimid/ clean && make VERBOSE=1

(Skip the clean if it’s a fresh checkout).

Thanks!