Skip to content

Case Study Haarlem Damiaatjes

Alexander Refsum Jensenius edited this page Jul 18, 2026 · 3 revisions

The first field validation of the rhythm module: one evening recording of the Damiaatjes — the two bells of the Grote Kerk (St. Bavo) in Haarlem, NL, rung nightly 21:00–21:30 in commemoration of the Siege of Damietta (1218). Zoom H3-VR, AmbiX, 24.5 min from street level (2026-07-17).

What the pipeline found

  • Two sources separated by strike-synchronous partial clustering: bell A (hum 475 Hz, near-ideal 1:2:2.4:3:4 minor-third profile, strike note ≈ B♭5) and bell B (hum 598 Hz, flat prime and nominal — older-style tuning, strike note ≈ D6).
  • One shared cycle of 3.1669 s (Rayleigh point-process estimate, 399 cycles): A strikes at 0 and 0.66 of the cycle (asymmetric swing + backswing), B once at 0.52. Composite: a long–short–long pattern (1.37 / 0.42 / 1.38 s), B♭ … D–B♭.
  • Phase locking: B's per-strike phase relative to A has R = 0.998 (circular SD 31 ms); the 60 s-windowed clocks agree to 7 ms SD. Two independent pendulums cannot do this — the bells are one mechanically coordinated system.
  • Repetition vs. variation: A₁ and B share their slow tempo wander (residual correlation 0.96, ±100 ms over minutes; cycle-to-cycle jitter ~30 ms), while A's backswing strike carries all the free variation (115 ms jitter, 9% missed cycles, lag-1 ≈ 0).
  • Timbre: hum T60 ≈ 17 s ≫ 3.17 s cycle — the pattern rides on a continuous B♭+D drone; 29 Hz mode pairs in bell A add strike roughness.
  • Both bells swing (rhythm.partial_fm): partials are frequency-modulated at the cycle rate (2.35 / 1.26 cents at the nominals, 30–60× above an off-rate control) — Doppler from the moving bells. Bell B swings but sounds one audible strike per cycle, so the millisecond phase lock is synchronization of two swinging bells.
  • Masking is frequency-selective (background.masking_index): the typical floor rises 9–14 dB in the bells' partial bands but only 1.3 dB in the 250 Hz–8 kHz median — "lo-fi", but surgically so.

Method notes that generalized into the toolbox

  • Partials from the cached per-minute mean PSD (minspec), contrasting source-active vs quiet minutes — no extra audio pass to find them.
  • ACF-informed onset picking and periodicity bounds (avoids the subharmonic trap the first automated run fell into).
  • Strike-triggered rise spectra as the cross-talk test: an apparent "second strike" of bell B had only bell A partials in its rise spectrum — leakage, not a strike. Now automated as crosstalk_suspects.
  • Per-partial DOA scattered over ~70° of azimuth (street-canyon reflections): per-source azimuths are sector estimates, not bearings.
  • The recorder clock was 665 s slow, calibrated against the known 21:30:00 end of ringing — the origin of clock_offset_s in calibration.json.

Reproduce

ambiscape analyze SESSION/ && ambiscape rhythm SESSION/
ambiscape taxonomy SESSION/          # after authoring annotations.json
ambiscape iso SESSION/

See Recipes for the walkthrough. The trimmed recording (speechgate PASS, 0.00% speech) is published on Freesound.

Clone this wiki locally