Sean song drums, v19

The v15 review asked for three things: leave the timing frame alone, turn the quiet snares into real ghost notes, and reshape the cymbals so they track the recording. This is what each one measured out to. Every number here comes from the score file and from atlantis_drums.wav, at the settled +76 ms score-to-audio offset.

All bar numbers on this page are 1-based and read from Sean_song_MULTIMIC_v19.gp5 (85 measures, 4/4 with 3/4 at bar 53), measured against atlantis_drums.wav at +76 ms.

Contents 1. The review, item by item 2. Settling the offset, and the bug that nearly hid it 3. Why the cymbals looked flat, and what actually fixed it 4. Ghost notes: 72 of them were drawn as parentheses 5. Cymbal dynamics, before and after 6. The twelve bells 7. Two things the recording would not settle 8. The twenty checks v19 passes 9. Ableton 10. Files

The headline

Across every lane, agreement between the notated dynamic and the measured attack strength went from 0.06 on the ride and −0.03 on the crash to 0.89 and 0.98. The crash went from three dynamic values to seven. The ride's longest run of identical velocities dropped from 21 notes to 10. Not one note moved position, and not one physical conflict came back.

1. The review, item by item

Source for every bar number in this section: Sean_song_MULTIMIC_v19.gp5 and Sean_drums_v19_ABLETON_GM.mid, 1-based measures, as imported to Songsterr.

A sibling chat had already moved the file from v15 to v18 before this one opened, so the first job was measuring what was actually left rather than re-fixing what was already done.

What the review askedState when I measured itv19
Preserve 127 BPM, bar lengths, onset positions, 3/4 at bar 53, the bar 5 grace note already correct in v18held, and gated
Remove 9 simultaneous closed + open hi-hat pairsalready 0 in v18still 0
Remove the snare + side-stick pairs in bars 79–83, and the crash + ride stacks already 0 in v18still 0
Use a pedal hi-hat where the recording has a closing chick not attemptedevidence too weak, see §7
Use a grace note where bars 79–83 hold a true flam not attempteddetector fails its controls, see §7
Turn the quiet snares into real ghost notes, keep backbeats accented 72 marked with the parenthesis flag, 22 with the dot 78 dots, 0 parentheses, 126 accents
Reshape the cymbal dynamics from the recorded attack strength crash correlated −0.03, ride 0.06, bell flat at one value 0.98, 0.89, 0.84
Give each bell an accent above the surrounding ridesall 12 at one velocity 4 levels, every bell clears its bar
Export to Ableton with velocity layers and small timing variation not donetwo MIDI files, §9

2. Settling the offset, and the bug that nearly hid it

Source for every bar number in this section: Sean_song_MULTIMIC_v19.gp5 and Sean_drums_v19_ABLETON_GM.mid, 1-based measures, as imported to Songsterr.

Every measurement depends on knowing where the score lines up with the audio. My first estimate came back 60 ms, against an established 76 ms in the existing filenames. That gap came from my own method.

A 2048-sample analysis window is 46 ms wide, so band energy starts rising when the transient enters the window rather than when it reaches the centre. The estimate reads early by roughly half a window. A second method, nearest-detected-onset matching, was worse: it found one onset every 39 ms, dense enough to match anything at any offset.

Correlating the notated hits against a time-domain envelope, on three lanes that share no frequency content, settles it:

lanenotated hitsbest offset
kick, 35–110 Hz486+77 ms
snare, 150–600 Hz269+74 ms
cymbals, above 6 kHz528+72 ms

Three independent lanes inside 5 ms of each other. The established +76 ms is right and every measurement below uses it.

3. Why the cymbals looked flat, and what actually fixed it

Source for every bar number in this section: Sean_song_MULTIMIC_v19.gp5 and Sean_drums_v19_ABLETON_GM.mid, 1-based measures, as imported to Songsterr.

The obvious worry with a full-kit stem is that a loud snare bleeds into the hi-hat band and the hat inherits the snare's dynamics. Measured on the first metric, that worry was real: a closed hat struck at the same instant as a snare read 3.3× louder than one struck alone, and 14% of notated hats read as silent.

Changing the measurement fixed it, with no correction factor applied. Peak-minus-noise-floor fails in dense passages, because at 127 BPM the "quiet" window before an eighth-note hit is still inside the previous hit's decay, so the floor rises to meet the peak. Taking the rise of a time-domain envelope instead:

laneband chosensnare bleed, old metricsnare bleed, rise metricnotes reading silent
closed hat7–14 kHz3.30×1.19×14% → 0%
open hat9–16 kHz18.3×0.88×11% → 0%
crash8–16 kHz4.86×1.20×8% → 0%
ride3–7 kHz1.26×0.81×22% → 0%

Bleed near 1.0 across every cymbal lane means a coincident snare no longer decides the hat's velocity. It also retires a claim I was one step from making: those "notated but silent" notes were an artifact of the raised floor. Under the rise metric every one of them has a measurable attack.

4. Ghost notes: 72 of them were drawn as parentheses

Source for every bar number in this section: Sean_song_MULTIMIC_v19.gp5 and Sean_drums_v19_ABLETON_GM.mid, 1-based measures, as imported to Songsterr.

The review scored the file as holding zero ghost notes. It held 94 snares at the softest dynamic, marked two different ways at once:

v19 uses the dot on all of them and the parenthesis flag on none. Which notes get it is decided by measured attack strength ranked locally, against the same lane within four bars, not against the whole song. A song-wide threshold ghosted ordinary backbeats inside quiet sections and missed real inner taps inside loud ones; the local ranking put ghosts across bars 16–22 and 57–75, the spans the review listed.

78 dot-ghosts, 126 accents, 1 grace note in bar 5, 0 parentheses.

5. Cymbal dynamics, before and after

Source for every bar number in this section: Sean_song_MULTIMIC_v19.gp5 and Sean_drums_v19_ABLETON_GM.mid, 1-based measures, as imported to Songsterr.

Spearman correlation between the notated velocity and the measured attack strength of that same hit. 1.00 would mean the notation ranks every hit exactly as the recording does.

lanenotesbeforeafterdistinct valueslongest identical run
crash93−0.0310.9843 → 74 → 3
ride1940.0550.8942 → 721 → 10
ride bell12flat, one value0.8381 → 412 → 4
closed hat2010.2850.9836 → 75 → 5
open hat460.3730.9845 → 73 → 5
snare2690.3990.8996 → 77 → 7
kick4860.3160.9706 → 66 → 6
side stick390.2210.9825 → 73 → 4
floor tom420.1170.9824 → 74 → 3
low-mid tom34−0.0960.9826 → 72 → 4
hi-mid tom20−0.3640.9824 → 74 → 5

Two lanes the review did not flag were inverted: the hi-mid and low-mid toms correlated negatively, meaning the softest recorded strokes were notated loudest. That is worse than random. It is fixed here, outside what was asked for.

6. The twelve bells

Source for every bar number in this section: Sean_song_MULTIMIC_v19.gp5 and Sean_drums_v19_ABLETON_GM.mid, 1-based measures, as imported to Songsterr.

Every bell position the review listed is intact: bars 6, 7, 8, 22, 25, 26, 27, 57, 60, 78, 81, 85. In v18 all twelve sat at one velocity. In v19 each takes its own measured level, floored so a bell is always at accent level, and every one clears the rides in its own bar.

bar678222526275760788185
v18111 for all twelve
v1979797979959579791111277979

Keeping ordinary rides under the bell needed care. Capping every ride within two bars of a bell reached 58 of 194 rides and knocked the ride's agreement with the recording from 0.98 down to 0.42, trading one kind of flatness for another. Restricting the rule to rides in the same bar as the bell touches 18 notes, holds 0.89, and still clears all twelve bells.

7. Two things the recording would not settle

Source for every bar number in this section: Sean_song_MULTIMIC_v19.gp5 and Sean_drums_v19_ABLETON_GM.mid, 1-based measures, as imported to Songsterr.

Both need an isolated lane, and this stem is the full kit

The pedal hi-hat question. The review asked for a pedal hat wherever the recording holds a closing chick. Decay time in the 7–14 kHz band does separate the hats already notated open from those notated closed, but only at 70.6% accuracy (p = 0.017). Converting nine positions on a 70% classifier means expecting to get one wrong, which is not good enough to overwrite a notation choice.

The flam question. Bars 79–83 might hold true flams rather than single strokes. Two detectors both failed their controls. Narrowband peak-picking reported six strokes at a regular 10–17 ms spacing at a single hit, which is the envelope's own ripple. A broadband spectral-flux detector scored a plain backbeat in bar 9 as a flam and found zero strokes at a real hit in bar 13. In a dense outro with crash, ride and hats all sounding, every 55 ms window holds another drum's transient.

So neither conversion was made. The review permits one articulation at those positions as its first option, which is what the file does.

A DrumSep 5-piece split of this stem was separated and re-tested. It does not rescue either test. On the isolated hi-hat lane, open against closed separates at 73.9% (p = 0.0026), barely up from 70.6% on the full kit and still short of usable. On the isolated snare lane the flam detector scores 10 of 10 plain backbeats as flams. Both positions keep the single articulation the review allows as its first option.

8. The twenty checks v19 passes

Source for every bar number in this section: Sean_song_MULTIMIC_v19.gp5 and Sean_drums_v19_ABLETON_GM.mid, 1-based measures, as imported to Songsterr.

Re-parsing my own output with the same library proves the bytes parse, never that Guitar Pro or Songsterr will draw them. In these formats an out-of-range value raises no parse error at all. The element is silently dropped. So every scalar field is asserted against the set observed in a file known to open, and element counts are diffed against the source.

groupcheckresult
structure heldtempo 127pass
85 barspass
3/4 at bar 53, back to 4/4 at bar 54pass
bar 5 grace note keptpass
note count unchanged: 1436 in, 1436 outpass
per-drum counts identical to v18pass
no physical conflictszero closed + open hat pairspass
zero snare + side-stick pairspass
zero crash + ride stackspass
zero moments needing three handspass
will renderevery velocity on the 16-step ladderpass
one fixed string slot per drum familypass
kick and side stick never share a slotpass
ride is GM 51, never GM 59pass
note durations unchangedpass
articulationzero parenthesis ghostspass
ghosts carry the staccato dotpass
backbeats still accentedpass
cymbalsbell positions preservedpass
every bell above the rides in its barpass

20 passed, 0 failed. The one check nobody here can run is whether Guitar Pro and Songsterr draw it correctly on screen.

9. Ableton

Source for every bar number in this section: Sean_song_MULTIMIC_v19.gp5 and Sean_drums_v19_ABLETON_GM.mid, 1-based measures, as imported to Songsterr.

The 16-step ladder is a notation constraint. A sampler wants the real gradient, so the exported MIDI carries continuous velocity from the same measured attack strength:

lanekicksnareclosed hatopen hatridecrashside sticktomsbell
distinct velocity levels101939945101933142 / 30 / 204

Timing carries each hit's measured deviation from the grid rather than a random humanize, mean-centred per lane so the average performance stays locked to 127 BPM: mean +1.66 ms, standard deviation 14.8 ms, clamped to ±40 ms.

Two files, because the mapping differs:

10. Files

Source for every bar number in this section: Sean_song_MULTIMIC_v19.gp5 and Sean_drums_v19_ABLETON_GM.mid, 1-based measures, as imported to Songsterr.

All under ~/Projects/_outputs/songsterr-sean-bass/v19-dynamics/. Nothing the sibling chat is holding was overwritten; v18 is untouched.

filewhat it is
Sean_song_MULTIMIC_v19.gp5the score, for Guitar Pro and Songsterr import
Sean_drums_v19_ABLETON_GM.midGM percussion, continuous velocity, measured micro-timing
Sean_drums_v19_ABLETON_DRUMRACK_C1.midwhite-keys-from-C1 rack layout
drumsep/DrumSep 5-piece separation, finished. kick / snare / toms / hh / cymbals, 57 MB each.