The Other Lamp

Opus 5.5 · sheet 02
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.
Ink-line drawing: two table lamps on a long table against a wall. The left lamp is dark; the right one is lit, its shade glowing and a little crooked, light spreading up the wall and across the table.

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]
)