HELLO
Hello, and Welcome to the User Guide for the Isle I-1 software synthesizer. We at Isle Synths would like to thank you for your interest, time, and of course, hard-earned money, and believe your investment of such will be paid back several times over, in the form of your New Favorite Go-To Synth. You’re probably anxious to get started (and, given my love for technical writing, I am anxious to get finished), so let’s jump in!
The User Guide is laid out in chapters for easy consumption and reference. This chapter, the first, will give an introduction to the synth’s design philosophy and its central concept, the Patch Bank.
The Isle I-1 is available as an Apple Audio Unit plugin for Mac (macos), with VST versions for Windows and Mac and a version of the Audio Unit for iOS coming soon. The Audio Unit is a macos system extension. It can run as a standalone application, or embedded as a plugin in any application which can host an Audio Unit, including most popular DAWs available for Mac – GarageBand, Logic Pro, Ableton, FL Studio, Renoise, and Cubase, to name a few. The app is currently offered via subscription on our Patreon site (https://www.patreon.com/c/IsleSynths), though traditional purchase via app stores is its future. Installation of the application is simple – download the .dmg file from the Isle website (www.islesynths.io), open the file, and drag the application to your Applications folder. As a subscriber, you will receive a highly-coveted license file, personalized for you with messages of personal validation, love, eternal gratitude, and most importantly, your license code. Go to your Applications folder, right-click on the Isle I-1 app, and select Show Package Contents. Go to the Contents folder, then Resources, and paste your license file in the Resources folder, with the file name “license.dat”. Go back to the Applications folder, and launch the Isle I-1 app – you are now running the standalone application, which also registers the app as an Audio Unit system extension. It will now be available in any application which can host an Audio Unit, including your favorite DAW.
Fundamental to any device, software, or other idea which purports to generate sound is a mechanism for actually triggering a sound. In the Isle I-1, this can be accomplished in several ways. The standalone app has a very primitive keyboard implementation, laid out like a traditional piano keyboard, with the ‘H’ key of a U.S. keyboard being middle C (using the default 12-tone even-temperament tuning); the natural notes extend in the same middle row in either direction, and sharps/flats in the row above, on the keys more-or-less in-between natural notes (the C# above middle C is the “U” key). Several DAWs provide their own “musical typing” window, such as GarageBand and Logic Pro; they also provide MIDI piano-roll interfaces for playing and sequencing MIDI events. Finally, the Isle I-1 is fully controllable via MIDI 1.0 – set your favorite MIDI controller to transmit on a MIDI channel, and the I-1 to receive on that channel, and the I-1 will respond to all Note On and Note Off messages, generating sounds with the currently selected Patch (each channel can be configured to play its own patch instead). MIDI control also works with any device which is NOT your favorite, provided its MIDI OUT port is working. Several MIDI commands “just work” out of the box, such as Pitch Bend, while any modulatable parameter can subscribe to any MIDI event (MIDI 1.0 support is covered in complete detail in its corresponding chapter).
THE PATCH BANK
The central “object” of the Isle I-1 is the Patch Bank, represented by the application’s main window. The Patch Bank is a collection of any number of Patches, plus system-level settings including overall output Gain, MIDI channel configuration, any user-defined system-level shared objects, such as Oscillators and an Effects Bus. When you launch the Isle I-1, the Patch Bank used previously will open, if found, otherwise a new Patch Bank will be created, with MIDI Omni Mode, and a single Patch with a single sine wave Oscillator. The Patch list for the bank is displayed on the left side of the window, with the Patch Bank Name and Path above it; the Patch Bank can be filtered to only show patches of certain types, via the filter icon directly above the Patch list and below the file path. You can create a new Patch Bank by clicking the New Patch Bank icon over the Patch list; there are also buttons to Load and Save a Patch Bank. In addition to the file name, you can give your Patch Banks a Name and Notes, a longer description – the name should be something short and descriptive; there is no limit to the length of the name, but a good guideline is to keep it to something which can display completely in the edit box. Patch Bank Notes can be added by clicking the Notes button above the Patch list; Notes are for a longer, freeform text description of the purpose of the Patch Bank, what holds its Patches together; it accepts any Unicode character, including cuneiform, Egyptian hieroglyphics, and the poop emoji.
A Patch Bank does not have a limit to the number of Patches it can contain. It represents a logical grouping of Patches for a specific purpose; you may have a bank of sounds for a specific video game or Foley machine emulator which embeds the synthesis engine; a bank for a certain selection of songs you are performing or recording somewhere, or another group of Patches and settings for a different session or performance. Patch Bank files can be written anywhere in your file system (including cloud storage), and have the .bank extension. This file is really just a zip file – inside are the .core file, which contains the Patch and system-level definitions; and the .midi1 file, which contains MIDI 1.0-specific parameters and configuration. Any samples can be stored in the Patch Bank’s zip file as well, so that Patch Banks are fully portable and shareable across systems. The .core and .midi1 files are simply JSON (JavaScript Object Notation) data – it is possible to hand-edit them, though somewhat difficult perhaps, and hand-edits are not officially supported. If you attempt to hand-edit, ALWAYS TAKE A BACKUP!
THE PATCH
The Patch Bank may be the central object of the I-1, however, the real work of generating sounds is defined by a Patch. A Patch is exactly as its name implies – a wiring of components to produce a specific timbre. Think of a Patch as a sound template which can produce the timbre at any pitch. There are three basic components to a Patch:
- Sound sources, called Oscillators (a bit of an overloaded term in the I-1), which can produce basic waveforms such as Sine or Square waves, play audio samples, or invoke noise generators;
- The Patch-level Effects Send, which applies its effects only to sounds created from the Patch template, and which can execute those effects in series or in parallel (different from the system-level Effects Send, which applies to all sounds generated from any Patch template – I’ll talk more about Patch architecture and the overall system architecture in the next chapter);
- And finally, a Mixer, which wires together the Oscillators and Effects, and routes the resulting samples to the host application (your DAW).
The Patches available in a Patch Bank are displayed in the Patch List, on the left side of the window. Click on any Patch to display its details in the center section of the window, where the Patch can be edited. The currently selected patch is, by default, the patch used to generate newly-triggered sounds, although each configured MIDI Channel can trigger sounds on its own Patch. You can add a new Patch by clicking the Add Patch icon above the Patch list; you can delete individual Patches by clicking the trash can icon for the Patch in the Patch list (you cannot delete a Patch if it is the ONLY Patch in the Bank). There are also three special-case patch types – Keyboard Splits, Drum Patches, and Vector Synth Patches, which will have their own sections in the Patch chapter.
SYNTHESIS ENGINE ARCHITECTURE
The diagram below shows the basic sample-generation path as sounds are triggered. As new sounds are triggered, they are added to the sound buffer, up to the user-configured maximum polyphony. Each new running sound contains all of the state information for that sound – the phase of each oscillator, current envelope stages, the delay buffer of a reverb effect, etc. there is also a constantly-running sound object containing system-level objects – user-defined LFOs, looped envelopes, and any effects on the system effects bus. The mechanism for calling the engine and requesting samples is environment-specific – Apple Audio Units, for example, call the engine from the Core Audio subsystem, and request 500 samples at a time. With each sample, system-level oscillators and envelopes are executed, followed by all of the operators for each currently-running sound, and finally, any effects in the system effects bus. State is advanced as each operator executes, including envelopes, which are advanced to the next stage, up to any defined sustain stage. When a sound is instructed to stop, via command or by triggering a MIDI Note Off command (i.e., letting go of the key), each envelope is advanced to the first post-sustain stage, and sample generation continues until all post-sustain stages are exhausted (if there is no sustain stage, envelopes execute until all stages are complete, and if there are no envelope stages, sounds terminate immediately upon being told to stop). When a sound has been told to stop and has exhausted all of its envelope stages, the sound terminates, and is removed from the running sound buffer (freeing up slots for new sounds).
Oscillators each generate their own samples, and the Oscillators which are wired directly to the Patch’s Mixer make up the completed timbre of the sound, pre-effects. Oscillators generate samples from a sound-generation strategy, the Wave Generator, which may calculate a waveform such as Sine directly, invoke a Noise Generator, look up a value from a wave table, or retrieve a sample from an external audio file. That sample may be modulated by other Oscillators, or even by itself via feedback – this oscillator can be called a carrier, while oscillators generating the samples for modulation can be called modulators, but it is possible for an Oscillator to be both. Modulator Oscillators may be part of the Patch or reside at the system level, and may be shared by multiple carriers. Additionally, each Oscillator can wire its own effects – while it may be a bit heavy to assign each Oscillator its own reverb instance, subtractive synthesis can be achieved by assigning various Filters to different Oscillators.
The Mixer sums the output of each directly attached Oscillator, according to the Patch’s mix settings, and generates audio samples for each configured audio channel (if more than one), via its master panners. This is the first time a sample exists relative to a spatial audio field – the Oscillators work only in mono; the mixer separates into stereo, Surround, etc. At this point, the Mixer routes each channel to the Patch’s effects bus. Many effects, such as Reverbs and Delays, can work on multiple channels of input. Effects in the effects bus can be executed in series or in parallel; the process is sort of the reverse of Oscillator sample generation, in that the mixer sends its pre-effects samples to the effects directly wired to it. If multiple effects are wired directly to the mixer, they execute in parallel, and all downstream effects run only on the specific effect to which they are wired. Think of it like a guitar rig with multiple pedalboards – if you split the amp’s output to each pedalboard, the pedalboards act in parallel, but the effects on each pedalboard only operate in series on that board’s previous effect. At the end of the effects chain(s), the Mixer again sums the output of the last effects. At this point, the samples for each executing sound are summed, and routed to the system-level Effects Send. The samples at the end of the system-level Effects Send, finally, are summed and returned to the caller of the sample loop, usually an operating system layer such as CoreAudio on macos.