A shepard tone generator


One of the first Eurorack modules I owned was the Make Noise Telharmonic. I loved messing around with the Spiratone mode on that module, but sadly I sold the module and replaced it with Just Friends. Now Just Friends has Spiratone too, with a little help from Crow and Norns!

This script has a simple SuperCollider engine that can be used without Crow or Just Friends.


  • norns
  • crow/just friends with i2c connection (optional)
  • grid (optional)


E2 selects the param id to edit
E3 changes the value of the selected param

Visualizer Params

pitch_min = minimum pitch in semitones (0 to 127)
pitch_max = maximum pitch in semitones (0 to 127)
num_voices = number of voices to use when generating a tone (1 to 40, just friends only uses the first 6)
voice_spread = number of semitones between voices (0 to 127)
voice_detune = additional spread between voices in cents (0 to 100)
time_interval = milliseconds between updates (13 to 1000, anything less than 13 seems to cause i2c issues)
gliss = toggle between glissando and pattern mode
pitch_interval = number of cents to increment each voice by on each update (-100 to 100)
amp_curve = function used to determine voice amplitude (linear, raised cosine, or gaussian)
gaussian_width = width of the gaussian amplitude curve in semitones (0 to 127)
drone = disable envelope generator on internal engine
decay = envelope decay time for internal engine

Voices are generated dynamically from a single offset. All voices wrap around the min/max pitch, so changing min_pitch, max_pitch, num_voices and voice_spread can create some weird patterns.

Glissando Mode

The tone is incremented by pitch_interval cents every time_interval milliseconds.

Pattern Mode

The tone is incremented by the current pattern step offset in semitones every time_interval milliseconds. The pattern step is incremented by one on each update and wraps at the end of the sequence.

Each step in the pattern can increment the sequence by +/- 0-12 semitones. A step can also contain a rest, preventing the tone from triggering.

Patterns can contain 1-64 steps.

Currently patterns can only be edited in the params menu or with a connected grid.

Grid Pattern Editor

Known Issues

  • Changing num_voices does not always disable voices on Just Friends


  • Sequence/pattern editor improvements
  • Clock sync
  • Split voices in stereo
  • Crow input/output mappings
  • Resonant bandpass engine for audio processing?


v1.0.0 - zip download



Updated with a grid sequencer prototype.

I’d love to hear your feedback on possible improvements to the UX! I don’t actually own a grid yet, (thanks to @okyeron for the TouchOSC grid script!) so I’m not sure if the led intensities make sense.

1 Like

Updated with some more grid pattern editor refinements. See documentation above!

1 Like

this is an awesome script and love the playability with a controller. Still need to check grid and Just Friends but as a stand-alone it’s perfect. A total sleeper script which really does need a controller to get the most out of it. It’s much deeper than the Telharmonic Spiratone with more parameters, controls and is much more musical with a wider sound palette. Just having control of the decay really helps…going from plucked sines to more bell like sounds as well as the more usual organ like sounds.

It’s got that early electronic 60’s feel. Someone on Facebook recommended I listen to a James Tenney piece from the early years of electronic music: “For Ann, Rising.” as well as Stockhausen, who used a shepard-tone like passages on Hymnen, several years after Tenney.


I was unable to get this working with Crow. Only see an option for Just Friends. Is that normal for now, or am I overlooking something? Thanks for making this!

1 Like

Do you mean you didn’t see any response from crow inputs/outputs? If so, that is normal - currently the script only uses crow to connect to Just Friends.

1 Like

Got it, yes that’s what I was referring to. Thank you for clarifying!