AN
Warsaw, PL

WritingExperiments

13 cassettes and a program that listens for me

Six hours of family tapes from 1980 to 2000, catalogued on a CPU: songs, talk, dates said out loud, and one song found on five different tapes. What real recordings taught me about thresholds and hallucinations.

Python · Whisper · Audio · Open source · Side project

13 cassettes, 1980 to 2000. Six hours of my childhood and teenage years that I was never going to sit through end to end. So I wrote a program that listens for me.

What it does

It finds where every song, conversation, instrument tuning and round of applause starts and ends. It transcribes speech and singing, rates what survived on the tape (clipping, hum, hiss) and builds a catalogue with a player and timestamps. It all runs locally on a CPU, and nothing leaves the machine. Six hours of audio take about two.

What it found

One song on five different tapes, recorded between 1996 and 2000. It’s played three semitones apart, at noticeably different tempos. An audio fingerprint would never match it, so the program compares the notes, not the sound.

It also learned that people say dates out loud: “8 December 1981, testing the Vesna-211 tape recorder.” That’s more reliable than any file name.

What real tapes taught me

  1. Absolute thresholds don’t survive real data. On one tape the background level moved across a 50 dB range from one five-minute stretch to the next. “Quiet” only means something relative to what’s around it. The same bug showed up in four places: pauses, takes, endings and fade-outs. It’s the same lesson as alert thresholds in production.
  2. Speech recognition hallucinates with confidence. On music and noise, Whisper didn’t return noise. It returned a memorised subtitle credit line, with high confidence. Statistical filters didn’t catch it. A plain list of known phrases did.
  3. Measure a match by its length, not its share. Real repeats of a song matched for 40 to 60 seconds. Guitar noodling matched for 20, but inside a short segment that looked like a bigger share. The chance of an accidental match falls with length.
  4. Synthetic test data needs a negative example. My first fake tape had a “different” melody that turned out to be the same one, transposed. The threshold had nothing to fail on.

The code is open source, MIT, no support. The longer list of what broke along the way is in LESSONS.md (in Russian).

What’s in your drawer that you’ll listen to “someday”?

Warm 1980s poster: a pile of audio cassettes, one tape unspooling into a glowing musical staff that threads through the others. Rewind: it listened so I didn't have to, and found the same song on five tapes.