Pink robot
Software synthesizer for Linux

The History of Yoshimi

by Will Godfrey

Once upon a time, there was just Moog. Then there were many.

Yoshimi is not ZynAddSubFX , but we have not forgotten from whence we hath come, and we salute thee!

ZynAddSubFX was founded by Paul Nasca and continued by many others. Several years later, Yoshimi was founded by our dear friend, the late Alan Calvert (Cal), at a time when ZynAddSubFX showed amazing promise, but did not satisfy his needs and ours.

Jeremy Jongepier was instrumental in obtaining access to the SourceForge repository after we lost Cal, and maintained it until early 2014, accepting small improvements from a number of people. Then, with a young family and other interests, he felt he could no longer do so. At that time, I had become well known as a Yoshimi instrument designer and a sort-of general bug finder, and, with considerable prompting from others, agreed to take over as a caretaker. I had limited C coding experience, no C++ knowledge, and never been involved in version control.

The early work was mainly minor corrections and improvements. Many people gave support, in particular Rob Couto, who has been a mentor and contributor throughout this time. Harry Nakos helped me with the first GUI change - enabling a single row mixer panel. Later, Andrew Deryabin coded the LV2 and multi-instance extensions.

Meanwhile, Harry supplied the preliminary example code that was to become the basis of the much improved instrument bank structure. Andrew then ran with this and coded the full structure, which over time has been developed further. Andrew also continued to provide help from time to time.

By early 2015, I had gained enough experience to implement vector control, and later most of the NRPN code. The end of that year saw the first development of CLI (command line) access, aimed at making Yoshimi accessible to blind and disabled musicians. Since that time, Jeanette C. has frequently given her invaluable advice as a blind user, as well as a segment of code to implement proper readline features.

The channel switching feature (Solo) was implemented in the middle of 2016, and crossfade control arrived later in the year. A major feature, MIDI‑learn, was added at the end of that year.

Towards the end of 2016 Jörn Eichler identified a problem with filter tracking whereby it was impossible to track pitch 100% - then produced the code to do so. Later he added the first improved tooltips that gave real values on some controls.

Throughout 2017, Jesper Lloyd provided additional enhanced tooltips, along with a number of other GUI improvements and bug fixes.

At the beginning of 2018, Kristian Amlie devised interpolation for Yoshimi’s effects to enable smooth transition when changing controls in real time.

At the end of that year, Hermann Voßeler did considerable work improving and tidying up the random number generator, and correcting some mistakes I had made, so it is now thread-safe and future-proof. He continues to provide assistance.

In early 2019, it became possible to compile a headless version of Yoshimi, and in the middle of the year, Kristian implemented a major improvement to the AddSynth modulators - officially released with Yoshimi version 1.6.0. The copy/paste storage was also greatly improved, as it implemented a pattern similar to that of banks. Hermann also did considerable work refactoring code, making it more readable and easier to maintain, especially regarding the command interface.

During the late summer of 2019 an instrument search feature was added. The new feature made it possible to find and load instruments from across all available banks, through lists of instruments with the same type.

The minor version release 1.6.1, in December of 2019 brought corrections to the notes and allocation terminology of the microtonal scales, additional improvements to the CLI, improved configuration management, and also some performance improvements in the GUI.

The 1.7.0 release, in January 2020, featured the efforts of Kristian to provide live feedback to almost every parameter in the synth engines! It also included a number of bug fixes.

In April 2020, 1.7.1 was released, with Pan Law settings, experimental support for aftertouch input, a new waveform shape (hyperbolic secant) and a powerful new way of controlling Solo mode by using channel controls. In addition, the handling of banks was made more consistent with normal standards, making them easier to use and more predictable when controlled with bank select signals. The release also featured a large number of code improvements from various contributors. Most prominently Iain King-Speir who both cleaned up a lot of code and provided fixes and improvements to the legato implementation.

August 17th of 2020 saw the release of 1.7.2. The most important change was the addition of width and center controls for random panning, allowing greater control of the panning range. Additionally, the FM modulation algorithm was improved (by Kristian Amlie, who also provided some additional fixes and optimizations), instrument file compatibility issues were addressed, numerous gui bugs were fixed and some new dynamic tooltips were added.

The major release of 2.0 was made in early 2021 and a saw number of major improvements, with the most notable one being the ability to resize all windows - allowing a much better experience on larger, and high-dpi monitors. Other improvements included LFO Sync, improved LV2 performance and general performance improvements on some RISC-architecture CPUs, extra instrument types (with instrument bank revisions to include said types).

The 2.0 release also saw improvements to the instrument bank and instrument type systems, and MIDI-learn. It added persistent aftertouch and pan law settings (the latter also being a new feature). A new file browser was implemented, replacing the stock fltk browser to provide more control and some quality-of-life features.

And the story continues...