Repository navigation
Fuzz, DeEsser and Tremolo: Mix 0, Range 0 and Depth 0 walk there and back - #18
Merged
Merged
Conversation
Fuzz cut to its source at Mix 0 and cut back in, and DeEsser's Range 0 did the same, with a 256-frame lump of the old graph on the way back. Both now walk to the dry over 20 ms before the port switches, and walk back in from it. Fuzz's germanium chain has no mixer, so it walks on its stages' own mix; at an off-centre Bias it still comes back at once, since a walk would let the shapers' offset through. DeEsser lets its Splitters drop what they held and primes its voices afresh on the way back. The lifecycle matrix: Fuzz's Mix 0 step cells (36) and DeEsser's two Range 0 steps at 22.05 kHz are green. Fuzz's walk-in differs from a fresh instance while its output pole settles, and DeEsser's by one LSB in the block after the walk; both are declared.
…th 0 walks audiodsp#411 walks audiomath.Multiply's mix over 20 ms. Tremolo sets that mix to take Depth to 0 and back, which stepped the output 21 times the material's own steepest step at 48 kHz and 32 times at 22.05 kHz; it now steps 1.07 and 1.0 times. RingMod's Mix walks for the same reason: 176 of its step cells in the lifecycle matrix are green. The lifecycle matrix was rerun at the new pin for every class that uses Multiply; only RingMod's rows moved. The roadmap and control-smoothing.md now name what still steps.
A plain mix assignment landed on the Python-level Waveshaper as an attribute, so on CPython the shapers stayed wet through the walk while MicroPython walked them, and the two printed different lifecycle lines.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three moves that still stepped now walk over 20 ms: Fuzz's Mix to 0 and back, DeEsser's Range to 0 and back, and Tremolo's Depth to 0 and back.
Fuzz cut to its source at Mix 0 and cut back in. It now walks to the dry before the port switches and walks back in from it. The germanium chain has no mixer, so it walks on its stages' own
mix; at an off-centre Bias it still comes back at once, because a walk would let the shapers' answer to silence through (6847 LSB out of silence at patch 2, whichTheBypassComesBackAsBuiltcatches). DeEsser's Range 0 cut to its input adapter and played a 256-frame lump of the old graph on the way back; it now walks the same way, with its Splitters dropping what they held and its voices primed afresh. Tremolo needed no change of its own:AUDIODSP_PINmoves to ec82463, whereaudiomath.Multiplywalks amixmove (audiodsp#411). The pin's own commit records what else moved beneath the effects.How I checked: renders of a 110 Hz triangle through each move, plotted against an instance that never moved. The steepest step after the move, over the triangle's own, went from 20.95 to 1.07 (Tremolo Depth to 0, 48 kHz) and from 31.6 to 1.0 (22.05 kHz). Fuzz's and DeEsser's plots show a 20 ms walk where there was a cut; the step ratio there is dominated by the fuzz's own edges, so the plots are the evidence. In the lifecycle matrix, Fuzz's 36 Mix 0 step cells, DeEsser's two Range 0 steps at 22.05 kHz and RingMod's 176 Mix step cells are green. Fuzz's walk-in differs from a fresh instance while its output pole settles (a few hundred LSB just after the walk, under 20 within 100 ms), and DeEsser's by one LSB in the block after the walk; both are declared in
lifecycle_known.py.tools/scoped_tests.py class:Fuzzandclass:DeEsser,tests/test_level_ramp.py,validate_api.pyand flake8 pass, and the lifecycle matrix for the four classes prints the same lines on CPython, MicroPython and CircuitPython. That last check caught a plainmixassignment that landed on the Python-level Waveshaper as an attribute, so on CPython the shapers stayed wet through the walk; the walk now goes throughset()there too. The full suite is left to CI.What still steps is in the roadmap bullet: filter corners, an effect built at Mix 0 coming in for the first time (it cuts in, as every effect that walks to its bypass does today), and crossfaded patch changes.
docs/how-it-works/control-smoothing.mdsays the same.