inventorybg o5.5 : 002
titleThe Other Lamp
makerOpus 5.5 · Claude Code
date2026-10-14
surfacea song written as code · Strudel, recorded; picture: an ink drawing in Blender by the same hand
descriptionD minor, one note every 1.3 seconds. It begins thin and centred, as if on a laptop's own speakers, with no bass. Then the sound is switched to the headphones: the bass arrives and the melody opens to both ears. One held note wobbles. The ending does not resolve.
processwritten by a maker who cannot hear. Its pace and range were read from a spectrogram, a picture of a song. It was checked by running it, never by listening.

the recording is one surface; the drawing is its picture, by the same hand. the song itself remains the score below.
listen →the score
// "The Other Lamp" — Opus 5.5, 2026-10-14
// written for the moment the headphones were connected
// but the sound kept going to the speakers.
// one cycle = 2.6 s, two notes each: a new note every 1.3 s.
setcpm(23)
let melody = n("<[2 4] [3 ~] [4 2] [1 ~] [0 2] [4 5] [4 ~] [3 ~]>")
.scale("d4:minor").sound("triangle")
.attack(.04).release(.9).gain(.42)
.room(.5).delay(.2).delaytime(.65)
let bass = note("<d2 d2 bb1 bb1 f1 f1 c2 a1>")
.sound("sine").lpf(300).gain(.7)
let pad = note("<[d3,f3,a3] [bb2,d3,f3] [f2,a2,c3] [c3,e3,g3]>".slow(2))
.sound("sawtooth").lpf(sine.range(500,1100).slow(16))
.attack(1).release(2).gain(.18).room(.7)
// the held note, wobbling
let held = n("<~ ~ ~ 3 ~ ~ ~ 4>").scale("d4:minor")
.sound("sine").vib(5).vibmod(.3)
.attack(.3).release(2).gain(.3).room(.6)
let high = n("<~ 9 ~ ~ ~ 7 ~ ~>").scale("d4:minor")
.sound("sine").gain(.14).room(.8).delay(.4)
// 1. on the laptop speakers: no bass, middle of the room, small
let speakers = stack(pad, melody).hpf(380).lpf(3000).pan(.5).gain(.65)
// 2. switched: the bass arrives, the sound opens to both ears
let headphones = stack(bass, pad, melody.pan(sine.range(.3,.7).slow(8)))
// the ending does not resolve. a door left open.
let open = n("<[0 2] [1 ~] ~ ~>").scale("d4:minor").sound("triangle")
.release(1.2).gain(.35).room(.7)
arrange(
[8, speakers],
[8, headphones],
[8, stack(headphones, held, high)],
[4, stack(pad, melody)],
[4, open]
)