← All modules

@maru shared this instrument so you can build on it and use it in your DAW.

AvailableInstrument

Strings Ensemble

A sawtooth ensemble with chorus.

About

A 1970s-style string machine: two octave ranks of sawtooth tones, one shared filter and one slow swell, feeding the layered chorus that turns a plain buzz into a string section.

The idea

The original divide-down keyboards were not polysynths with many voices. One set of oscillators ran all the time and every key simply opened a gate onto them, which is why these machines could hold any chord in an era when synthesizers played one note at a time. It is also why their raw sound is so plain: octaves divided from the same source cannot drift against each other, and a bank of sawtooths with no beating in it is a buzz.

So the ensemble chorus is not a sweetener on top of a string sound; it is the string sound. Several short delay lines, swept at two rates that never line up, create the beating that reads as many players. The Dry Contour preset is the house sound with the ensemble switched out, so you can hear the difference.

Controls

  • 8′ is the played note and the body of the sound. 4′ is the octave above, tuned slightly sharp so the two ranks do not fuse into one. Take the 4′ out and the strings turn into voices.
  • Tone is one gentle low-pass filter for the whole keyboard, so a big chord darkens as one thing.
  • Attack and Release shape every note, with nothing in between. A slow attack, up to two seconds, is the bowed swell the instrument is known for.
  • Ensemble switches the chorus in or out at matched loudness, so the comparison is about movement, not volume. Depth sets how far the delay lines travel and Rate how fast the slow pair moves.
  • Phaser adds a slow, wide sweep over the whole section.
  • Humanize scatters each key's tuning by a few cents. The scatter is the same every time you play the same chord, so it sounds like an instrument rather than a fault.
  • Level sets the output.

Getting started

Play it from a keyboard or MIDI and start with Velvet Strings: hold a triad and listen to the beating wander. Then try Choir Pad for voices, Brass Section for a fast, bright stack, or Disco Octaves with eighth-note octaves in the right hand. Solo Cello and Silver Strings cover a single low line and a brighter violin sound.

Up to sixteen keys sound at once; past that, the oldest note gives way. Holding more keys makes it louder, as on the hardware. This instrument currently plays in the browser only.

How it works.

A key builds two sawtooth oscillators, 8′ at the played pitch, 4′ an octave above and four cents sharp, each through its own contour VCA onto one of two shared footage busses. The busses are the mix faders, so moving one is a single AudioParam write rather than a write per sounding note, and they sum into one trim, one lowpass and one ensemble for the whole keyboard. Everything that is shared is shared because the hardware shares it: a per-note filter would sound cleaner and would be the wrong instrument.

The contour is two knobs and nothing else: a linear ramp to full over the attack, a flat hold for as long as the key is down, and an exponential release that runs 4.6 time constants (−40 dB) before the voice is torn down. Releasing a key part-way through a long attack starts the fall from the level actually reached rather than from full, which is the difference between a release and a click on every short note.

The ensemble is where the module spends its effort. The classic circuit is three bucket-brigade lines on one three-phase oscillator; the shared web-fx chorus primitive is a stereo pair whose two lines sit one spread angle apart on a single rate, so one instance cannot be three-phase. Two instances are therefore layered in PARALLEL, parallel because the hardware sums its lines rather than cascading them, and a cascade double-modulates the second line's input and smears instead of thickening. The result is four modulated lines at four phases across two rates (a slow 7.5 ms pair and a fast 3.2 ms shimmer) against one dry path.

Switching the ensemble in and out is a crossfade between that wet sum and a straight dry path, with a derived makeup gain on the wet side. Each chorus passes half the dry signal and half its own modulated pair, so the wet bus before makeup is 0.5·dry + 0.25·A + 0.25·B; the modulated lines are uncorrelated with the dry and with each other, so the sum's power is the sum of the squares and the makeup is one over its square root. That lands the switch within a fraction of a decibel, which is what makes the dry comparison a statement about movement rather than about volume.

Tuning is deterministic. The per-key scatter is drawn from the repo's seeded xorshift32 source, forked by MIDI note and by rank, so the same chord tunes identically on every machine and in every render, `Math.random()` is forbidden in DSP here, and an instrument that retuned itself between takes would read as a fault rather than as life. At zero the scatter is exactly zero, so the control has a true off position.

Gain staging is sized for a chord rather than for the polyphony cap. Sixteen keys times two ranks is a sum well past unity, and scaling every rank down to fit that worst case would make ordinary playing inaudible, so the bus trim is one over the square root of a six-note chord, which is the right law because notes at different pitches are uncorrelated and add in power rather than in amplitude. Holding more keys gets louder, exactly as the hardware does.

What would you make with Strings Ensemble?

Describe what you want to make. Build it with the Studio agent.

Goes well with.

Prototype

A tonewheel organ with nine drawbars and no attack stage.

Prototype

A compact subtractive synth for learning the signal path.

Prototype

Convolution reverb: eight synthesized spaces, twenty-five real cabinets.