Timbre as Material
The third answer. Electronic music's move: stop asking which notes — ask what the sound itself is made of. Synthesis, sampling, and sequencing in Tone.js, then the week ends as it should: a jam.
- tell subtractive from FM synthesis, by ear and in code
- play recorded samples as an instrument with Tone.Sampler
- chain effects and program a 16-step sequencer
- perform sixty seconds of music you built from nothing this week
10:00 — A1 Listening
A1 forms are in by 10:00 — both sketch links submitted. Then six pairs: each Western-scale study, then its raga twin, back to back, timestamps declared. One question per pair for the room: what did the constraint change? Note the answers — they are your first instrument-design findings, and they come back in Week 2. Your A1 marksheet reaches you by email, personally.
11:00 — A Lineage in Five Records
- 1948 · Paris Pierre Schaeffer — Étude aux chemins de fer Musique concrète: recorded trains, cut and looped into form. The recording stops being a document and becomes an instrument — sampling begins here.
- 1963 · London Delia Derbyshire — the Doctor Who theme Assembled sine by sine on tape, no synthesizer yet in the building. Heroic sound-construction; every timbre a decision.
- 1977 · Düsseldorf Kraftwerk — Trans-Europe Express The sequencer becomes the performer. Repetition as aesthetic, machine time as groove.
- 1982 · Mumbai Charanjit Singh — Synthesizing: Ten Ragas to a Disco Beat Yesterday meets today: ragas on a Roland 303/808, years before acid house "invented" that sound. The traditions in this workshop have already met.
- 1999 · Cornwall Aphex Twin — Windowlicker The DAW era: timbre, rhythm, and pitch all equally plastic. Production is composition.
The through-line: each generation turned some piece of studio machinery into an instrument. Tape, then oscillators, then sequencers, then software. You are the next step in that lineage: the browser is your studio, and next week, the phone is your stage.
12:00 — How Synthesis Works
Two recipes cover most synthesized sound you have ever heard:
| Recipe | Idea | Character |
|---|---|---|
| Subtractive | start rich (saw/square, full of harmonics — Day 1's spectrum), then carve away with a filter; shape loudness with an envelope | warm, vocal, "analog" — basses, pads, leads |
| FM | wiggle one oscillator's frequency with another oscillator, at audio rate; sidebands bloom into complex spectra | glassy, metallic, bells, electric pianos — timbres subtraction can't reach |
Four envelope numbers — ADSR: attack, decay, sustain, release — decide whether the same oscillator reads as a pluck (instant attack, fast decay), a pad (slow attack, long release), or a stab. Timbre is spectrum plus its motion in time.
One sine modulating another. Ratio sets which sidebands appear (integer ratios = harmonic, in-between = clangorous); depth sets how many. Two numbers, a whole timbre-space.
14:00 — Tone.js Deep Dive
1 · The synth family
Same interface, different engines — swap one line, audition them all:
let synth = new Tone.Synth().toDestination(); // plain subtractive voice
// new Tone.FMSynth() — the two-knob demo, as an instrument
// new Tone.AMSynth() — tremulant cousin
// new Tone.DuoSynth() — two detuned voices, thick
// new Tone.MembraneSynth() — drums/toms (yesterday's tabla stand-in)
// new Tone.NoiseSynth() — hats, snares, wind
function mousePressed() {
Tone.start();
synth.triggerAttackRelease("C3", "4n");
}
Open any synth's envelope:
new Tone.Synth({ envelope: { attack: 1.5, release: 3 } }) —
the pluck becomes a pad. ADSR is now yours in code.
2 · Sampling — recorded sound as an instrument
This workshop's own sample library: an acoustic guitar, chromatic G3–B5, one file per note, recorded for a previous edition of this workshop. Tone.Sampler repitches the nearest sample for any note you ask for:
let ready = false;
const sampler = new Tone.Sampler({
urls: {
"G3": "g3_Pick1.mp3", "C4": "c4_Pick1.mp3",
"E4": "e4_Pick1.mp3", "G4": "g4_Pick1.mp3",
"C5": "c5_Pick1.mp3", "E5": "e5_Pick1.mp3",
"G5": "g5_Pick1.mp3"
},
baseUrl: "https://workshops.ujjwalagarwal.com/computational-approach-to-sound/assets/strings/",
onload: () => { ready = true; }
}).toDestination();
function mousePressed() {
Tone.start();
if (ready) sampler.triggerAttackRelease(["C4", "E4", "G4"], "2n"); // a chord!
}
The full chromatic set (30 notes, a3_Pick1.mp3 … b5_Pick1.mp3, sharps as as4, cs5…) lives at assets/strings/. And Schaeffer's move is open to you: record anything on your phone, upload it to the p5 editor as a file, and give the sampler that instead. A door slam played chromatically is a legitimate instrument.
3 · Effects — the studio as signal chain
const dist = new Tone.Distortion(0.4);
const delay = new Tone.FeedbackDelay("8n.", 0.35); // dotted-eighth echo
const reverb = new Tone.Reverb(4);
synth.chain(dist, delay, reverb, Tone.Destination); // in that order
Order matters — distortion into reverb is a guitar amp in a hall; reverb into distortion is a broken radio. Try both. There is no wrong, only signature.
4 · The step sequencer — the chairs, electrified
const kick = new Tone.MembraneSynth().toDestination();
const hat = new Tone.NoiseSynth({ volume: -12,
envelope: { attack: 0.001, decay: 0.05, sustain: 0 }
}).toDestination();
const kickRow = [1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,1];
const hatRow = [0,0,1,0, 0,0,1,0, 0,0,1,0, 0,0,1,1];
let step = 0;
function mousePressed() {
Tone.start();
Tone.Transport.bpm.value = 118;
new Tone.Loop((time) => {
if (kickRow[step]) kick.triggerAttackRelease("C1", "8n", time);
if (hatRow[step]) hat.triggerAttackRelease("16n", time);
step = (step + 1) % 16; // the wheel, again
}, "16n").start(0);
Tone.Transport.start();
}
Add a third row driving yesterday's raga synth, or Monday's five keys, or the sampler. Layer until it grooves. This sketch — rows as arrays, a wheel of sixteen — is the floor plan of every drum machine since 1980.
16:00 — The Friday Jam (Assignment A2)
Sixty seconds, live, through the monitors. Any instrument or system built this week — the five keys grown up, a generative piece you conduct with the mouse, a beat you mute and unmute. Sixty seconds is long. Plan a shape: begin somewhere, go somewhere, end on purpose. Running order by lot at 15:45; performance timestamps logged, truly, in the record.
Before you leave: the A2 form — your sketch link, your sixty seconds' title, and your proposed name for next Friday's show. The show is called whatever the cohort's proposals decide; the name is announced Monday.
17:00 — The Final Project Brief
Build a musical instrument that lives on a phone. A URL that turns a phone — yours, or anyone's — into something playable: touch, tilt, shake, listening, or self-playing. Solo, pair, or one band of six; decided at Tuesday's concept lock.
It must: run on a real phone from a live URL · be playable by a stranger within 30 seconds · be performed at the show on Friday 11 September · ship with documentation (short video + one page, every fact timestamped, per the house rule).
Weekend homework: play with raga.fm on your own phone and one other browser instrument you find in the wild. For each, note one mapping you admire and one you'd change. Bring three instrument ideas on Monday — sketches on paper, not code.