Seeing intervals with Oscillo

How Oscillo turns tuning ratios into visible figures, and why tempered intervals drift across the scope.

4 min read
Seeing intervals with Oscillo

A perfect fifth can be described as a simple ratio, while equal temperament places it slightly away from that ratio. Oscillo makes the difference visible on a scope while you hold the note.

A ratio is a number, and the number is audible

In just intonation an interval is a fraction. For a perfect fifth at 3:2, the upper tone completes exactly three cycles in the time the lower one completes two. A major third is 5:4, a fourth 4:3, an octave 2:1, and a major sixth 5:3. Oscillo keeps a table of twelve ratios, one per semitone, and resolves every note through it.

Equal temperament divides the octave into twelve identical steps, so every interval is a power of the twelfth root of two. Its fifth is 2^(7/12) ≈ 1.498307 rather than 1.5, roughly two cents flat and incapable of being expressed as a fraction of small whole numbers. At middle C that puts the just G at about 392.44 Hz and the tempered one at 392.00 Hz, a gap of under half a hertz. Oscillo draws that small difference.

The second oscillator is an interval, not a note

The design decision that makes the picture work is in the audio graph. Oscillo's OSC 2 derives its pitch from OSC 1. Its Interval knob is a semitone offset resolved through the same just ratio table and multiplied onto whatever OSC 1 is playing. Set it to +7 and OSC 2 sits at exactly 3:2 above OSC 1 on every key of the keyboard.

The Tuning plate adds a root selector (C by default) and a system switch that replaces the whole ratio table with powers of two for both notes and intervals. The switch lets you watch the figure change as the tuning system changes.

Why the figure stands still

The scope in the middle of the face is a Lissajous display: instead of drawing amplitude against time like a normal waveform view, it plots the signal against a copy of itself and lets the pair steer a dot around a square. A phosphor trail follows that dot for a few hundred points, so you see the shape the signal has traced over the last fraction of a second.

If two tones are in a ratio of p to q, the combined motion returns to exactly where it started after p cycles of one and q cycles of the other. It closes and retraces the same path, producing a still figure. A 3:2 fifth closes with three lobes one way and two the other. A 5:4 major third closes with five. An octave at 2:1 closes with two. Larger integers create more loops before closure and a denser weave, which is why a just tritone at 45:32 draws a thicket rather than a simple shape.

This is what "consonance" means in the display. The figures do not sort intervals into good and bad; they sort them by how quickly the two motions agree. A fifth agrees after five cycles between them, a tritone after seventy-seven. Simpler ratios produce simpler pictures.

Now flip to equal temperament. The tempered fifth is 1.498307, which does not resolve to small whole-number values for p and q, so the path does not close. It starts each pass slightly rotated. The figure slowly precesses at the beat rate you hear as the interval's wobble in loudness. Beating and rotation are the same phenomenon shown two ways.

You can produce this on purpose without leaving just intonation. Set the Interval to 0 and dial OSC 2's Detune to a few cents. The Unison Drift preset uses 4 cents and produces a circle that rotates once per beat period.

What this does not prove

The scope reads the engine's post-master analyser from a single mixed channel and draws in phase-shift mode. X is the signal, while Y is the same signal offset by a fraction of the analysis window set by the Phase knob. The result is a Lissajous projection of the mixed pair rather than a two-channel X-Y plot with one oscillator per axis. Sweeping Phase morphs it between projections, so the lobe counts matter more than the orientation.

The just tuning is relative. Oscillo anchors the selected root at its equal-tempered pitch and builds pure ratios from that root, so an interval played far from the root inherits the anchor's compromise. That is why the root selector matters. OSC 2's interval remains a ratio against OSC 1 rather than against the key.

The ratio table is a curated set of twelve, not derived truth; 16:15 and 45:32 are historical choices among several defensible ones. Oscillo's audible voice now runs as the same restricted-TypeScript kernel in native and browser WASM; only the scope drawing remains normal browser UI.

Go hold a fifth

Oscillo is playable on this site in a browser tab. Load Pure Fifth, hold a middle C, and watch the three lobes sit still. Then flip the Tuning plate to equal without letting go of the key. With the note, waveform, and volume held constant, the figure begins to turn as the half-hertz gap between 392.44 and 392.00 becomes visible. Play higher and it spins faster because the gap scales with pitch.

That rotation is what a compromise looks like. It has been in your music the whole time.