Polyend Tracker audio-engine harness
Purpose: test and profile firmware patches before going near the hardware.
- Custom firmware
- Beta
- Medium brick risk
- Reversible
This project hasn't been claimed by its maintainer yet, so its details come from the community. Is it yours? Claim it
Before you start
- How hard is it?
- HardUses the command line or developer tools.
- What you need
- Comfort with the command line
- A computer
- Can it break my device?
- Small chance of trouble, with a way to recover.
- Can I undo it?
- Yes. You can go back to the official software.
Did it work for you?
Did Polyend Tracker audio-engine harness work on your Polyend Tracker?
No reports yet.
One-tap reports from owners. Bricked reports are checked before they count.
Compatibility
Devices: Polyend Tracker.
No compatibility information yet.
Getting started
From the project's README ("Setup"):
python3 -m venv .venv .venv/bin/pip install "unicorn>=2.1.2" numpy # 2.1.1 crashes on Apple Silicon mkdir -p firmware && .venv/bin/python -c "from pathlib import Path; from patch.makeptf import readhex;
img, = readhex(Path('PolyendTracker1.9.2.ptf')); Path('firmware/tracker1.9.2.bin').writebytes(img)"Song tests (m5–m7, m9–m12) expect a Tracker project copied to projects// (project.mt, instruments/, patterns/); the default name is set in m6loadsong.py. Rebuilding the patch needs clang with the ARM target (patch/build.sh); a prebuilt patch/masterfx.bin is included.
Risk and recovery
- Brick risk
- Medium
- Reversible
- Yes
- Requires opening the device
- No
From the project's README ("Master EQ + DJ filter patch (patch/)"):
- masterfx.c (v2): freestanding C for Cortex-M4F. build.sh compiles it with clang and links it with link.py (a minimal Python linker) to masterfx.bin at 0xD7000 (free flash after the image), 5,887 bytes. masterfxv1. is the first version, kept for A/B tests (applymasterfxpatch(build="v1")).
- Hook: the bl 0xd42f0 at 0x76c6a (master mixer update, class 0xc2b9c) is redirected to masterfxentry. That stub passes this (r8) so L/R state is kept apart, runs the EQ/DJ on the 32-bit accumulator, then calls the original saturator. The processing is therefore in live output and exports.
- EQ: 5 bell bands at 115/330/990/3k/9.9k Hz (Q 0.9) as topology-preserving (TPT) state-variable filters. Gains come from the firmware's Master EQ settings at 0x20004c60 (−1..+1 → ±12 dB). 0x704c0 is patched to bx lr so the codec's graphic EQ is not applied as well.
- DJ: one value −1..+1 at state+4 (setpatchparams(dj=…)). Low-pass sweeps 20 kHz→80 Hz, high-pass 20 Hz→8 kHz (TPT SVF, Q 0.8). It crossfades to dry within ±0.05 of centre, so LP↔HP changes pass through the dry signal. Controlled from the panel by Shift + Master + jog wheel (below).
- Smoothing (v2): one-pole per-block glide of all parameters (~24 ms), per-sample linear coefficient ramps inside each block while moving, and states reset when a stage switches on (a bell at 0 dB is an identity).
- Speed (v2): stage-major processing on a float block; separate non-inlined …