Skip to content

ShimmerHall plays on every board; Phase 6's classes adopted - #140

Merged
bdbarnett merged 6 commits into
effects/phase6from
effects-p6/final
Oct 13, 2026
Merged

bdbarnett merged 6 commits into
effects/phase6from
effects-p6/final

Conversation

@bdbarnett

Copy link
Copy Markdown
Contributor

ShimmerHall now plays on every board, and the seven rebuilt Phase 6 effects are now what audioeffects.<Name> and create() serve.

ShimmerHall's defaults are now Octave Rise. That is Octave Bloom in Rise at Rise 0: one octave, once, with the hall starting at once. On an ESP32-S3 it runs at about 58 % of a block. Octave Bloom, the old defaults, moves to patch 6. The docstring says the Bloom patches (Octave Bloom, Short Stagger, Fifth Halo) can't keep up on an S3 and that the defaults and every Rise patch can. The tests that measured Bloom at the defaults now ask for Bloom by name, so every trait is still tested where it was.

Adopted: StereoWidener, Rack, Octaver, PitchShifter, Harmonizer, AirSpace and ShimmerHall are now in ADOPTED. The old classes stay in pitch.py and rack.py, and the tests that exercise them name them there. The old rack.ShimmerHall names the old Octaver directly. Every other served class renders byte for byte as before (329 cells at the defaults and every patch).

Checked:

  • CPython 3.12: the scoped tests for the contract and all seven classes, plus test_rebuilt_registry, the library, pitch, racks and kit tests, validate_api, validate_metadata and flake8.
  • Library smoke: 45 classes, 318 patches, 0 failures on CPython, unix MicroPython and CircuitPython.
  • ShimmerHall's lifecycle matrix: no red cell on any of the three interpreters.

… Rise 0, which an ESP32-S3 keeps up with; Octave Bloom moves to patch 6

Patch 0 is now Rise at Rise 0 (steps 127, 89, 0, 90, 96, 94, 64, 91, 32),
and the old defaults are patch 6, Octave Bloom. The S3 sentence names the
Bloom patches as they now are. Tests that measured Bloom at the defaults
ask for it by name, so every trait is still held where it was.
…ShimmerHall are adopted: Phase 6's seven

ADOPTED names all seven, so audioeffects.<Name> and create() serve the
rebuilds. They stay under rebuilt/, and pitch.py and rack.py keep the old
classes until the rebuilds are promoted.

The old ShimmerHall built its octave branch by NAME with the old Octaver's
down= and up=, which the rebuild refuses, so it now names pitch.Octaver
directly, as it already does for the tape delay and the reverb. Its render
and AirSpace's old rack are unchanged when built from rack.py.

Tests: each class gains an "adopted is what the package serves" test (create()
returns the rebuild), and the registry names all fifteen adopted classes; with
ADOPTED cut back to the first eight, all of them go red. The tests written
against the old classes by their served name now name them from their own
module: test_cpython_effects_pitch (the shifter-based Octaver's octave reach
and shifter count) and test_cpython_effects_racks (the old Rack, ShimmerHall
and AirSpace). Their assertions are unchanged.

The CHANGELOG entries for the seven say they are adopted (2026-10-13), and the
note on the soundtrack racks now includes the octaver.

Gates, this tree: validate_api 55 instruments / 45 effects; metadata valid;
flake8 clean; contract and the seven classes' scoped tests, the kit and the
registry OK; the library smoke 45 classes, 318 patches, 0 failures on
CPython, MicroPython and CircuitPython. The CPython digest census (burst plus
two seconds, every served class at the defaults and every patch) moves only
the six served names whose rebuilds differ from the old classes, onto the
rebuilds' own digests; Rack's default chain is a wire either way, and every
other class is byte-identical.
At the Rise defaults the hall sounds at once, so a Size or Mix jump early in
the render lands on sound and steps the output: the disclosed family limit
(a control that jumps makes the output step; moving Size empties the hall).
On CircuitPython, Octave Bloom loaded before the first pull now re-arms
Bloom's shifter from the defaults, and CircuitPython's own PitchShift keeps
its positions through a clear, as for the other Bloom patches.
@bdbarnett
bdbarnett merged commit 577532d into effects/phase6 Oct 13, 2026
9 checks passed
@bdbarnett
bdbarnett deleted the effects-p6/final branch October 13, 2026 20:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant