Aurora FM logo
User Guide

Aurora FM Synthesizer

Most aspects of this synth should be familiar and self-explanatory to those knowledgeable in software synthesizers and FM synthesis. If you don't understand the basics of FM synthesis, there are vast amounts of resources pertaining to the fundamentals of FM synthesis available online. This documentation doesn't aspire to explain those concepts, and so there's an assumption that you understand the concept of carriers and modulators and the roles of the operator frequency and amplitude. Given that, a large part of the parameters and controls in this synth should be completely self-evident and there's little point in explaining them. The other things - those that aren't fundamental, aren't obvious, or are unique to this synthesizer - will be explained in this section.


Tip:Use the mousewheel and the modifier keys! The mousewheel is the ideal and intended way to use every control in Aurora FM, and the modifier keys do useful things.

GUI resizing
Ctrl+Shift+Scrollwheel increase/decrease GUI scaling in 5% increments from 50%-150%   (cursor must not be over a control)

LMB change value, coarse
Ctrl+LMB change value, fine
Scrollwheel increment/decrement value by smallest step
RMB reset to patch value
Ctrl+RMB zero the value
Shift+RMB set value to default

Selection Controls
selection control
LMB/RMB/Scrollwheel cycle through values

Envelope Copying
envelope drag and drop
Drag & Drop click on an envelope and drag and drop over another envelope to copy it

Envelope Points
envelope points
LMB change Time and Level, coarse
Ctrl+LMB change Time and Level, fine
Shift+LMB scale time of all subsequent stages simultaneously
Scrollwheel change Time, coarse
Ctrl+Scrollwheel change Time, fine
Shift+Scrollwheel change Level, coarse
Shift+Ctrl+Scrollwheel change Level, fine
RMB reset to patch value
Ctrl+RMB zero the value
Shift+RMB set value to default

Envelope Loop Controls
envelope loop
LMB set loop Start point
RMB set loop End point
Ctrl+LMB toggle envelope loop on/off
Key Scaling Controls
keyscale control
LMB, Scrollwheel change L-Scale / R-Scale / Breakpoint, coarse
Ctrl+LMB, Ctrl+Scrollwheel change L-Scale / R-Scale / Breakpoint, fine
Shift+LMB toggle L-Slope / R-Slope between linear and exp
RMB reset all five values to patch values
Ctrl+RMB zero all five values
Shift+RMB set all five values to default



Aurora FM Patches

Aurora FM stores and loads patches in .afm format. Specify a location where Aurora FM will store its patches by specifying the Patch Dir in the Settings dialog. Any patches in this directory will be loaded into the list of patches. When saving a patch, this directory is the default save location.

Yamaha DX7 Patches

Aurora FM also loads Yamaha DX7 .syx SysEx single patch and 32-patch bank files. As the Aurora FM synthesis engine is fundamentally completely different than the DX7, the patches are translated/mapped to corresponding Aurora FM parameter values using calculations based on publicized DX7 parameter ranges and implementation details. The patch translation is respectable but not guaranteed to be 100% optimal in all cases. Aurora FM will inherently never be an accurate emulation of a DX7 as that was never the intention - it is not a DX7 emulator. Aurora FM has a high-resolution 32-bit float engine employing completely proprietary calculations for all components. (However, if you have quantifiable information on how my translation efforts deviate from the ideal, please don't hesitate to get in touch with me. I would like to make the DX7 parameter translation as close to accurate as possible.)

By importing DX7 patches, Aurora FM opens you to the world of thousands of DX7 patches that have been created and circulated over the years. You can use them as-is, or tweak and extend them with Aurora FM's superior precision, modulation, and character.

If a .syx single patch or patch bank fails to load, it's most likely because the file isn't valid, but if you know that Aurora FM is failing to load a valid DX7 patch, please let me know and I'll investigate.

DX Bank

Show the DX Patch Bank dialog.


Load any valid DX7 single patch or 32-patch bank .syx SysEx file. If the file is valid and the patch bank is successfully loaded, the 32 patches will be displayed here and the first will be selected and loaded.

Select any patch using the list or the selector control on the main window. You can close this dialog and the bank will remain loaded.

Patch Name

An ASCII-only string up to 32 characters, as allowed by VST. If entering a space causes your transport to start and stop, try using Shift + space (this works in Reaper).


Refreshes the Patch List by scanning for new Aurora FM patches in the Patch Dir (only necessary when you change the contents of your Patch Dir outside of Aurora FM). Saving a patch to your Patch Dir automatically refreshes the list and adds the saved patch.


Resets the synth to whichever patch was previously loaded, discarding any changes made since then.


Save a new Aurora FM .afm patch file. Defaults to saving in your specified Patch Dir.


Loads an Aurora FM .afm patch file from somewhere other than your Patch Dir.


operator description


Operators can be turned on and off by clicking (LMB) the operator number control. On = operator on, Off = operator off.

The operator with Feedback, or in the case of a feedback chain, the operator that receives feedback and the operator that sends feedback, is/are marked in blue: operator with feedback.


Sets the operator's output level in terms of dB relative to full-scale for Carriers and Modulation Index (0 - 14) for Modulators.

Waveform Sync Phase

There are several options for the operator's oscillator waveform synchronization using the parameter Sync Ø : 0, pi/2, pi, 3pi/2, and None.

With a sync phase of 0, the oscillator will always start from phase 0 and thus generate a sine waveform. A phase of pi/2 is equivalent to a cosine waveform, and pi and 3pi/2 are the two other potential quadrants of a sine wave 90º apart. Finally, with a sync of None, the oscillator will continue running from whichever phase it previously ended on.

Frequency Mode

The mode for setting the oscillator's frequency can be one of: Ratio, Relative (Reltv), or Fixed.

Ratio and Fixed are standard in FM synthesizers. The unique Relative mode provides an alternate way of specifying a ratio in terms of semitones (s) and cents (c) relative to the key pressed. A relative value of 0s 0c is equivalent to a ratio of 1.0x, a relative value of +12s 0c is equivalent to a ratio of 2.0x, etc.

Modulation Polarity Mode

There are three different polarity modes for the modulation of an operator's pitch or amplitude: Bipolar bipolar, Monopolar monopolar, and Rectified rectified

Bipolar bipolar

For inherently bipolar mod sources like the LFOs, S&H, or ModEnv, the modulation occurs as you would expect. Modulation cyclically increases above and decreases below the current pitch/amplitude level.

If the modulation amount is positive positive mod , positive portions of the waveform are increases and negative portions of the waveform are decreases.

If the modulation amount is negative negative mod , this is reversed, so that positive portions of the waveform are decreases and negative portions of the waveform are increases.

For the ModWheel - which is normally considered to be monopolar, starting at 0% and only able to make increases - bipolar modulation means treating the ModWheel as if it's centered at the 50% point, so between 50% and 100% it gives a positive output and between 0% and 50% it gives a negative output. A positive modulation amount will reflect this, while a negative modulation amount will invert this.

Monopolar monopolar

For bipolar mod sources, instead of modulating above and below the current pitch/amplitude, the modulation range is shifted so that it's only an increase or a decrease. Positive modulation amounts are increases and negative modulation amounts are decreases.

For the ModWheel, this is the standard operating mode, since the ModWheel is typically considered monopolar.

Rectified rectified

In this mode, the source waveform is rectified - its negative portions are inverted to also be positive, just like how AC is rectified into DC. This mode makes the most sense with a Sine LFO wave (it will also essentially double the modulation rate), while it doesn't make much sense with a Square wave.

Modulation Range

The modulation range controls (range low, range med, and range high) are used for providing a usable granularity for selecting the amount of modulation you want - low, medium, and high. For pitch modulation, the range maximums are (+/-) 120 cents, 12 semitones, and 48 semitones. For amplitude modulation, the range maximums are (+/-) 6dB, 20dB, and 40dB. These range options allow for a different minimum increment amount for each range. Small modulations for vibrato are typically less than a few dozen cents and small tremolos might be a few dB, but heavy tremolo and wild effects may need dozens of dB or several octaves. If there was only a 48 semitone range and we wanted 1 cent granularity, there would be 4800 increments just for one polarity of the control, making it very difficult to quickly set a specific amount using the mouse and scrollwheel.


envelope desc modenv

The 6 operators' envelopes and the single modulation envelope (ModEnv) are very similar, with the only difference being that the ModEnv is a bipolar envelope (contains positive and negative poles) while the operator envelopes are regular monopolar envelopes.

The envelopes have six stages: Delay, Attack, Decay1, Decay2, Sustain, and Release.


Each stage with a varying level (this excludes Delay and Sustain) has the option of one of three slopes: Linear, Exponential, and Logarithmic.

Time Mode

The stage times are set as fixed times in the range of 0 ms to 20 s.


The stages are synced to the tempo and have times corresponding to any note length from one 32nd note to four whole notes.

* The Release Stage *

The Release stage is special and requires explanation:

  1. The Release level does not have to be 0 (-inf). If you set the Release level to a non-0 level, the envelope will hold at that level once it reaches it. You must understand the implications of this! For modulators, this isn't a problem, but for carriers, this will cause the voice to hold indefinitely and never complete.

    envelope release

    Also, you'll notice that setting the Release level to a non-0 level causes the Starting level at the Delay time point to be set to the same level. This means that after the Delay time has elapsed (if any), the level will immediately jump to the level set by the Release level and then the Attack stage will begin from that level.

    This functionality exists for compatibility with the Yamaha DX7, as that's how the DX's envelopes operate. You must use it at your own discretion and understand what's happening.

    To force indefinitely sustaining carriers to complete, you can toggle the operator off and on... but you probably shouldn't ever make use of non-completing carriers!

  2. The Release time, when set to Time mode (as opposed to Sync mode), isn't actually a fixed time, but rather it's a release Rate, with a value between 100 (fastest) and 0 (very slow). There are several reasons for this:

    release rate

    • The envelope can be at any level when the key is released, not necessarily just the Sustain level. Therefore the amount of level change that needs to happen during the Release is variable. By using a rate instead of a fixed time, release behaviour more closely matches the acoustic behaviour of real sounds. Most natural sounds decay at fixed rates and thus the decay times are proportional to the level - louder sounds take longer to decay, quieter sounds decay more quickly. Therefore the level of the envelope at the time of release will determine how long it actually takes the Release stage to complete.

    • This is how the DX7's envelopes operate. In fact, it's how every stage of the DX's envelope operates; but in this synth, only the Release is treated as a Rate while the other stages are treated as fixed times. This was necessary to preserve compatibility with the DX7. Since we cannot know in advance which level an envelope will be at when a key is released, it would be impossible to accurately predetermine the length of a Release stage, and thus it would not be possible to properly emulate the Release characteristics of a DX envelope. Only by preserving the intended Rate as opposed to pre-calculating a fixed time is it possible to maintain the same characteristics. The other envelope stages do not have this concern because their levels are known in advance and the stage times can't change based on things like when a key was released.


The envelopes are optionally loopable. Set the envelope loop start point and loop end point to any of the stage points. Changing a loop point will automatically turn on envelope looping. To toggle envelope looping on and off, Ctrl+LMB anywhere in the loop indicator.
envelope loop on Looping On.
envelope loop off Looping Off.

envelope loop desc

When an envelope loop spans the Sustain stage, the Sustain stage will be omitted. This behaviour is necessary to allow looping - without it, the envelope would hold at the Sustain level and never be able to actually loop. The envelope will only loop between the loop start and end points. A looping envelope will:

  • Run through the envelope, starting at the beginning as normal until it reaches the loop end point
  • Jump back to the loop start point and continue again towards the loop end point
  • Repeat this loop for as long as the key is being held
  • Proceed immediately to the Release stage once the key is released, and release as normal
Amplitude & Rate Scaling

Envelopes' Amplitudes can be scaled by Velocity and Key, and Rates can be scaled by these as well as an additional modulation source.


vel amp scaling       vel rate scaling

Use the Vel control in the Amp section to set the Velocity>Amp scaling, and in the Rate section to set the Velocity>Rate scaling.

The Velocity>Rate scaling has two different parameters, one for Velocity On (Vel) and a separate one for Velocity Off (V.Off). Release/note off velocity is a useful but often neglected MIDI performance control.

By setting this parameter to a positive value, the amplitude will increase and rate will increase (the envelope will progress through its stages more quickly) as you play the key with more velocity, and they will decrease as you play with less velocity. By setting this parameter to a negative value, this effect is inverted - higher velocities result in lower amplitudes and slower rates, and lower velocities result in higher amplitudes and faster rates.

The midpoint velocity value is 64. Velocities greater than this are considered positive and below this are considered negative.


key amp scaling       key rate scaling

The Key scaling controls have a bit more depth. With these controls, as opposed to having a single value, there are five separate parameters:

  • Breakpoint Key
  • Left Amount and Right Amount
  • Left Slope and Right Slope
Breakpoint Key

Sets a key that splits the key range into two halves. The keys left of the breakpoint will get one amount of scaling, and the keys right of the breakpoint will get another amount of scaling.


By setting a positive amount for that side of the split, you are increasing the amplitude or rate of the envelope for notes as they get further away from the breakpoint, and by setting a negative amount for that side of the split, you are decreasing the amplitude or rate of the envelope for notes as they get further away from the breakpoint.


The scaling can be applied with a linear slope or with an exponential slope.

Extra Rate Mod Source
rate mod source

An additional modulation source can be used to scale/modulate the envelope rate, and different scaling amounts can be applied to stages that increase (Atk) and to stages that decrease (Dcy) in level.


mod source info

There are four primary, complex modulation sources - two LFOs, one Sample-and-Hold generator (S&H), and one Modulation Envelope (ModEnv) - as well as three scalar modulation sources: Velocity (On and Off), Key, and the ModWheel.

Waveform (LFO)

Sine, Triangle, Square, Saw Up, Saw Down

Source (S&H)

LFO1, LFO2, ModEnv, Random

Voice Modes

The primary mod sources operate in one of two modes: monophonic (shared by all voices) or polyphonic (each voice has its own). Additionally, these mod sources can be perpetually free-running or they can be reset each time a new key is played.

Thus, there are three Voice Modes: mono reset, mono run, and poly reset.

Mono Run

The mod source is shared by all voices. Its waveform is started/reset to the beginning when 1) the patch is changed, or 2) the transport in your sequencer is started, and it will continuously free-run from then on.

Mono Reset

The mod source is likewise shared by all voices, but instead of perpetually free-running, it will be reset to its starting point each time a new key is played. The waveforms of the LFOs always start by going positive first as expected.

Poly Reset

Each voice has its own instance of the modulation source. When a key is played, that voice's modulation source begins running from its starting point and runs until the voice finishes.

Rate Mode

The mod source rate is set as a frequency in the range of 0.1 Hz to 60 Hz.


The mod source's rate is synced to the tempo and has a frequency corresponding to the period of any note length from one 32nd note to four whole notes.


The Delay parameter for the LFOs and S&H determines how much of a delay there is before the mod source outputs its full amplitude to the voices. Note that in the case of resetting, the reset always happens when the key is pressed and the delay time does not affect when the reset occurs. Furthermore, when the delay parameter is used, the mod source doesn't immediately kick in after the delay expires; instead, the mod source's amplitude will ramp up for up to one second before the delay time ends. So for example, if the delay time is 0.5s, the modulation output will immediately begin ramping up and after 0.5s it will be at full amplitude; if the delay time is 2.1s, there will be no mod source output for 1.1s, and then its output will ramp up from 1.1s to 2.1s and be at full level after that.

When the input source of the S&H is either of the LFOs, the LFO's Delay time is ignored and the S&H output is governed by its own Delay parameter.

Amplitude Scaling
(MW & Vel)

MW>Amp controls the ModWheel>Amplitude scaling. At 0, the ModWheel has no influence on the mod source output (amplitude). At 100, the mod source amplitude is fully governed by the level of the ModWheel, so if the ModWheel's at 0% then there will be no mod source output, and as the ModWheel is moved up to 100% the amplitude of the mod source will likewise increase to its full amplitude. For amounts between 1 and 99, there will always be some mod source output regardless of the position of the ModWheel and the ModWheel will only control a portion of the mod source's output level. With negative values, this effect is inverted, so at -100 the mod source output will be maximal with the ModWheel at 0% and it will decrease to nothing as the ModWheel is moved up to 100%.

Vel>Amp is fundamentally the same but it operates on the Velocity of the key played. With a positive modulation amount, the higher the velocity of the note, the higher the output level of the mod source. With a negative modulation amount, this effect is inverted.

Smoothing (S&H)

Output from the LFO's is band-limited / smoothed to avoid nasty artifacts when modulating a parameter directly tied to the audible signal (example: the sharp transition of a non-band-limited square wave introduces an audible tick when modulating an operator's amplitude). However, the Sample and Hold takes the UNsmoothed output from the LFO's as its input. The Smoothing control allows you to choose how much or how little smoothing you want applied to its signal sampling.



The effects section is applied in series in the order Overdrive > Chorus > Delay > Reverb to the summed output of the synth voices, before the master output level.


A simple progressive peak-reduction overdrive effect with a single Level (OD) parameter.


The rate of the LFO that modulates the length of the chorus's delay.


The depth to which the chorus's delay length is modulated by the LFO.


Either a fixed time from 0.02s to 5.0s, or a tempo-synced time from one 32nd note to four whole notes.
(Note: the longest note sync option available will depend on the host tempo and the maximum delay time of 5s).

Feedback (Fdbk)

Controls the delay's feedback gain and thus the number of delay repetitions. A Feedback of 100 will repeat indefinitely.


The level of the Delay effect (pre-Master output level).


The length of the reverb decay. Non-quantified RT60 - you'll need to set by ear.


A classic tone tilt control. Negative values attenuate the high frequencies and positive values attenuate the low frequencies.


The level of the reverb effect (pre-Master output level).


Off: Reverb is off.

Mix: Reverb is on. Normal. The dry signal mixed with the wet reverb signal.

Wet: Reverb is on. Only the wet reverb; the dry signal is omitted.

bit depth and dither

Post-master output level output bit depth reduction and dithering.

Bit Depth

8 - 24 bit output. 24 is actually a misnomer: it's the full, unrestricted dynamic range of the synth engine. At 23 and below, the output is truncated to the specified bit depth.


Off/On. No effect when Bit Depth is 24. Otherwise, filtered random noise dither is applied to the truncated output.


performance controls       performance controls

Voices Mode

Polyphonic mode, 20 voices. Voice-stealing of oldest voice in its Release stage.


Monophonic mode. Envelope of new note begins at level of interrupted note.


1-3 voices. 2nd and 3rd voice are slightly lower in amplitude and don't use oscillator phase syncing, which helps make a fatter sound and slightly reduces annoying beating.


0-50 cents. With just a 2nd unison voice, its pitch is this amount sharper than the primary voice, which is always perfectly tuned. With both a 2nd and 3rd unison voice, this detune amount is split between the additional voices, one sharper and one flatter than the primary voice.


This effect works best in Mono mode. In Poly mode, since portamento glides from the voice's previous note's pitch to the new note's pitch, the effects are rather unpredictable.




Portamento always in effect.


Only applicable to Mono voice mode. Portamento only applied if a note is being held/sustained when the new note is played.


The rate of the portamento effect, not a fixed time. At any given rate, the larger the distance between notes, the longer the duration of the glide.
Approximately 1s / octave at Rate 0 and 1ms / octave at Rate 100.

Pan, Pitch Bend Range (P Bend), Transpose (Txpose), and Tune should be pretty self-explanatory.

Mod Section

mod matrix

These are the additional parameters that can be modulated. The modulation targets placed here can be modulated by any of the different available modulation sources (when applicable).


The source of the modulation for the target; potentially one of: None, LFO1, LFO2, ModEnv (Env), S&H, ModWheel (MW), Key, or Velocity (Vel).

Modulation Amount

The intensity and polarity/direction of the modulation - the range over which the target parameter's value will change depending on the modulation source's output.

Positive modulation amounts - cause positive mod source output values to increase the target parameter's value, while negative output values decrease the target parameter's value.

Negative modulation amounts - the inverse effect - positive mod source output values will decrease the target parameter's value, while negative output values will decrease the target parameter's value.

Modulation Basics

A primer for beginners. You probably know this already. Included for thoroughness.

  • The primary modulation sources (LFO's, S&H, ModEnv) have continuously-variable bipolar output values that change over time.

  • Key and Velocity are scalar values that stay constant for their duration.

  • The ModWheel is controlled directly by the user and can thus be fixed or continuous.

For continuously variable mod sources, they will affect the modulation target continuously, increasing or decreasing the mod target's value continuously within its modulation range over time. Scalar mod sources will just increase or decrease the mod target's value to the extent set by the modulation amount and keep it there.

With a small modulation amount (range) set, the mod target's value will only increase above and/or decrease below its starting/unmodulated value a little bit. As the modulation amount is increased, this range grows larger and larger. With the modulation amount at 100%, the mod target's value can deviate between its minimum and maximum possible values (either fixed or continuously depending on the type of modulation source).


mod matrix details mod matrix details

Additional Details

mod matrix

To understand a few things about the mod section that might not seem obvious at first glance, one has to understand the difference between synthesis parameters & concepts that are polyphonic and ones that are monophonic.

Pan is a good example of a polyphonic parameter. Each voice can be placed anywhere in the stereo spectrum independently of any other voice. Thus panning is a concept that makes sense with regards to polyphony, and Pan is a polyphonic parameter - making it a polyphonic mod target. The same goes for Feedback and Unison Detune. There's nothing stopping each voice from having its own values for Feedback amount and Detune amount separate from every other voice, if the synthesis engine supports that, and this one does; therefore, these parameters have likewise been made polyphonic in this synth. As a result, these mod targets can be modulated by all of the modulation sources - LFO1, LFO2, S&H, ModEnv, Key, Velocity, and ModWheel.

On the other hand, it doesn't make sense for parameters pertaining to the global effects to be able to have different values on a voice-by-voice basis, and in the case of this synth, they cannot. The output of all the voices is summed together and then passed through the Delay and Overdrive effects. There is no concept of voices and polyphony by the time we get a summed signal to the effects section. This would be true for any parameters pertaining to parts of the synth that are inherently monophonic, meaning they're not in the context of individual voices. Thus these parameters are monophonic mod targets, which cannot be modulated by polyphonic mod sources. The polyphonic mod sources are Key and Velocity. So Overdrive Level, Delay Level, and Delay Feedback can be modulated by a mono LFO, mono S&H, mono ModEnv, or the ModWheel, but can't be modulated by Key or Velocity.

One of the implications of this is that if the voices are using the LFOs, S&H, or ModEnv in polyphonic mode, and there's a monophonic mod target using either of those complex mod sources for its modulation, the monophonic mod source will be run as well, in addition to the polyphonic mod sources that are run for the voices.

What about the other mod targets? LFO1 Rate, LFO2 Rate, and S&H Rate are both monophonic and polyphonic mod targets. The mod sources themselves come in both monophonic and polyphonic variants. An LFO can either be a Voice's very own LFO (polyphonic), or it can be the single shared LFO (monophonic) that is globally usable by polyphonic and monophonic components alike. A polyphonic mod source's Rate parameter is thus a polyphonic mod target, and it can be modulated by any of our modulation sources. But what about the monophonic mod sources' Rate parameters then? Can they be modulated by polyphonic mod sources? That wouldn't make sense, would it? And to that I say, those are very good questions! See, this is one of the things that get complicated when you get into the guts of synthesis modulation and UI development and usability and try to find the balance between the implementation of complicated principles and the presentation of those principles which should make sense and not need a bunch of explanation or provide the appearance of inconsistency or of revealing too much complexity. And in this case, there really isn't a great way to deal with it.

I could've listed the LFO1, LFO2, and S&H Rate mod target parameters twice, once for the polyphonic variants, with inclusion of Key and Velocity for the sources, and again for the monophonic variants, this time without the inclusion of the Key and Velocity sources, but that would've been incredibly ugly, awkward, and people wouldn't easily understand why it was that way. That would be a terrible design choice. On the other hand, I could've just used the one entry for those targets, included the Key and Velocity mod sources, but ignored the selection of those mod source inputs when calculating the Rate of the monophonic LFOs or S&H or ModEnv, but that's not a great solution either. People would wonder why the Rate of the Overdrive Level's LFO1-source modulation wasn't any different between the lowest note and the highest note, even though they had LFO1's Rate parameter getting affected by Key at 100%, and that's no good either. In the end, the only solution is to explain how this stuff works and get people to understand what's happening at an implementation level, so here you go. So what does happen to a mono LFO's Rate when you modulate it with Key or Velocity? It uses the Key value or Velocity value of the most recently played note. Tada! Weird, but not horrible. It may even work and make sense in some patches. But for the most part, expect the Rate modulation by Key or Velocity to make more musical sense with polyphonic LFOs than with monophonic LFOs.

Techie Stuff

Aurora FM is non-bandlimited. It's entirely possible to create nasty aliasing with high modulation indexes (modulator amplitudes) or the modulation of high frequency modulators or carriers. It should be totally possible to get the high frequency content you want without being impeded by aliasing though. The control is entirely in your hands. You can determine your own threshold for how much aliasing is acceptable. By not performing any band-limiting, there aren't any potentially limiting constraints placed on the frequency modulation, with the trade-off being that you're given enough rope to potentially shoot yourself in the foot. Hey, at least I'm being upfront about it; no point in tiptoe-ing around the issue...

As mentioned previously, the LFO's ARE band-limited. This is absolutely mandatory for having square waves and saws that can be used to modulate amplitude, pan, effect levels, and other directly audible output signal-affecting parameters without horrific ticks and distortion artifacts.

The sine generators use approximate sine routines with very low error - about -85dB average error and -75dB worst case error. You will see some very low level harmonics on a spectrum analyzer.

Yes, the overdrive effect aliases. That sucks, I know. I plan to research an alternative overdrive design at some point if I get the chance... Obviously you'll use a better overdrive when it matters.

I'm neither a DSP expert, a digital overdrive expert, or a reverb expert. And yet, I think the reverb's pretty decent! I'm kind of happy with the results of my first crack at such a thing. Of course it could be better, but for the time being it's good enough for an included reverb. Obviously, if you want a better one, you'll choose to forego mine and use a different one.

Things I want to add, if given the opportunity (ie. I can make enough from sales to avoid destitution...):

  • Alternative tunings / microtunings - the precision of FM sure shines a huge bloody spotlight on the flaws of equal temperament, doesn't it?
  • Additional waveforms
  • Arpeggiator
  • Step sequencer / step modulator
  • Morphing - define A/B parameter values on any desired parameters for user-controlled morphing between them
  • Oversampling engine
  • And then some silly fantasies like creating a full suite of patches for GM "compatibility" (although the percussion channel and monotimbrality could be problems... :‑P)