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.

The 2.1 release, in late August of 2021, expanded the BPM sync to both LFO's and relevant effect parameters. There were also more improvements to the UI, notably the file manager. A large portion of the development cycle was dedicated to the creation of a revised and improved user guide, available in lightweight HTML.

In October of 2021, the patch release 2.1.1 brought substantial improvements to the performance and functionality of the instrument banks - improving load times and disambiguation of bank/instrument names from merges. It also included a new dedicated button for opening the MIDI CC controls window. These controls were often overlooked, as they were previously only accessible by right-clicking the Controllers button. After general agreement, triggering a program change for a part will now always enable that part - controls that disabled that behaviour were removed (the behaviour can still be achieved via NRPN, if desired). Other changes included easier navigation to favourites in the file browser, and fixing an issue where the user guide did not open instantly.

November 29th of 2021 saw the release of 2.1.2, where development was mostly focussed on the gui - fixing positioning issues and making most controls of the resonance window MIDI-learnable.

Yoshimi 2.2.0 was released in May 2022, and saw some major features and improvements. Hermann implemented threaded recalculation and live transitions between wave tables for the padsynth engine. When coupled with midi learnable recalculation (as well as the ability to self-trigger recalculation with random walk) it greatly increased the power and flexibility of that engine. Hermann also made many improvements to the internals, particularly in the area of filters (reverb and analog). The first version of a long awaited undo/redo feature was added, allowing for a much nicer experience when developing and tweaking instruments. The undo/redo supports the vast majority of actions that can be performed in the gui (or cli). Support for setting a default BPM was provided by Kristian. In addition, a lot of bugs were fixed and a great deal of work went into adapting the gui for the new features.

Versions 2.2.1 and 2.2.2 brought a number of bugfixes, a few new instruments, and a reset button for the part editor.

In 2.2.3, more bugs were fixed, and a couple of instruments were added. Eq bands and formant filters had their counters changed to start from 1 instead of 0. The formant filter editor was also changed to mark unused vowels, and a long-lived text resize issue was fixed.

At the end of May in 2023, after a gruelling development cycle, version 2.3.0 was released. It included new instruments from Art and Lorenzo, numerous improvements to the gui, code improvements, bug fixes, and engine improvements. The most prominent of the new features was making the gui themeable, with both bundled and customizable themes. The knobs and sliders were also changed to mark when they deviate from their default values. On the engine side of things, certain envelopes and sliders that were previously limited to integer increments were changed to support floating point values, lending more control over sound design in some areas.

And the story continues...