missed-songs-audit · six tapes · 2026-09-01
Jam Tape Audit
Every long band tape on this Mac, ranked by how much frequency survived the recorder, then run through the missed-songs audit. One tape carried the same silent failure that cost the 8.28 board tape ninety minutes of playing.
1. Which tape has no frequency loss
Container and bitrate describe a file. They do not measure what reached the disk. The test here samples nine windows spread across each tape, averages the spectrum, and reads the level at 16 kHz against the 1 kHz to 4 kHz band that every one of these recordings has. A codec cutoff shows up as a wall, with energy tens of dB below anything an instrument produces.
Five recordings qualify, and four of them are the 8.28 session.
The 8.28 practice has four 24-bit multitrack mic masters, each 5.21 h. mic1_4-40PM.wav
reads -32.6 dB at 16 kHz, the highest fidelity anywhere in this set.
band-practice-8-14-26.wav reads -38.7 dB. Every AAC tape reads -76.8 dB or lower.
The five AAC files are 23.6 kbps voice recordings, and two more files are decodes of those.
Correction, 2026-09-02. The first version of this page said one tape
qualified. The four 8.28 mic masters were written to disk between 17:27 and 01:41, after the sweep
behind this page ran at 15:15, so they were absent when the ranking was built. The audit of the 8.28
session below was run against the 23.7 kbps 8.28.26.m4a, and re-running it against
mic1 is the open item.
| file | codec | dB @16k | reading |
|---|---|---|---|
| 8.28.26 mic1 | PCM 24-bit 44.1k | -32.6 | real content at 16 kHz |
| 8.28.26 mic2 | PCM 24-bit 44.1k | -52.7 | real content at 16 kHz |
| 8.28.26 mic4 | PCM 24-bit 44.1k | -52.7 | real content at 16 kHz |
| 8.28.26 mic3 | PCM 24-bit 44.1k | -57.3 | real content at 16 kHz |
| 8-14-26 | PCM 24-bit 44.1k | -38.7 | real content at 16 kHz |
| 5-22-26 | AAC 23.6 kbps | -76.8 | dead above roughly 12 kHz |
| 8.28.26 | AAC 23.7 kbps | -81.7 | dead above roughly 12 kHz |
| 7.3.26 | AAC 23.7 kbps | -83.2 | dead above roughly 12 kHz |
| 5.8.26 | AAC 23.6 kbps | -85.5 | dead above roughly 12 kHz |
| 7.31.26 | AAC 23.7 kbps | -85.7 | dead above roughly 12 kHz |
| ~/Downloads/7:14:26.m4a | copy of 8-14-26 | -85.0 | envelope r = 0.998 at a constant -0.070 s AAC priming delay |
| ~/Desktop/Stems/5.8.26-jam/source.wav | copy of 5.8.26 | -56.9 | envelope r = 1.0000 at zero lag |
The two greyed rows are copies rather than separate sessions.
7:14:26.m4a matches the 8-14 WAV at an envelope correlation of 0.998 once a constant
70 ms AAC priming delay is removed, so it is a lossy sibling of the same performance under a
different date in its name. The 5.8.26 WAV matches its m4a at 1.0000 with no lag at all,
so it carries no information the m4a lacks.
2. The audit, tape by tape
Coverage is the share of the tape the detector called a song. On a practice tape, anything under about 40 percent is the alarm. Uncovered regions are stretches of at least 45 seconds that measure as playing and carry no take, each one confirmed by transcription against a talk control from the same tape.
| tape | fidelity | before | songs now | coverage | uncovered | verdict |
|---|---|---|---|---|---|---|
| 8.28.26 5.21 h |
lossy -81.7 dB @16k |
12 @ 10.7% | 27 173 min |
55.5% | 0 0 min |
repaired earlier |
| 8-14-26 3.76 h |
full band -38.7 dB @16k |
20 @ 65.6% | 31 161 min |
71.6% | 0 0 min |
clean run, short cut |
| 5.8.26 2.96 h |
lossy -85.5 dB @16k |
no prior run | 20 64 min |
36.0% | 6 10 min |
gap remains |
| 7.31.26 2.82 h |
lossy -85.7 dB @16k |
10 @ 10.6% | 35 108 min |
63.6% | 0 0 min |
was broken, fixed today |
| 5-22-26 2.58 h |
lossy -76.8 dB @16k |
no prior run | 24 126 min |
81.7% | 1 2 min |
clean |
| 7.3.26 2.46 h |
lossy -83.2 dB @16k |
no prior run | 17 56 min |
38.2% | 7 12 min |
gap remains |
3. 7.31.26 carried the 8.28 failure
The old run kept 10 songs across a 169 minute tape. Song coverage measured 10.6 percent, which is the alarm and almost exactly the 10.7 percent the broken 8.28 run produced. The audit found 21 stretches with no take, totalling 44 minutes.
Ten of those stretches were sampled and transcribed. All ten returned zero words, against a talk control from the same tape that returned 37 words at 0.93 words per second.
Re-running the detector with --calib loudness, the same flag that repaired
8.28, took the tape from 10 songs to 35 songs and coverage from 10.6 percent to
63.6 percent. The audit then reported zero uncovered regions. Thirty of the 35 songs are ones the
old run never held in any form.
Two songs from the old run do not appear whole in the new one, and both are accounted for. The take at 1:36:57 is now split across two songs that together cover the same audio. The take at 0:30:08 is a 53 second stretch the new run calls two fragments, which is the one genuine downgrade.
4. The 8-14 cut that shipped is short
The 8-14 detector run is healthy on its own terms. Coverage reads 71.6 percent, 80.3 percent counting every take, and the audit reports zero uncovered regions. The problem sits downstream of the detector.
The cut on disk came from the strict run, which holds 20 songs. The default run on the same tape holds 31. Mapping one onto the other, all 20 strict songs sit inside longer default takes, so the strict pass was clipping songs as well as dropping them.
Eleven songs in the default run have no counterpart in the shipped cut, at 0:10:24, 0:15:58, 0:20:21, 0:33:40, 0:38:39, 1:17:26, 1:25:46, 1:42:20, 2:05:36, 2:28:41 and 3:31:31.
Those eleven were exported by the detector on 2026-08-18 and sit as WAVs in
~/Projects/_outputs/real-song-finder/band-practice-8-14-26/songs/, 210 MB in total. The
gap is in the curation step rather than the export.
They were dropped for a reason worth stating. The curated twenty run 74 to 2129 seconds with a median of 274, and score 71.3 to 92.1 with a median of 81.3. The extra eleven run 45 to 146 seconds with a median of 75, and score 59.8 to 72.6 with a median of 63.0. They are short borderline takes sitting just under the strict pass, and the two score bands almost touch at 71.3 against 72.6. Judging them belongs to the ear rather than the detector.
| tape | length | score | file in songs/ |
|---|---|---|---|
| 0:10:24 | 47s | 60.4 | 01_0-10-24_take11_score60.wav |
| 0:15:58 | 51s | 59.8 | 02_0-15-58_take12_score59.wav |
| 0:20:21 | 86s | 67.7 | 03_0-20-21_take18_score67.wav |
| 0:33:40 | 45s | 60.8 | 05_0-33-40_take27_score60.wav |
| 0:38:39 | 146s | 67.4 | 07_0-38-39_take29_score67.wav |
| 1:17:26 | 84s | 61.3 | 12_1-17-26_take42_score61.wav |
| 1:25:46 | 56s | 72.6 | 14_1-25-46_take48_score72.wav |
| 1:42:20 | 63s | 68.6 | 18_1-42-20_take53_score68.wav |
| 2:05:36 | 91s | 60.5 | 22_2-05-36_take59_score60.wav |
| 2:28:41 | 75s | 63.0 | 26_2-28-41_take73_score63.wav |
| 3:31:31 | 76s | 66.1 | 29_3-31-31_take78_score66.wav |
5. The two residual gaps, now recovered
Three tapes had never been through the song detector at all. Two of them came back with playing the new run did not hold, and those stretches are now cut to audio.
- 5.8.26 reads 36.0 percent coverage across 20 songs. Six regions totalling 10 minutes measured as playing and carried no take. All six transcribed to zero words against a talk control that returned six words.
- 7.3.26 reads 38.2 percent coverage across 17 songs. Seven regions totalling 12 minutes carried no take. All seven transcribed to zero words against a talk control that returned 20 words at 0.50 words per second.
- 5-22-26 reads 81.7 percent coverage across 24 songs, the highest here. One region of two minutes carried no take, and it is recovered too.
All 14 regions were cut on 2026-09-02, 24.2 minutes of audio.
They live in songs-audit-recovered/ beside each run, named by their tape position, with a
recovered_manifest.json carrying the evidence for each one. Every file decodes clean.
They are labelled as audit-recovered rather than detector-found, because the detector never marked them as playing. The evidence for each is the loudness and mid-band reading plus a zero-word transcription against a same-tape talk control.
On both of the tapes that fire the talk control at 0.0 percent, the audit test rejects conversation cleanly, so the zero-word readings in those regions carry their full weight.
6. The calibration flag decides every lossy tape
The 8.28 repair added --calib loudness, which drops pulse salience from the
split that decides playing against not playing. That was treated as a fix for one tape. Running both
calibrations across this whole set shows it is the correct setting for every phone recording here.
| tape | fidelity | default calib | loudness calib | gain |
|---|---|---|---|---|
| 5-22-26 | lossy | 8 @ 7.1% | 24 @ 81.7% | +74.6 pts |
| 7.31.26 | lossy | 10 @ 10.6% | 35 @ 63.6% | +53.0 pts |
| 8.28.26 | lossy | 12 @ 10.7% | 27 @ 55.5% | +44.8 pts |
| 5.8.26 | lossy | 15 @ 16.9% | 20 @ 36.0% | +19.1 pts |
| 7.3.26 | lossy | 13 @ 19.5% | 17 @ 38.2% | +18.7 pts |
| 8-14-26 | full band | 31 @ 71.6% | not needed | default is already correct here |
5-22-26 is the sharpest case. Under the default calibration it returns 8 songs at 7.1 percent coverage, the worst reading anywhere in this set. Under loudness it returns 24 songs at 81.7 percent, the best. The tape did not change between those two runs.
The split follows fidelity rather than session. Five lossy tapes all improve under loudness, by 19 to 75 percentage points. The one full band master is the only tape where the default calibration already reads correctly, at 71.6 percent. Pulse salience carries information when the recording has real high frequency content, and carries noise when a 23.6 kbps encoder has stripped the transient detail the autocorrelation depends on.
Standing rule this produces: run --calib loudness on any phone or
voice memo band tape. Keep the default for full band masters, and check the tape's level at 16 kHz,
then choose.
7. Method, controls, and limits
Each tape went through the same four steps. The profile is built from loudness and a mid-band ratio, deliberately not the detector's own feature set, so the audit does not inherit the blind spot it exists to find. Coverage calibrates on the detector's own confirmed songs rather than a hand-picked threshold. Every disputed region is then settled by transcription.
python3 scripts/profile_tape.py --audio TAPE --out profile.npz python3 scripts/audit_coverage.py --profile profile.npz --manifest MANIFEST.json --talk START END ~/.venvs/rsf311/bin/python scripts/speech_probe.py --audio TAPE --windows windows.json python3 scripts/compare_runs.py --old OLD.json --new NEW.json
The talk control is the load-bearing part. The first probe on 7.31.26 returned zero words in all eleven windows, including the ones meant to be conversation. The script refused to let that stand, because a batch with no talk control cannot prove that a zero-word reading means music. A 24 window sweep across the whole tape then found speech at 1:48, and the audit was re-run against it.
Three limits belong with these numbers. Recall of the audit test against each detector's own songs runs 80 to 83 percent, so it under-reports rather than over-reports. The talk control fires the test between 0 and 33 percent depending on tape, which is why every region here was transcribed rather than believed on spectrum alone. And each probe samples 75 seconds from the middle of a region, so a long region is confirmed at its centre rather than end to end.