Repository navigation
Conversation
…d each track's FM test once a frame, and stock renders a track the engine would not change Installed on no track, FM Synth cost points of every frame on every sample track: its test for an FM track read battery RAM two or three times a track, and GLIDE once. The reads are now taken at a frame's first use, and a track that is not FM, holds no synth voice, has GLIDE off and starts no voice goes straight to stock's renderer. No function changes. Not yet a release: no version, release notes or TESTING entry; not heard on an FM track. The machine port's pin and recipe follow the changed source. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
… measurements, USB package No function changes. The package is the build of ed6188e's source and is byte-identical after merging main. Listening checks on the unit are still open and listed in TESTING.md. The package manifest row and the machine recipes are left to the combined base branch, which recaptures them once. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Owner
Author
|
Closed into #1502: all changes that need a new Octatrack base go out as one base update. This branch is merged there with its commits, and its description and test notes are carried over. |
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.
Draft, work in progress: an optimisation of FM Synth's render path, to be released as 0.1.3-experimental. No function changes; FM Synth is Tim Hastie's module, so this only makes the existing behaviour cheaper. Not ready to merge (see "Still to do").
Why
A tester reported a laggy unit with Amiga and FM Synth installed (SELF TEST: CPU 100 %). FM Synth costs frame-interrupt time on every sample track even when no track uses it: its render is called for every STATIC and FLEX track, and each call tested "is this an FM track" by reading the Part index from battery RAM (about 0.5 µs a read), two or three times a track, plus the GLIDE byte once.
What changes (
upstream/synth/poly.s)fm_fr_sync,fm_fr_native), keyed on the frame builder's ping and refreshed after 128 uses in any case. Only the render path uses them; the panel, key and MIDI hooks still read the Part themselves.sy_render, a track that is not FM, holds no synth voice, has GLIDE off and starts no voice in this call goes straight to stock's renderer. With GLIDE on, or when a legacy FMSYNTH sample starts, the original path runs as before.machine-ports.jsonandmachine-recipes.json: the port's source pin and the recaptured recipe (38 copies, no fills, as before).Measured
Owner's MKII, a dev twin of the base at main
18b1cceea, one busy project (the one loaded that day), FM Synth on no track,npm run device -- guard:The stopped figures were taken after playing, in the order none, 0.1.2, this branch; treat them as indicative.
A sampling profile of the playing unit puts the remaining 6.7 points at about 3.6 in the module's own hooks and about 3.8 in the base, mostly
guarded()inmachine_registry.c: with aRENDER_FLEXmachine installed, every FLEX render is timed. That is base work for its own pull request and the next base.Still to do
module:doctor,pr:ready.Tried and dropped
Leaving unowned FLEX tracks to stock (no
RENDER_FLEX) measured 69.4 % playing, but removes GLIDE on FLEX sample tracks and the legacy FMSYNTH samples. Not acceptable for another author's module.What the guides lacked
docs/MODULE_PERFORMANCE.mdnames the battery-RAM reads but not the base's cost for aRENDER_FLEXmachine; to add once the base side is settled.🤖 Generated with Claude Code