Skip to main content

Announcing Canvas

Canvas (working title) is a visual additive synthesizer for Windows, macOS, and Linux where you can create sound by drawing an image. This is accomplished with a bank of 239 oscillators spaced at quarter tones, with stereo amplitudes mapped to the red and blue channels of the image. You can import images and sonify them, you can import sounds and convert their spectrograms to images, and you can apply several image filters like reverb, tremolo, and chorus. Check out the demo:

Canvas is directly inspired by the Image Synth from U&I Software’s MetaSynth. When I first heard of MetaSynth, I wrote it off as a gimmick that could only produce sweeps and whooshes. It wasn’t until I heard Benn Jordan’s recent demo and learned of its powerful set of image filters that I was immediately sold on the approach. I decided to build an alternative that’s just featureful enough to yield musical results, a sort of MS Paint to MetaSynth’s Photoshop.

Canvas has a lot of rough edges, and currently requires building from scratch if using Linux or macOS. Nevertheless, I hope it is of some interest to the music tech community.

A Survey of Nonstandard Oscillators

This is a collection of synthesis algorithms that meet the following criteria:

  1. They must synthesize pitched tones — periodic or quasiperiodic waveforms.

  2. I can include or exclude anything at my arbitrary discretion. I’m biased towards algorithms that are parametric rather than data- or sample-driven.

Algorithms that meet these criteria and fall outside of the typical cuisines of subtractive, FM/PM, wavetable, and additive synthesis are what I call nonstandard oscillators, hence the title. An earlier version of this post left it at just nonstandard oscillators, but I’ve also added in the more vanilla ones for comparison.

Many of these descriptions are intentionally brief, and I add detail only if I feel I have something useful to add or if the topic is particularly obscure. Many algorithms overlap, some are generalizations of others.

As a word of caution, inexperienced and information-hungry computer musicians find nonstandard synthesis methods particularly attractive because FM and subtractive have gotten too “basic” for them. (This is autobiographical here.) If you’re tired of “standard” synthesis methods, you haven’t spent enough time with them — FM and subtractive are capable some incredibly far-out and alien sounds, many yet to be discovered. I do encourage you to try out the wilder methods here, but nonstandard synthesis is not a panacea that will make your sound design good. Only practice can make your sound design good.

Last updated: 2024-01-17.

Read more…

IXA Synthesis

Vintage synth hacker and generative electronic music producer acreil, a.k.a. Scott Nordlund, posted a video breaking down a PD patch he made. Go watch it now. Of the delightful DSP tricks to be found within, the most delightful to me is his review of the Casio CTK-1000, and the unearthing of its synthesis method.

The Casio CTK-1000 is a 1993 sythesizer and rompler whose manual boasts a new type of synthesis called “IXA Sound Source,” distinguished from phase distortion synthesis from the CZ series and “interactive phase distortion” or iPD from the Casio VZ series. These are largely ways of getting around Yamaha’s all-dominating FM synthesis patents.

Nordlund dug up Casio’s patent US5164530, and while we have no way of telling what’s really inside the CTK-1000, the document gives us useful clues. (There are three other patents, but none of them seem to contain much interesting information beyond this one.) The patent describes a phase modulation synthesis method where the carrier is a triangle wave and the modulator is a sine wave. However, the intrinsic phase of the triangle wave is distorted with a weird waveform made of sine wave segments such that a sine wave is produced if the modulation index is zero. Here’s a block diagram:

A block diagram of IXA synthesis. To the left, an input signal labeled "W(t) oscillator" has an upward sawtooth shape but with some gentle oscillations in the slope. From the bottom, an input signal labeled "sin(2 pi t * ratio)" is multiplied by an "index." The input signal and the weird oscillator are added together and piped into a triangular waveshaper to produce the output signal.

and a closer look at the weird waveform:

A graph of a single period of the weird waveform. The time axis ranges from 0 to 1 and the output from 0 to 4. The graph has an upward slope and consists of four quarter-sine wave segments. It has saddle points at t = 0.25 and t = 0.75, and an inflection point at t = 0.5.

For readers who prefer a more formal description, define a pulse wave \(\Pi_x(t)\) as a function with period \(x\) such that \(\Pi_x(t) = 1\) if \(0 \leq t < x / 2\) and \(\Pi_x(t) = 0\) if \(x / 2 \leq t < x\). Define a triangle wave \(\Delta(t)\) as a function with period \(4\) such that

\begin{equation*} \Delta(t) = \begin{cases} t & 0 \leq t < 1 \\ 2 - t & 1 \leq t < 3 \\ t - 4 & 3 \leq t < 4 \\ \end{cases} \end{equation*}

Then the weird waveform \(W(t)\) with period \(1\) is defined as:

\begin{equation*} W(t) = (2 \Pi_{1/2}(t) - 1) \sin\left[2\pi\,\text{mod}\left(t, \tfrac{1}{2}\right)\right] + 2 \Pi_{1/2}\left(t + \tfrac{1}{4}\right) + 2 \Pi_1\left(t + \tfrac{1}{2}\right) \end{equation*}

An IXA oscillator with period \(1\), index \(n\), and ratio \(r \in \mathbb{N}\) is defined as:

\begin{equation*} \text{IXA}(n, r, t) = \Delta\left( W(t) + n \sin(2 \pi r t) \right) \end{equation*}

It can be seen that \(\text{IXA}(0, r, t) = \sin(2 \pi t)\), i.e. turning off the modulator results in a sine wave.

IXA synthesis, as it could be called, produces unique buzzy waveforms with a deep and growly sound even with low index:

It sounds a bit like wavefolding. Classic two-operator sine wave FM, by comparison, sounds more muted when the index is low and squelchy when the index is high:

Here’s a spectrogram of partials for IXA with ratio set to 1:

A plot labeled "IXA Synthesis Spectrogram (ratio = 1)." The X-axis is modulation index, ranging from 0 to 10, and the Y-axis is harmonic, ranging from 1 to 20.

Here is two-operator FM synthesis with sine waves for comparison. Note the change of scale in the X-axis – FM requires a higher modulation index to achieve sounds comparable in brightness to IXA.

A plot labeled "FM Synthesis Spectrogram (ratio = 1)." The X-axis is modulation index, ranging from 0 to 20, and the Y-axis is harmonic, ranging from 1 to 20. It looks a little smoother than the IXA synthesis spectrogram.

The amplitude scale is linear in both graphs. Notice how the FM synthesis, whose harmonics follow one of the Bessel functions, has a sort of “resonance” at increasing even harmonics and quickly drops off to near-zero above that. IXA synthesis produces smoother spectra with less obvious resonance, and if you look closely there is some high-frequency fuzz above the dropoff.

IXA also works with non-integer ratios, but to me these sound harsh, like a bell FM patch run through nonlinear distortion:

Slight detuning of the modulation frequency, however, produces a pleasant beating effect.

The patent also touches on some variations. One is to pick a different \(W(t)\) so it no longer produces a sine wave when the modulation index is zero. I have experimented with this a little, but haven’t gotten anything good out of it. Another, more interesting, option is to open up the modulator to be the output of another IXA synthesis oscillator, or the output of the current oscillator in a feedback configuration. Chaining two or three IXA oscillators seems to automatically produce brostep bass waveforms, but I’m not sure if it’s useful for much else:

The way I see it, three or more operators are useful in FM to access richer sounds, but a single IXA operator is already complex enough and additional operators are limited in use.

Generally, anywhere FM or PM is used, it’s worth trying to substitute IXA to see how it sounds. For example, IXA produces formant-like results when setting a high modulation ratio, so FM vocal synthesis may apply to IXA as well.

SuperCollider code

Here’s a function you can copy-paste into your own SC patches:

// Public Domain

(
var ixa;

ixa = { |freq, in, index|
    var phase, waveform, snd;
    phase = Phasor.ar(Impulse.ar(0), freq / SampleRate.ir, 0, 1);
    waveform = (phase % 0.5 * 2pi).sin * (2 * (phase % 0.5 < 0.25) - 1);
    waveform = waveform + (2 * (phase % 0.5 >= 0.25));
    waveform = waveform + (2 * (phase >= 0.5));
    snd = (waveform + (in * index)).fold2;
    snd;
};

{
    var freq = 100;
    ixa.(freq, SinOsc.ar(freq), Line.kr(0, 10, 3)) * 0.5 ! 2;
}.play(fadeTime: 0);
)

Circular Membrane Modes

Just as the modal frequencies of an ideal string produce the overtone series, other ideal acoustic objects such as circular membranes produce their own sets of frequency ratios that we can think of as “non-Pythagorean overtone series” from an alternate universe. Like the classical overtone series, they arise naturally from physical laws and produce an infinitely ascending microtonal chord. These modal frequencies are found in physics textbooks, but I haven’t seen musicians talk about them much, nor anyone represent them in music notation like we do the standard overtone series.

Modal frequencies of a circular membrane are labeled by two mode numbers, overall forming a two-dimensional grid of frequency ratios rather than a linear series. For example, the lowest mode of a circular membrane is traditionally notated “0,1”. Just as the first and lowest classical overtones are the important ones, it’s mostly the low mode numbers that receive much attention from mechanical engineers. In the below charts, these are the tones in the upper left region.

I’ve notated the frequencies here on three levels. Read the note head position and sharp/flat/natural for the nearest 12ET pitch, and the up/down arrows indicate 50-cent alterations to a finer 24EDO approximation. The fearless can ignore all arrows and read the signed numbers for the cent deviations from 12ET (not 24EDO!). Modal synthesis decouples fundamental frequency from frequency ratios, so the choice of C2 as fundamental is arbitrary, and all charts are transposable without affecting their faithfulness to the physical model. Try them out on your instrument of choice – even the crude 12ET approximations generate some lovely chords that remind me a little of Morton Feldman.

Click the screenshot below to download a PDF version.

Sheet music showing a two-dimensional grid of microtonal pitches titled "Modes of a Circular Membrane."

Is there anything perceptually important about this series? I don’t think so. You could replace these chords with random pitches, and the results would likely sound similar to an average listener. But as a demonstration of complex microtonal harmonies arising from first principles of acoustics, I think it’s conceptually compelling and a fruitful source of harmonic inspiration.

Venn 7

I have released Venn 7, a little artistic Web app that turns symmetric 7-fold Venn diagrams into a musical interface. Click the screenshot below to visit the app, which also has an attached explanatory article.

A symmetric 7-fold Venn diagram labeled "Victoria" with a pink and purple color scheme.

There are some bugs and minor issues with it which I hope to hammer out as I receive feedback. Check the repository for bug reports and some technical documentation.

Chip Fuzzing Synthesis

I’m unsure whether I read about this or dreamt it (this year has been a blur) but I recall someone fuzzing a retro sound chip, most likely the Yamaha OPL3, by sending it random bits for its synthesis parameters and recording the output. Drawing from this, we can explore “chip fuzzing synthesis,” the art of feeding total digital randomness into a synthesis algorithm and seeing what comes out.

There is no specific need for a real retro sound chip or even an accurate emulation of one, but it helps to understand how some old sound chips operate to look for inspiration. As an example, we can look at the Commodore 64’s SID. This chip is an analog subtractive synthesizer, providing three oscillators with frequency inputs, waveform selection (saw, pulse, triangle, noise), and ADSR envelope generators, all mixed into a filter with controllable cutoff and famously nonfunctioning resonance.

The parameters of the SID are controlled by an internal set of 32 8-bit registers, which are written to using a 5-bit parallel address bus and an 8-bit parallel data bus. In C-like pseudocode, communication with the SID can be emulated like so: [1]

char sidRegisters[32];

// Parallel ports used to communicate with SID.
char addressBus = 0;
char dataBus = 0;

void writeSid(char address, char value)
{
    addressBus = address & 31;
    dataBus = value;
    sidRegisters[addressBus] = dataBus;
}

The SID interprets the sidRegisters array and maps various bits and bytes to analog synth parameters. For example, registers 0 and 1, taken as a 16-bit integer, control the frequency of an oscillator, and individual bits in register 4 select the waveform and enable ring modulation and hard sync.

Fuzzing the address and data buses is the equivalent of calling writeSid repeatedly with randomized address and value, writing random data to random registers. The exact rate at which random data is written is up to you. I find that slow randomization produces the most coherent results and has the least chance of turning the output into white noise. A few hundred times a second is a good start.

It also suffices to take a simpler route and feed high-frequency random noise (sample-and-hold, maybe) into every parameter of a synth. Again, we don’t need a vintage emulation at all – a minimal subtractive monosynth with waveform selection, ADSR envelope, and a few switchable filter types is adequate to get glitchy sounds. So here’s a little patch:

This is sonically uncompromising (and hey, maybe that’s your thing), but still makes a useful raw source for more polished sound design. Here’s the same patch as above with some minor modifications and a lot of post-effects like granulators, distortion, and reverb:

The outcome of chip fuzzing synthesis is highly dependent on the choice of synthesis algorithm, the set of parameters, and the ranges for said parameters. I can imagine fuzzing FM, subtractive, additive, physical modelling, and parameters of an effects chain. The more inputs to fuzz, the better – especially inputs that switch features on and off, exhibit complex interactions with other inputs, and/or unearth bugs and artifacts.

Low Battery Audio Effects

Searching YouTube for videos of low battery toys and keyboards brings up results like “Demon Possessed Singing Trout.” Please watch the video before proceeding.

I have a limited understanding of electronics, but a compulsory need to explain this phenomenon due to tech blogger ego syndrome. A low battery has an abnormally high internal resistance, causing its voltage to sag in response to the loads it’s supporting. If it’s powering multiple things, they will interact in strange ways. The distorted audio from the singing fish sounds like the clock rate is dropping in reaction to the load of the speaker. (The servo motors might also be causing voltage sag, although it isn’t entirely clear from the video.)

The speaker/clock interaction is interesting since it works in a feedback loop: the clock controls the playback rate, and the amplitude of the output audio draws current that affects the clock. This inspires a general method for turning an audio algorithm into a “low battery” version:

  • Run a DSP algorithm such as sample playback, synthesizer, effect, etc. that can be operated at a variable clock rate.

  • Apply filters like a full-wave rectifier, envelope follower, or simple lowpass to simulate speaker load. Optional.

  • Apply a highpass filter to block dc. (This helps prevent the algorithm from getting stuck.)

  • Use this signal to control the clock rate of the DSP algorithm, so that a signal of higher amplitude lowers the clock rate.

The casual experiments I’ve done with this are promising. At subtle settings, this creates wandering, droopy pitch bends. Pushed to the extreme, it produces squelchy signal-dependent distortion. I especially like its effect on percussive signals, where louder transients are stretched out and any rhythmic pulse becomes irregular. I’m imagining software plugins that emulate digital hardware could be augmented with a “battery” knob that lets the user control how much the clock rate sags in response to the output signal.

An Analog-Style Frequency Shifter

In this post, I will give an overview of a well-known method for designing frequency shifter effects in analog electronics, and some notes on implementing a digital version.

Frequency shifting is a special case of single sideband (SSB) modulation, a device often used in radio electronics. SSB in telecommunications involves shifting audio frequencies by e.g. 10 MHz so they can be transmitted as radio waves, then shifting down 10 MHz at the receiver. For this reason, SSB is well-studied, and there are a few different ways to implement it. This post describes a design that has found use in electronic music applications, where the shift is small (up to ±20 kHz, and often in tiny shifts like 1 Hz). Wikipedia calls it a “Hartley modulator,” but I can’t find any source to corroborate that terminology.

A fantastic reference to look at for the design of an analog frequency shifter is [Haible1996], which provides a full set of schematics of a high-quality real-world analog unit. I’ll only provide details up to an abstract block diagram that can be easily digitized.

This post starts off pretty theoretical, with an attempt to explain how the frequency shifter works. Admittedly, this is an explanation more for myself than it is for others, but I hope it helps. If not, feel free to skip the first two sections and check out the following links which might explain it better: [Smith2007] [Boschen2016] [Boschen2020]

Read more…

Exploring Modal Synthesis

Modal synthesis is simple in theory: a method of synthesizing sound where an excitation signal is fed into a parallel bank of resonators [Bilbao2006]. Each resonator, known as a “mode,” has the impulse response of an exponentially decaying sine wave and has three parameters: frequency, amplitude, and decay time. It’s a powerful method that excels in particular for pitched percussion like bells and mallet instruments.

Despite its conceptual simplicity, modal synthesis has a daunting number of parameters to tune – three times the number of modes, to be exact – and setting them by hand isn’t practical or musically expressive. How are we supposed to get great sound design when we have so many degrees of freedom? In interface design parlance, what we want is a divergent mapping [Rovan1997] that takes a small number of controls, maybe four knobs, and maps them to the several dozen frequencies, amplitudes, and decay times that control the modal synthesizer.

While it is possible to reverse engineer modes from a recorded sample (see [Ren2012] for a particularly impressive application), I’m most interested in “parametric” modal synthesis where each model derives from mathematical formulas that allow the user to navigate around a multidimensional space of timbres. I found a number of such algorithms while shopping around the literature from both computer music and mechanical engineering, so I decided to summarize them in a concise reference for sound designers and composers.

Read more…