Skip to content

Tags: gdamdam/mdrone

Tags

v1.32.2

Toggle v1.32.2's commit message
fix(dsp): Nyquist-gated phase freeze, KS stale read index, ±1¢ played…

…-note dedup (1.32.2)

F14 REED/PIANO: the aliasing guard's `continue` skipped the partial's
oscillator phase advance while its detune-LFO kept running, so a high
partial re-entering below Nyquist on a downward pitch change resumed
with a stale phase — a discontinuity click. Phases now advance
unconditionally; the guard gates only the output contribution. Wrap
switched -= → %= because a gated partial (freq max 8 kHz × ratio up to
14.39) can step more than one cycle per sample. Sub-Nyquist output is
bit-identical (single-cycle wrap unchanged). Worklet has no node test
seam; verified by reading — gated-path-only change, zero-alloc and
loop structure preserved, all 101 node tests incl. dsp-smoke green.

F15 TANPURA: the fractional KS read `buf[idx], buf[(idx+1)%dLen]` had
no guard when a pitch change shrank dLen between blocks, leaving a
stale idx ≥ dLen reading outside the loop region for one sample.
Folded idx back into the new length at the per-block length-update
site (zero per-sample cost). Same no-test-seam caveat as F14.

F16 microtuning: mergePlayedIntervals bucketed on Math.round(cents),
contradicting its documented "within 1¢" contract — 0.4 vs 0.6 kept
distinct, boundary-crossing duplicates appended. Now compares
abs(c - kept) < 1 against every retained value. Covered by new
tests/microtuning-merge.test.mjs (both-sides window, strict-boundary,
retained-vs-dropped transitivity, cap).

v1.31.5

Toggle v1.31.5's commit message
1.31.5 — ci: drop flaky Microsoft apt repos before playwright install

packages.microsoft.com intermittently serves unsigned InRelease files
('NOSPLIT'), and 'playwright install --with-deps' hard-fails on the
apt-get update it runs as root. Remove the azure-cli and microsoft-prod
sources first (neither is needed for chromium deps), in ci and burn-in.

v1.31.4

Toggle v1.31.4's commit message
release v1.31.4

v1.31.3

Toggle v1.31.3's commit message
Bump to v1.31.3

v1.30.0

Toggle v1.30.0's commit message
1.30.0 — release: Ableton Link phase-lock, bar-multiple LFO divisions…

…, grid-quantized changes

v1.29.0

Toggle v1.29.0's commit message
1.29.0 — feat(engine): reproducible per-voice build RNG; fix(microton…

…al): just5/meantone doc fixes

v1.28.9

Toggle v1.28.9's commit message
1.28.9 — fix(microtonal): capped-voice cue refresh + tile treatment

- The 'intended but capped' cue subscribed only to LIVE SAFE, so an
  adaptive-stability stage-3 voice-density cap change (or recovery) left
  it stale until an unrelated re-render. Now subscribes to both
  subscribeLiveSafe and subscribeAdaptiveStability.
- Move the cue onto the actual voice tile (timbre-btn-capped: dashed
  border + struck label + tooltip), per the original spec — it had only
  landed on the active-voices summary. Summary title corrected from
  'Voices currently sounding' to 'Voices the scene intends — dimmed =
  capped by your device'.

v1.28.8

Toggle v1.28.8's commit message
1.28.8 — feat(microtonal): audition degrees, cents+ratio display, app…

…ly-voicing

ADVANCED → MICROTONAL is now playable and legible:
- Tap a resolved interval chip to audition that degree — a brief isolated
  preview tone via AudioEngine.auditionPitch; no scene/HOLD/share change.
- Chips show cents + just-intonation ratio where known, derived by
  matching degree cents to a canonical ratio table (~1.5c) gated to just
  tunings (ratioForDegree). No invented ratios for EDO/tempered systems.
- Explicit APPLY VOICING button for tunings with suggestedVoicing —
  applies the mix as one undoable patch (planSuggestedVoicing); tuning
  picks still never auto-change voices.
- Pure helpers in microtuning.ts (resolveTuningRows/ratioForDegree/
  planSuggestedVoicing) with focused unit tests.
- DroneLivePatch gains an optional voiceLayers field for the atomic apply.
- HELP/README/about note the new affordances. Share/session shape
  unchanged.

v1.28.7

Toggle v1.28.7's commit message
1.28.7 — feat(midi): soft-takeover (pickup) + short CC slew for stage…

…-safe MIDI

- Continuous CC targets now soft-takeover: a mapped knob only assumes
  control once its hardware value catches (~3/127) or crosses the current
  on-screen value, so a parked controller can't jump the mix after a
  scene/preset/random/mutate load. Pickup arming resets on those loads.
- Short ~20ms rAF slew per target after pickup so 7-bit steps don't
  zipper; only the settled value records to undo history.
- Triggers (HOLD/PANIC/RND/MUTATE/preset cycle) + formant-vowel enum keep
  immediate behavior. Targets whose value can't be read fall back to
  immediate dispatch.
- Pure decision logic in new src/engine/midiPickup.ts (unit-tested);
  dispatch extracted to dispatchContinuous + readTargetNorm in Layout.
- Default mappings, tombstones, and share/scene shape unchanged.

v1.28.6

Toggle v1.28.6's commit message
1.28.6 — fix(engine): seed per-voice material RNG for shared-scene de…

…terminism; voice-cap UI cue; doc/comment cleanup

- P1: VoiceEngine.setMaterialSeed seeds per-voice phase offsets + per-tick
  nudge (was raw Math.random) so shared scenes reproduce subtle layer
  motion. Decorrelated from the evolve seed; called on scene load.
- P2: VoiceEngine.getSuppressedVoices + DroneView dim/strike voice tiles
  the device cap silences, mirroring FX suppressed-by-protection.
- P3: drop stale worker OG-card diagnostics; fix four/seven voice-count
  comments (now eight); clarify README docs/parameters.md is local.
- tests: setMaterialSeed determinism + getSuppressedVoices cap logic.