ForTran is a genuine polyphonic instrument: no audio input, one stereo output, sixteen voices and 145 parameters. It was written in 2003 as a Cakewalk DXi in Visual C++ 6 and MFC; this is that plug-in on macOS, built from the original sources, reproducing the DSP sample for sample except where a deviation is deliberate and recorded.
You can report bugs or request features on the project’s GitHub issues page.
New in 1.3.1.0
High notes no longer alias. Like the 2003 DXi, ForTran summed all ten partials whatever the note, so on high notes the upper partials went past the Nyquist frequency and folded back as tones outside the harmonic series. At 48 kHz that started at D♯7; at C8 the fold was only 5.9 dB under the fundamental, and with the ladder in, at G8, it was louder than the fundamental. Each partial now fades out over the last 5 % below Nyquist and stops above it, judged on every sample, so a pitch bend across the line fades rather than clicks. The worst fold is now −150 dB or lower, and the live partial bars show the fade.
- Below about C7 nothing changes. Renders of C4, C6 and C7, with the ladder, a harmonic LFO and a bend, are byte-identical to 1.3.0.0.
- Output Level at the bottom is exactly silent: its smoother now lands on zero instead of hanging just above it.
- Flush-to-zero on the audio thread. Each processing block runs with the CPU's flush-to-zero mode on and puts the host's setting back afterwards, so a signal decaying towards silence can never slow the plug-in down.
Parameters, presets and saved projects are exactly as in 1.3.0.0. Only notes high enough to have been folding sound different, and they now sound as they should.
New in 1.3.0.0
A new panel. The window is now a black instrument panel, 1200 × 640: knurled knobs with printed scales, rotary switches, red jewel lamps and small colour screens, lettered throughout in a 70s sci-fi face, with a light worn finish. Nothing in the sound or the parameters changed, so projects and presets from earlier versions open as they were.
- Every partial at once. The partial bank shows all ten partials' level, phase, invert and envelope switch together. Click a numbered ring (or ‹ ›) to put that partial's envelope and harmonic LFO in the PARTIAL box; Copy n to all copies that box to the other nine.
- Values on the panel. Each knob's value is printed under it. Hovering still shows the full name and value; Alt-click or double-click a knob to return it to its default.
- Live screens. While a note sounds, the partial bars show what each partial is really putting out, with the output waveform faint behind them; the filter screen's dots slide along the response as the filter envelope sweeps; the amp and partial envelopes carry a playhead; a voice meter in the header counts the sounding notes.
- The harmonic LFOs are on the panel. The pop-up is gone: drag one of the ten rings up or down for depth, sideways for rate. They now also follow their controls on notes already sounding — the one setting that does; everything else is still taken when a note starts, as in the original.
- The filter envelope's knobs are full size, and the header shows when the copy you are running was built.
- Automation records cleanly: moving a control now tells the host where an edit starts and ends.
New in 1.2.1.0
The maker is now “AE Cobley”, in both formats — it was “A. E. Cobley”. REAPER files an Audio Unit's presets under its name cut off at the first full stop, so every A. E. Cobley Audio Unit shared one REAPER preset list and showed the others' presets, which did nothing when chosen. The plug-in's identity codes are unchanged, so projects saved with earlier versions still open with ForTran in place. Hosts that list plug-ins by maker now show it under AE Cobley.
The factory presets now install to
/Library/Audio/Presets/AE Cobley/ForTran, the
folder both formats now look in.
The version is reported correctly. Earlier builds told hosts they were 1.0.0.1 (VST3) and 1.0.0 (Audio Unit) whatever the release; this one says 1.2.1.0. Nothing in the sound changed.
After upgrading, some things stay where earlier versions left
them. The installer does not remove the old factory preset
folder, /Library/Audio/Presets/A. E. Cobley/ForTran;
nothing looks there now, and
sudo rm -rf "/Library/Audio/Presets/A. E. Cobley/ForTran"
removes it. Presets you saved in a host that files them
by maker are in
~/Library/Audio/Presets/A. E. Cobley/ForTran
— move them to
~/Library/Audio/Presets/AE Cobley/ForTran to see them
again. In REAPER, Audio Unit presets you saved earlier stay in its old
shared list; the VST3 is unaffected.
New in 1.2.0.0
Thirteen factory presets
The installer now offers a third component alongside the VST3 and the Audio
Unit: thirteen patches, in
/Library/Audio/Presets/AE Cobley/ForTran (in
A. E. Cobley/ForTran until 1.2.1.0).
Alone inspace, Bonk, Fortran-Init,
Fortran-band, bells phew, dronestar,
filtered bass, growing,
phew its a ghost, sitar, tesla coil,
twang and weird piano.
One folder serves both formats. The VST3 and the Audio Unit
each read that same path, and the .vstpreset and
.aupreset pair for a patch carry identical state — so a
preset sounds the same in Logic as it does in Cubase, rather than drifting
into two versions of itself.
Three of them were saved before pan and portamento existed, and load with those two at their defaults: centred, and no glide.
Removing them is manual. A .pkg installs but
never uninstalls, so the factory folder stays until you delete it:
sudo rm -rf "/Library/Audio/Presets/AE Cobley/ForTran", and
for a version before 1.2.1.0
sudo rm -rf "/Library/Audio/Presets/A. E. Cobley/ForTran".
Anything you saved yourself lives under your own
~/Library/Audio/Presets and is untouched by that.
New in 1.1.0.0
Portamento, and it is properly polyphonic
The Glide knob at the bottom right of the panel sets the time. Zero is off, and that is the default, so nothing saved before this sounds any different.
Each new note glides from the nearest pitch of the chord that was sounding when the current chord began, and each of those pitches is used once — so C–E–G to D–F–A is three glides of a tone moving in parallel, rather than three notes fanning out of whichever pitch happened to be last. Notes struck within 30 ms of each other count as one chord; further apart than that and each note glides from the one before it, which is what a played line wants.
The glide is constant time — every glide takes as long as the knob says, whatever the interval, so a chord change arrives together — and even in semitones, so an octave down sweeps at the same rate as an octave up. The knob is squared like the envelope times: its centre is 500 ms of a two-second maximum.
Universal binary. 1.0.0.1 was built for Apple Silicon only while its installer claimed both architectures, so on an Intel Mac — or in any host running under Rosetta — it installed cleanly and then loaded nothing. This build is arm64 + x86_64. If you tried 1.0.0.1 and ForTran never appeared, that was why.
Installing over an earlier version replaces it; your projects and their settings are untouched.
The sound
Per sounding note, per sample:
- Ten sine partials at
k × theta, k = 1..10, each with its own level, phase offset, invert switch and its own ADSR — the formant envelopes, ten of them. - A spectral filter with four independently switchable shapes — low pass, high pass, comb and grass — swept by a filter envelope and applied as a magnitude and a phase per partial.
- An amplitude envelope, a tremolo LFO on level and a vibrato LFO on the phase step.
- A per-harmonic amplitude LFO, rate and depth for each of the ten. The DXi allocated the state for this and never wrote to it; here it is finished.
- A fixed Moog ladder on the way out, switchable, with a level-matched bypass.
Then sixteen voices mix to one stereo bus through the output trim and pan.
Two things the measurements say and the name does not
The ladder is mostly a gain stage. Its cutoff and resonance are hardcoded: the corner sits at 0.198 × Nyquist and the resonance at +0.22 dB, so below about B4 it is a flat +10.6 dB gain stage and nothing else — and its corner moves with the sample rate.
The Level knob starts 20 dB down. The DXi's own gain staging is hot enough to clip a dense chord, so the Level trim defaults to its centre. The top of that knob's travel is exactly the 2003 level, so nothing is lost — it is one turn away.
Using it
Since 1.3.0.0 the panel is a black instrument panel in five boxes. (Up to 1.2.1.0 it was the DXi's own, at the true size of its 840 × 388 backdrop.)
- PARTIALS — a bar graph of the ten levels over ten columns of controls: level and phase knobs, an invert lamp and an envelope lamp for each partial. Click a numbered ring to select that partial.
- PARTIAL — the selected partial's formant ADSR, level, envelope switch and harmonic LFO rate, depth and invert, with its envelope drawn live. ‹ › step through the ten, and Copy n to all copies the box to the other nine. Which partial is selected is editor state, not a parameter.
- SPECTRAL FILTER — rotary selectors for the four shapes (low pass, high pass, comb and grass, each Off / Add / Mult / Max), cutoff, Q, poles and envelope level, the filter envelope, and a live response screen.
- AMP — the amplitude envelope, Level, Pan, Glide and the Ladder switch.
- MODULATION — vibrato and tremolo rate and depth, and the ten harmonic LFOs as rings: drag up or down for depth, sideways for rate (Shift for fine, the wheel for depth, Shift-wheel for rate).
- A lit red lamp is on. Values are printed under every knob; hovering shows the full name and value.
- Knobs drag vertically, Shift for fine, and the wheel works; Alt-click or double-click returns one to its default.
MIDI
Note on and off (velocity zero is a note-off), pitch wheel — the DXi's law is a whole octave either way, not two semitones — CC7 channel volume on a square-root law, and CC10 pan. The Pan knob is new and offsets CC10 rather than replacing it: centred, CC10 behaves exactly as it did before the knob existed.
Not carried over
The DXi's multi-output pins, the dead Synth/Xform mode switch, the audio-input passthrough (an instrument has no input), and program change selecting the oscillator waveform — this port is sine partials only. In the DXi the MIDI patch number chose sine, square or saw.
Known gaps
- The output ladder's corner moves with the sample rate. Its coefficients are constants the original never scaled, so the same patch is more than an octave brighter at 96 kHz than at 44.1 kHz. Reproduced rather than fixed; the Ladder switch takes it out.
- Glide time is latched at note-on, like everything else a voice reads, so moving the knob does not retime a glide already under way.
One partial, opened up