Repository navigation
Octatrack: SYNTIZ track machine (SAW, PULSE, ENS, TABLE, MORPH, CHOIR), draft - #1028
Conversation
… draft A track machine with six models in a list on a double tap of the track key; the track's filter, AMP, LFOs and effects follow it. Original integer engine for the ColdFire, 32 single-cycle tables of the author's own formulas, pages built from stock's FLEX record at run time, its own render as Analog BD and FM Synth do. Host, ColdFire counts, emulator and the author's MKII: sdk/drafts/wave/TESTING.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Hi Stigmagit! Just a friendly heads-up that Sam Banks (Octabam) uses the name "Wave" for one of his Octatrack synth mods. Thought you'd want to know. Cheers! |
|
Thanks, this is a lovely draft: the anti-aliased output stage, the 32 tables from your own formulas, and the render notes you wrote up in #1027 along the way. Three things before it leaves
None of these block keeping the draft here. |
|
Thanks Zac and Jannik! For the name, would WAVES or WAVZ be distinct enough from Octabam's WAVE, or would you rather have a clearly different one? I'd keep the Once it's settled I'll rename the folder and the title, fold #1031's commit and the fifth |
|
Thanks! I'd go for a clearly different name: WAVES or WAVZ would still read as the same machine in a search, a chooser or a forum post. Pick anything of your own that says what it does. Keeping the Your plan for when it leaves draft sounds right: the rename, #1031's commit and the fifth |
The folder, the module id (syntiz.mwrm), the chooser label, the model list's title and the SRC footer, which now reads "SRC <model> > SYNTIZ" so the label is not cut. The Part signature WV and the sound are unchanged; TESTING.md keeps its dated records under the old name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Renamed to SYNTIZ: the folder ( |
The boot's battery restore keeps a SYNTIZ track's twelve bytes while the module is not yet reinstalled (beta finding 24). Folded in from the closed repeat98#1031, with its comment corrected (it said WV 1-3). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
POLY8, Analog BD, VECTOR and FM Synth filled the four ot_machines rows, so SYNTIZ could not install beside them. The table's room goes to 8 (events.json, regenerated) and the registry's ROWS to 13; a test keeps the two in step, and the host registry test fills all eight rows and checks a ninth is not read. machines.md says so, and notes the SRC footer's 18 characters measured on SYNTIZ. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hine rows (npm run octatrack:base -- --beta --write, octatrack:module-packages) The base-bound packages are bound to the new base identity; their bytes are unchanged (octatrack:module-packages -- --check: identical). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…M Synth Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r USB, power cycle) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ated base files from main, regenerated next)
…wn and eight machine rows (npm run octatrack:base -- --beta --write, octatrack:module-packages) The base-bound packages are bound to the new base identity; their bytes are unchanged (octatrack:module-packages -- --check: identical). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Octatrack: SYNTIZ track machine (SAW, PULSE, ENS, TABLE, MORPH, CHOIR), draft
A new track machine for the Octatrack, kept under
sdk/drafts/syntiz/until it is qualified. Choose SYNTIZ in themachine chooser; a double tap of the track key opens its model list (001 SAW to 006 CHOIR), as Analog BD does
for 808/909, and LEFT goes back to the machine column. The track's own filter, AMP, LFOs and effects follow it,
as for a sample.
Called WAVE until 29 October 2026, renamed after Zac's and the owner's notes: Octabam already has an Octatrack
synth called WAVE. The Part signature
WVstays, so projects saved with it still load; the sound is unchanged.next (MORF) that can sweep by itself (MSWP), and hard sync (SYNC).
own resolution from 12 bits to 1 (BIT1, BIT2); changing a table crossfades over TIME.
and Le Bivic, DAFx 2016) with a treble emphasis, and RTRG; every model but MORPH: SUB (a square an octave down)
and SUB2 (a sine two down), silent below 25 Hz.
on SRC SETUP chooses the register (C3 at PTCH 0, OCT -3..+3). SRC SETUP A-D are FINE, OCT, DRIV and RTRG in every
model. Chromatic and recorded notes therefore span two octaves, as on FLEX (a recorded note is a one-byte PTCH
lock); the author kept this over a wider PTCH unit that would put the Scale Quantizer and LFO depths on PTCH out
of step with FLEX.
Original code by the author (@stigmagit). The 32 tables are the author's own, computed from formulas by
tools/make_tables.py; none is taken or fitted from any instrument. No code, table or recording of any otherproduct, and no Elektron machine names.
How it hooks in
One
struct modwerk_machinecontributed toot_machines(order 50), built as a C runtime package(
build.py SOURCES -o syntiz.mwrm --subscribe ot_machines:wave_machine:50): signatureWVwith the model in itsversion byte (1-6), PROTECT and POOL, pages from stock's FLEX record copied at run time with PTCH kept, and its own
render writing the packer's native header and samples as Analog BD and FM Synth do (
INTEGRATION.mdcites both).The model list is adapted from Analog BD's engine browser (MIT); LEFT goes through the base's
choice_leftasVECTOR's pool choice does (MIT), re-entering stock's pool opener after the two instructions the base displaced,
as VECTOR does. It also sets the base's SETUP_ALL flag (in
mainsince #1017), so SRC SETUP's encoder E edits itsfifth control; older bases ignore the flag. The C identifiers inside (
wave_machine,Wave,wave_render) namethe oscillators and were left as they are.
The base parts, in this PR
As agreed on #1031 and on Discord, the base changes for this machine ride with it, in one base rebuild:
996abd9d:WV1-15 among the base's known PROTECT machines, folded in from the closed Improvement: Octatrack base keeps a WAVE track's bytes at boot #1031, its commentcorrected (it said 1-3). The boot's battery restore no longer refuses a bank with SYNTIZ tracks before SYNTIZ
reloads (beta finding 24).
71f6c59a: room for eight contributed machines in the chooser, not just a fifth. You asked for one morerow; the author would like the next machines (another is planned) not to need a base rebuild each. It is one
number:
ot_machines' room 8 inevents.json(regenerated) andROWS13 inmachine_registry.c, kept instep by a new test; the host registry test fills the eight rows and checks a ninth is not read. The chooser
already scrolls and its counts and clamps follow the number of machines (Fix: Octatrack base, the double-tap TRACK machine list scrolls #922), so nothing else changes. Cost:
4 bytes a row in two tables, 8 more words of event rows, 16 bytes of stack where the registry lists the
machines (the render included). If you'd rather keep it to five, it is the same two numbers.
96fa9aa5: the beta base regenerated, and the base-bound packages bound to its identity, their bytes unchanged(
npm run octatrack:module-packages -- --check: identical).What it needs before it leaves
sdk/drafts/set it names today (your suggestion on Improvement: Octatrack base keeps a WAVE track's bytes at boot #1031). The draft has no recipe yet; it comes with the move out of drafts.
npm run device -- guard, a development base), thelevel against a FLEX sample, LEFT on this source's build (
da5f1e78; the unit ran7517cd6b, before LEFT),MKI.
syntiz:build.pytitles a C runtime package by its output file'sname.
How it was checked
TESTING.md): 5,376 extreme renders over the six models under UBSan/ASan with no report; levels, DC,aliasing; pitch within 1.5 cents of stock's curve for PTCH, FINE and OCT; every knob byte reaching its control;
MORPH at MIX 0 and 127 equal to TABLE playing WAV1 and WAV2, sample for sample; each model added left the
earlier models' renders byte-identical. After the rename the host checks pass again.
tools/count_cf.sh), defaults / heavy: SAW 1,931 /4,044, PULSE 2,453 / 4,074, ENS 3,274 / 6,372, TABLE 2,027 / 3,155, MORPH 2,005 / 3,032, CHOIR 3,082 / 4,810.
Counts, not time on the unit.
main+ Fix: Octatrack base, SRC SETUP's encoder E and the double-tap window for module machines (SETUP_ALL, LIST flags) #943 +WVknown): install over emulated USB; the machine inthe chooser; the six pages; the list of six; LEFT back to the machine column and RIGHT into the list again; C3
at 130.86 Hz, FINE and OCT; sequenced notes for every model.
f49116e4…,main+WV1-15; packageda5f1e78): SYNTIZ in thechooser, "MACHINE:SYNTIZ" over the model list, the SRC footer "SRC PULSE > SYNTIZ" whole (the first try,
"SYNTIZ PULSE", cut the label), C3 at 130.86 Hz as before.
installed together over emulated USB with no refusal; the machine list scrolls to SYNTIZ on the last row and YES
assigns it. Base tests:
sdk/tests/test_machine_events.py(10 tests, the eight-row registry test and theROWS-room test among them) pass;
npm run pr:readyReady.test base beside FM Synth 0.1.2. Then the private test base
b30d9b09(main+ Fix: Octatrack base, SRC SETUP's encoder E and the double-tap window for module machines (SETUP_ALL, LIST flags) #943 +WV1-15) flashed bythe author; the six models (
7517cd6b) tried and accepted over USB beside FM Synth; reported by the author:they work and he likes the sound; a project saved with TABLE, MORPH and CHOIR tracks came back whole after a
power cycle, the machine reloading from the card (
npm run device -- missing: nothing).private test base
b30d9b09flashed from the card; SYNTIZ (da5f1e78) and FM Synth kept over USB; reported by theauthor, playing it with a friend: it works very well; a project saved with SYNTIZ tracks came back after a power
cycle (
missing: nothing).What the guides lacked or got wrong
Fixed in this PR,
docs/module-guides/machines.md: how many machines the chooser takes (eight now, and wherethat number lives), and that the parameter page's footer gives " > " 18 characters, measured
when "SYNTIZ PULSE" cut the label. Earlier gaps found on this machine went in with the
Docs:PR #1027 (merged29 October): a machine's own render, driving
ot_emu --interactive, small ranges, and the loader README on a Cruntime package's id and title.
🤖 Generated with Claude Code