Skip to content

Wave 3 objects: ambitap.panbin~ and ambitap.distance~#3

Merged
tap merged 3 commits into
mainfrom
claude/ambitap-roadmap-max-assessment-tiuszu
Jul 3, 2026
Merged

Wave 3 objects: ambitap.panbin~ and ambitap.distance~#3
tap merged 3 commits into
mainfrom
claude/ambitap-roadmap-max-assessment-tiuszu

Conversation

@tap

@tap tap commented Jul 3, 2026

Copy link
Copy Markdown
Owner

Summary

The first two Wave 3 objects from the ROADMAP, developed in parallel and integrated:

ambitap.panbin~ — direct per-source binaural panner. Mono + (azimuth/elevation) → stereo through a per-direction HRTF reconstructed from the built-in order-5 KEMAR SH set (the same sum probe_response performs internally, kept in the time domain), resampled to the host rate, convolved by one partitioned_convolver per ear. No ambisonic bus, no order-limited blur. Direction changes are click-free: the control thread builds a fresh convolver pair and publishes it through a lock-free single-slot handoff; the audio thread adopts at a block boundary, crossfades one block, and parks the retired pair for the control thread to free — the audio path never allocates or frees, and every pair lives in exactly one of three ownership slots.

ambitap.distance~ — distance cues for an HOA bus. Doppler delay → 1/r gain (attenuation exponent) → air-absorption low-pass → near-field compensation via the library's new dsp::nfc (per-order shelving, Daniel's formulation; merged in tap/AmbiTap#11). Delay comes first so distance modulation yields the physical pitch glide before level/tone shaping; NFC last so the shelf isn't fed through the time-varying delay interpolation. Distance-driven parameters slew with the same one-pole as doppler~.

Also: submodule bumped to AmbiTap main with dsp/nfc.h, help patches for both objects, README updated, CI bundle count 12 → 14.

Test plan

  • All 14 externals compile clean against the bumped submodule (CI path) and against a sibling checkout
  • panbin~ ownership/handoff scheme reviewed (pending/active/trash slots, atomic exchanges, adoption gated on a free trash slot)
  • dsp::nfc merged upstream with 121/121 tests green incl. an FMA-contraction leg
  • Help patches are valid JSON
  • CI: 14 universal externals build fat on macOS (this PR)
  • In-Max verification (Wave 1–3 exit criteria — needs a machine with Max)

🤖 Generated with Claude Code

https://claude.ai/code/session_012VeadvCRUHJdneFNwRbFAM


Generated by Claude Code

claude added 3 commits July 3, 2026 19:14
mono + (azimuth, elevation) -> stereo through a per-direction HRTF, without
an ambisonic bus — no order-limited blur, complements encode~ -> binaural~
at small source counts (ROADMAP Wave 3 item 1).

Reconstructs the per-ear HRIRs the same way binaural_renderer's
probe_response does internally (SH basis at the direction weighting the
built-in order-5 KEMAR SH FIRs), resampled to the host rate, into one
partitioned_convolver per ear. Direction changes are click-free: the control
thread builds a new convolver pair and publishes it through a lock-free
single-slot handoff; the perform routine adopts it at a block boundary,
crossfades one block between old and new pairs, and parks the retired pair
for the control thread to reap — the audio path never allocates or frees.

gitignore: build/ -> build*/ (per-track build dirs).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012VeadvCRUHJdneFNwRbFAM
…/CI for 14 objects

ambitap.distance~ bundles the object-placement distance cues for an HOA bus
(ROADMAP Wave 3 item 2): Doppler delay -> 1/r gain (attenuation exponent,
0.1 m clamp) -> air-absorption one-pole low-pass -> near-field compensation
via the library's new dsp::nfc (per-order shelving, Daniel's formulation).
Delay comes first so distance modulation yields the physical pitch glide
before level/tone shaping; NFC last so the shelf is not fed through the
time-varying delay interpolation. Distance-driven parameters slew with the
same 1/1024 one-pole as doppler~.

README: document panbin~ and distance~, mark Wave 3 items 1-2 code
complete (xtc~/room~ remain gated on the library's
docs/PERCEPTUAL-VERIFICATION.md). CI bundle count 12 -> 14.

Requires AmbiTap main with dsp/nfc.h — submodule bump follows once the
library PR merges.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012VeadvCRUHJdneFNwRbFAM
Brings in dsp/nfc.h (near-field compensation, double-precision section
state) and docs/PERCEPTUAL-VERIFICATION.md — ambitap.distance~ requires the
former. All 14 externals compile against the bumped pin.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012VeadvCRUHJdneFNwRbFAM
@tap tap merged commit 53a19fc into main Jul 3, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants