The Balloon Climbed for an Hour Without Changing Key

Stratospheric Telemetry Chord Maps
🎮 Play: Telemetry Chord Descent

The script didn’t crash. That would have been simple.

What happened instead: my December balloon data—the APRS log I’ve been nursing since I peeled my tracker off a snow-dusted fence post near Drumheller—dutifully converted into 247 MIDI events, and the result was unlistenable. Not wrong, exactly. Just terrible.

My mapping seemed elegant on paper. Altitude sets the key centre: C minor at the surface, modulating up through the circle of fifths as the balloon climbs, reaching G major at burst altitude around 29 km. Vertical velocity controls tempo—slow rise, slow beats; fast descent, frantic rhythm. Wind direction picks the voicing, same logic I borrowed from my METAR chord experiments: northerly winds open up to fifths, southerly compress to close triads.

The problem is that a balloon flight isn’t a song. It’s ninety minutes of slow ascent followed by ten minutes of chaos. My MIDI file reflected this with brutal accuracy: seventy-eight minutes of nearly identical half notes, one chord every thirty seconds, the tempo hovering between 80 and 85 BPM the entire time. The key centre shifted exactly twice during the climb. Twice. Over an hour.

Then the balloon burst, the payload fell at 40 m/s, and the last four minutes sounded like someone dropped a synthesizer down a staircase.

The technical failure I should have seen

APRS packets arrive irregularly—the tracker beacons when it decides something interesting happened, not on a fixed schedule. I knew this from printing those skytrace sculptures last month, where the packet spacing created lumpy splines I had to smooth. But smoothing makes sense for physical sculptures. For music, I converted each packet into exactly one MIDI event at that timestamp.

The result: clusters of notes when the tracker was chatty, long silences when it wasn’t. The ascent portion had gaps of forty-five seconds between events. That’s not rhythm. That’s waiting.

And the altitude-to-key mapping was worse. I used a linear function—every 4,000 metres shifts the key centre up one step. Sounds reasonable until you remember the first 4,000 metres takes fifteen minutes and the last 4,000 metres also takes fifteen minutes. The balloon spends most of its flight between 10 and 25 km, which meant most of the piece sat in the same two keys. The dramatic modulations I imagined were crammed into the first and last ten percent of the flight.

Linear altitude mapping is a rookie mistake. The ear wants logarithmic relationships. I knew this. I ignored it.

What the burst moment revealed

The one part that worked—really worked—was the instant of burst. The telemetry shows a half-second gap, then vertical velocity snaps from +5 to -38 m/s. The tempo parameter doubled. The key centre jumped. The voicings collapsed from suspended fourths to minor triads.

For exactly four seconds, the music was interesting.

Then the parachute caught, the descent stabilized at 7 m/s, and the last six minutes became a slightly faster drone than the first seventy-eight. The script faithfully produced what the atmosphere actually did: mostly nothing, punctuated by catastrophe.

I sat at my desk playing the file three times, trying to convince myself there was a version of this that worked. Maybe if I quantized the rhythm? Maybe if I added a second voice for GPS jitter? Maybe if I pre-processed the data to emphasize the jet stream turbulence at 11 km?

The coffee went cold. The file kept playing its hour of C-sharp minor.

Sitting with the problem

The data is accurate. That’s the frustrating part. The balloon really did climb at a nearly constant rate for most of the flight. The atmosphere really was calm that day—ideal launch conditions, boring sonification. I wanted to hear a journey, and instead I produced a medical monitor beeping in a quiet room.

The concept isn’t broken, but my implementation is naive. Tomorrow I need to think about what makes a flight musically interesting versus scientifically accurate, and whether those can be the same thing. Maybe the answer is non-linear time compression—speed through the boring parts, linger on the turbulent ones. Maybe the answer is ignoring altitude entirely and focusing on something I haven’t measured yet.

For now the MIDI file sits in a folder labelled “balloon_attempt_1.” The Drumheller data is still there, waiting for a better algorithm.

The sky gave me ninety minutes of information. I turned it into ninety minutes of proof that I don’t yet understand what I’m doing.