Tiny God Heartburn v1.05

Yet Another Soft Synth (Win32 VSTi)

© 2002, Russell Borogove

"In the corner I swear I can hear / the ghost of you screaming at me"
Heartburn, Chris Connelly

Tell me how you like it!


Heartburn: Yet Another Soft Synth


General Description

Heartburn is an "additive-subtractive" soft synth which has a few interesting variations on the classic virtual analog synth structure.

Module Overview

The major modules of Heartburn include:

• three wavetable oscillators (OSC A, OSC B, OSC C) capable of producing the usual sine, square, triangle, and sawtooth waveforms as well as several other esoteric waveforms;

• an external input channel (EXT) which can be used as a audio source, modulator, or both;

• a conventional resonant lowpass/highpass/bandpass filter (FILTER) operating in either 12dB/octave or 24dB/octave slopes;

• a vocal formant filter (FORMANT) capable of creating a number of vowel-like timbres;

• three envelope generators (ENV 1, ENV 2, ENV 3) which can independently drive the pitch and amplitude of the oscillators, the external input gain, and modulate the filter parameters.

• morphing controls allow either blending or "breeding" of patch settings.

Module Control Panels

EXT : External Input

The external input control panel includes the following controls:
MIDI - Select MIDI channel to respond to; Omni responds to all channels. Not really part of the external input, but there was room for it here.
AMP - Selects which of the three envelope generators will drive the gain of the external input.
PEAK - The "peak" gain level of the external input, achieved at the end of the attack stage of the selected envelope generator. It is possible for Peak to be less than Sustain, in which case it's not really a peak.
SUS - The "sustain" gain level, achieved at the end of the decay stage and again after each loop cycle.
TREM - The "tremolo" gain level; at the middle of each loop cycle, the overall gain level will be equal to the sustain level plus the tremolo level.
DAMP - The rate at which the sustain is damped; with a damp of zero the sustain will continue at its initial level forever, otherwise the sustain will be damped at varying rates.
RMA - The Ring Modulate A button controls whether the external input ring-modulates oscillator A. Ring modulation multiplies the instantaneous amplitudes of the two signals; one consequence of this is that if the external input is silenced, and RMA is enabled, oscillator A will be silent as well.
FMA - The Frequency Modulate A button controls whether the external input frequency-modulates oscillator A. The degree of modulation is controlled by the FM slider in the lower right corner.

OSC A/OSC B/OSC C : Wavetable Oscillators

Each of the three wavetable oscillators is independently tunable and has its own independent gain response to any of the three envelope generators. The oscillator control panels include the following controls:
WAVE - Selects the basic waveform of the oscillator; besides the usual Sine, Square, Triangle, and Sawtooth forms, Heartburn implements several other waveforms using a new Nominal Fourier Synthesis algorithm.
TUNE - Sets the "coarse" tuning of the oscillator relative to the MIDI note data being played, in semitone increments; the range is from -24 (2 octaves lower) to +24 (2 octaves higher).
PITCH - Selects which of the three envelope generators will drive the oscillator's pitch control. AMP - Selects which of the three envelope generators will drive the oscillator's gain stage.
PEAK, SUS, TREM, DAMP - As with the corresponding controls on the external input panel, this sets the gain response of the oscillator to the selected amplitude envelope generator.
FINE - Sets the fine tuning of the oscillator in cents (100ths of a semitone); a small amount of detuning (about 1-7 cents) among the oscillators tends to yield a warmer, moving timbre; larger detunings tend to sound more dissonant.
VIBR - Vibrato; this is the amount of additional detuning present when the selected pitch envelope generator completes its attack and when it is midway through each loop cycle.
RMB - The Ring Modulate B button controls whether oscillator A ring-modulates oscillator B. Ring modulation multiplies the instantaneous amplitudes of the two signals; one consequence of this is that if the oscillator A is silenced, oscillator B will be silent as well.
FMB - The Frequency Modulate B button controls whether oscillator A frequency-modulates oscillator B. The degree of modulation is controlled by the FM slider in the lower right corner.
FB-FM - The Feed-Back Frequency Modulate buttons control whether oscillator B or C is frequency-modulated by the final output of the instrument. As with most feedback FM systems, this can yield very complex timbres from otherwise simple waveforms; the addition of the filter modules between the oscillators and the feedback path makes things even weirder.

MUTATE : Mutation Rate Control

Heartburn supports an "auto-mutate" feature, where each note played scrambles the controls. The mutation rate knob limits the amount of alteration: it controls the probability of each control changing, as well as how far the control changes. At low mutation rates, critical parameters like "coarse tuning oscillator intermodulation, and filter topology won't be modified at all. Set the mutation rate high to hear wildly different sounds on each note, then reduce the mutation rate to explore nearby variations.

FILTER : Multimode Resonant Filter

The multimode resonant filter can operate in lowpass, bandpass, highpass, or bandstop modes at either 12dB-per-octave or 24dB-per-octave cutoff slopes. The filter panel bears the following controls:
SWEEP - Selects which of the three envelope generators will modulate the cutoff frequency of the filter.
MODE - Selects the filter's operating mode and cutoff slope.
RESO - Controls the resonance of the filter (the degree to which it "pumps the gain" at the cutoff frequency); the higher, the squeakier.
INIT - The filter's initial cutoff frequency at the moment a note is triggered.
PEAK - The filter's cutoff frequency at the end of the selected envelope's attack phase.
SUS1 - The filter's cutoff frequency at the end of the envelope's decay phase.
SUS2 - The filter's cutoff frequency midway through a loop cycle. The filter cutoff will oscillate between SUS1 and SUS2 as long as the note is held.
FINAL - The filter's final cutoff frequency at the end of the envelope's release phase.
TRK - The degree to which the filter cutoff frequency tracks the note played on the keyboard. The given cutoffs always apply to a middle C note. If TRK is set to 1.0, then the cutoff increases and decreases exactly according tothe note played; if TRK is set to 0.0, then the cutoff frequencies are the same regardless of the note played. Negative values mean that the cutoff frequencies decrease as the note pitch increases.
SERIAL - If this toggle is enabled, the output of the resonant filter is used as the input to the formant filter. If not, the formant filter and the resonant filter both use the dry mix of the oscillators as their input and their outputs are summed together in the final mix.

FORMANT : Vocal Formant Filter

The vocal formant filter roughly approximates the frequency response of a nearly human vocal tract forming any of several spoken or sung vowels. Its controls are as follows:
SWEEP - Selects which of the three envelope generators will modulate the "vowel setting" of the filter.
INIT, PEAK, SUS1, SUS2, FINAL - As with the resonant multimode filter, these selectors determine the response of the filter in each stage of the selected envelope. There are several categories of formant selection: M (Male spoken), F (Female spoken), Soprano (sung), Alto (sung), Counter (countertenor sung), Tenor (sung), Bass (sung), and Random. For the spoken categories, there are ten distinct vowel formants, specified by words such as "swEEt" with the relevant vowel sounds captitalized. For the sung categories, there are five vowel sounds, "A", "E", "I", "O", "U". The Random setting selects a different vowel from any of the other categories; this occurs each time the stage is reached, so if you select Random in either Sus1 or Sus2, you will get an endless random "vowel movement".
BUTCH - The Butch setting modifies the formant structure to emphasize higher (low settings) or lower (high settings) frequencies.
DEPTH - Controls the sharpness of the formant peaks, yielding a more or less subtle result.

ENV 1/ENV 2/ENV 3 : Envelope/LFO Generators

Heartburn's envelope generators are somewhat different from most synthesizers' in that level controls are decoupled from timing controls. In a conventional ADSR envelope, A, D, and R are timing controls, and S is a level control. The initial, end-of-attack, and final levels are implicitly defined, which works fine for amplitude envelopes, but is somewhat restrictive for pitch, filter sweep, or other applications. The separation of timing from levels yields envelope generators which may also be easily used as LFOs. Each "modulatee" - oscillator pitch, oscillator/external gain, resonant filter sweep, and formant filter sweep, can select any of the three envelope generators as its modulation source.
ATK, DEC, LOOP, REL - These controls set the length, in seconds, of each note's attack, decay, loop, and release phase. During the attack phase, the modulatee goes from its "initial" value to its "peak" value. During the decay phase, the modulatee goes from "peak" to "sustain 1". As long as the note is held on, the envelope generator remains in "loop" mode, and the modulatee sweeps between its "sustain 1" and "sustain 2" values, taking the specified time per cycle. When the note is released, the modulatee goes to its "final" value. The values for the various stages are determined according to this table:

Stage Osc/Ext Amp (Gain) Osc Pitch Filter/Formant
Initial 0/silent 0 Init
Peak Peak Vibr Peak
Sustain 1 Sus 0 Sus1
Sustain 2 Sus+Trem Vibr Sus2
Final 0/silent 0 Final

MIX : Output Mixer

The mixer controls the relative contribution of the unfiltered oscillators and the outputs of the two filters. The result of this mix is the final output of the synth and may also be routed back to modulate oscillators B and C if feedback FM is enabled.
DRY - The gain applied to the combined sum of the oscillators and external input.
FILT - The gain applied to the output of the resonant multimode filter.
FORM - The gain applied to the output of the vocal formant filter.
X-A-B-C - These toggle whether the oscillator outputs and external input signal are enabled in the mixer. When disabled here, the external and oscillator A signals can still modulate oscillators A and B respectively, but do not enter the filters or contribute to the final output directly.
FM - The FM modulation depth control determines the strength of all FM in the synth.

Morphing and Breeding Features

The lowermost row of buttons controls Heartburn's morphing system. Central to both "morphing" and "breeding" are the MOTHER and FATHER buttons. When pressed, the current patch settings are saved into one or the other "parent slot". Apart from the button press, there is no visible indication of this — take it on faith.

When the BREED button is pressed, the current patch is replaced with a "child" of the two parents. Each parameter randomly "takes after" either the Mother or the Father patch; one parent's setting or the other will be matched by the child.

In addition to breeding, the parents can be morphed between. If the MORPH toggle is enabled, then the Morph slider blends smoothly between the two parent patches. All the continuous-slider parameters are smoothly interpolated between the two parent patches; the coarse-tuning and formant vowel knobs are also blended, though this causes pitch "stepping" in the coarse tuning case — you probably want the parents' coarse tuning settings to match. The waveforms are also blended smoothly between the selections of the parents, though the knobs won't show it (because it's hard to describe "23% of the way between Hellacious and Boondoggle" in those little tiny text panels).

MIDI Controllers

Many MIDI controllers are automatically mapped onto Heartburn control parameters. Where possible, the mapping scheme assigns well-defined MIDI controllers to vaguely analogous functions in Heartburn, but many of the assignments are arbitrary. Since these assignments may not be the ones you want, most of these automatic mappings can be disabled by turning off the "MIDI CCs" button in the GUI, leaving controller mapping up to you and your VST automation host. Pitch Bend and Controller-7 Master Volume cannot be disabled in this manner.

MIDI Controller Heartburn Parameter Assign
Pitch Bend Pitch Bend (-2 to +2 semitones)
CC1 Modulation Wheel Morph Amount
CC2 Breath Controller Formant Depth
CC3 Controller Filter Tracking
CC 4 Foot Controller Filter Resonance
CC 5 Portamento Time Envelope 3 Attack Time
CC 7 Channel Volume Master Volume
CC 9 Controller Envelope 3 Decay Time
CC12 Effect 1 Filter Cutoff - Initial
CC13 Effect 2 Filter Cutoff - Peak
CC14 Controller Filter Cutoff - Sustain 1
CC15 Controller Filter Cutoff - Sustain 2
CC16 General 1 Filter Cutoff - Final
CC17 General 2 Formant Vowel - Initial
CC18 General 3 Formant Vowel - Peak
CC19 General 4 Formant Vowel - Sustain 1
CC20 Controller Formant Vowel - Sustain 2
CC21 Controller Formant Vowel - Final
CC22 Controller Dry Gain
CC23 Controller Filter Gain
CC24 Controller Formant Gain
CC25 Controller Envelope 3 Loop Time
CC26 Controller Envelope 3 Release Time
CC27 Controller Envelope 1 Loop Time
CC28 Controller Envelope 2 Decay Time
CC29 Controller Envelope 2 Release Time
CC64 Hold Pedal Oscillator A Damping
CC66 Sostenuto Oscillator B Damping
CC69 Hold 2 Oscillator C Damping
CC70 Variation Oscillator A Waveform
CC71 Harmonic Oscillator B Waveform
CC72 Release Envelope 1 Release Time
CC73 Attack Envelope 1 Attack Time
CC74 Brightness Oscillator C Waveform
CC75 Decay Envelope 1 Decay Time
CC76 Vibrato Rate Envelope 2 Loop Time
CC77 Vibrato Depth Oscillator A Vibrato
CC78 Vibrato Delay Envelope 2 Attack Time
CC85 Controller Oscillator B Tremolo
CC86 Controller Oscillator C Tremolo
CC87 Controller Oscillator C Detune
CC88 Controller Oscillator C Vibrato
CC89 Controller External Tremolo
CC90 Controller External Damping
CC91 Effect Depth FM Modulation Depth
CC92 Tremolo Depth Oscillator A Tremolo
CC93 Chorus Depth Oscillator B Vibrato
CC94 Detune Depth Oscillator A Detune
CC95 Phaser Depth Oscillator B Detune


Development Notes, Known Bugs, and Limitations:

I have not tested Heartburn extensively with any VST host other than Ross Bencina's AudioMulch.

I've successfully made noise with Heartburn in other hosts includion Orion 2.75, Orion 3, Renoise, Aodix, Chainer, and Cubase. As of this release, the only VST hosts I'm aware of problems with are:
• Psycle: Doesn't seem to make noise, I'm not sure why, but it doesn't seem to crash any more.
• Orion Pro 3: Works for me, but I've had a crash report from another user.

I welcome reports of either success or problems in any VST hosts provided that problem reports are more informative than "it doesn't work". I will be glad to explain how to write good bug reports if you like. Or even if you don't like. Unfortunately, at this time, I can't promise to even try to support wrapper solutions (such as running Heartburn within a DXi wrapper under a DXi host); there are just too many variables to deal with.

Throughout the documentation, I refer to FM or frequency modulation. In fact, it's all a sham, and Heartburn actually implements phase modulation. I use FM because that term is more widely recognized, and most people won't care about the difference.

Some effort has been put into avoiding aliasing noise; I believe that with no oscillator intermodulation (no ring modulation or FM enabled) and using only the 12dB/octave filters, alias noise should be inaudible. However, there will be some aliasing when overdriving the 24dB filters or using ring modulation or frequency (er, phase) modulation. I assume you aren't using Heartburn for its pristine, crystalline sound quality.


Heartburn Revision History:

v0.5 - Initial Release with default host interface.

v0.6 - Bug fixes, minor tweaks.
- Fixed various bugs that would cause it to crash when loaded into sensitive VST hosts.
- Reduced minimum attack-phase time to 5ms.
- Parameter labels shortened and changed to read better in most VST hosts.

v0.64 - Presets, fast-attack sync.
- Added 64 presets.
- Oscillators automatically sync if their attacks are sharp; this may enable punchier bass sounds.

v0.7 - Fixed vibrato bug.
- Vibrato wasn't working right in oscillators B and C.

v0.8 - FM, mix toggles
- FM features added.
- Oscillator mix toggles added.
- Problems in various hosts addressed.
- Lots of internal changes.
- Prototype, monophonic version with GUI available.

v0.85 - 2002/11/14 Morphology
- Morphing features added to GUI version.
- Fixed a bug with external input not working in Mulch.
- All filters reworked substantially. Resonance response curve altered; filter sweeps logarithmic (linear in perceived pitch) instead of linear in frequency; overdriven filters generate distortion.
- Many MIDI controllers automatically assigned.
- Lots of internal tweaks.

v0.86 - 2002/11/15 Bug Fix.
- Fixed a bug that prevented Heartburn working in some VST hosts including Psycle. I suspect this will fix problems with it in Cubase as well but cannot test at this time.

v0.87 - 2002/11/18 Filter Bug Fix.
- Filters were completely hosed in v0.85-v0.86. Sorry.

v1.0 - 2002/12/10 Shareware Release
- First shareware release of full GUI version.

v1.01 - 2003/1/10 UI fixes, improved presets.
- Button-lights now show correct state on startup (e.g. Mix A, B, C in default patch).
- Text displays match reality when not using Default preset.
- Presets 1-32 are improved (less bizarre).

v1.05 - 2003/1/12 48KHz support
- Should now be tuned properly in 48KHz sampling rate host configurations.


Terms:

Heartburn is available in a monophonic custom GUI demo version, a polyphonic host GUI demo version, and a polyphonic custom GUI commercial version. The demo versions may both be used freely. To use the commercial version, you must purchase a registration code.

DEMO VERSION: The demo version of Heartburn is free to take and use as you will. If you like it, or if you don't like it, please drop me an e-mail telling me so.

COMMERCIAL VERSION: A single purchased license for Heartburn creates one registration code which entitles one user or one household of users to use Heartburn on up to 5 computers. Registration codes are portable among machines; if you replace your hard disk, or motherboard, or buy a whole new machine, you can simply reinstall Heartburn and enter your name and registration code again. The license code will remain valid for all v1.x releases of Heartburn. The 1.x line of Heartburn will doubtlessly include several bug fix releases, and may include additional relatively minor features such as microtuning support. Tell me what you want and it might go on the to-do list.

I feel that the asking price for Heartburn is very reasonable. If you want to register the software, and you can't afford the price, why don't you e-mail me and tell me why you can't afford it, what you can offer me instead, and why I should make an exception for you? The worst that can happen is I'll say no.

If you make music with Heartburn, and make that music available to others, please tell me that the music is available. That means if you sell CDs of your stuff, you tell me how to buy a CD; if you let people download MP3s for free, tell me where I can do the same.

This software may contain bugs, errors and other problems that could cause system or other failures and data loss. Consequently, it is provided to you as-is, and I disclaim any warranty or liability obligations of any kind.

If you wish to redistribute the demo version of the software, please distribute it in its packaged .zip-file form, or another archive format, along with this documentation. Please do not redistribute the commercial version or any registration code for the commercial version.

You have the right to decompile, disassemble, reverse-engineer, and modify the software for personal research and for fair-use purposes such as adapting the software for interoperation with other systems. I don't believe that I can legally take this right away from you, though some large companies might try. If you'd like access to the source code, it's possible we can work something out; drop me a line.

You do not have the right to reverse-engineer or modify the program in order to violate my copyright on the software, e.g. to distribute a version with "the serial numbers filed off" or to bypass the registration code system.

Note to l33T h4x0rs: the registration code system in Heartburn is so incredibly easy to crack that there's no challenge in it and no bragging rights associated with doing so.


Legals:

Heartburn is copyright © 2001-2002 Russell Borogove.
http://www.estarcion.com/tinygod/tinygod.html

VST™ is a trademark of Steinberg Soft- und Hardware GmbH.
http://www.steinberg.net/

AudioMulch is copyright ©1997-2002 Ross Bencina
http://www.audiomulch.com/