50% off with discount code EARLY50

Changelog

Release notes, newest first.

v1.5.1

Fixed an issue with non-MuOS CFW in the launcher script.

v1.5.0

MIDI Out

ElkTracker can now drive external synthesisers and MIDI hardware. Set any instrument's TYPE to MIDI to route its notes out over a class-compliant USB MIDI interface instead of synthesising locally.

The MIDI instrument has five fields: CHAN (output channel 1–16), BANK (bank select MSB CC 0, 1–128 or ---), PROG (program change, 1–128 or ---), SCALE, and ROOT. Bank and program changes are sent only when the value actually changes, so switching patches mid-sequence doesn't interrupt notes on other steps.

Everything that makes sense for an external device works: note triggers, note OFF, chain-level transpose, the CHD chord FX (sends additional Note Ons for each chord tone), VOL (sets Note On velocity, 0x00–0xFF mapping to MIDI velocity 0–127), KIL, and RTG. Panic (Select+Start) sends MIDI All Notes Off on every channel. Full setup guide and a complete list of supported commands is in the MIDI Out chapter of the manual.

A new MIDI section in Settings → Diagnostics shows detected ports and confirms whether your interface is ready, writing the same report to MIDI.log in your data root.

Bug fixes

  • Wavetable FINE was silently ignored — sub-semitone tuning now works on Wavetable instruments as documented.
  • Slice nudge (A+↑↓ on a selected slice in the waveform editor) was documented but never implemented. It now moves the slice point and keeps slices sorted.
  • CHD chords didn't glide — only the root voice received the GLI offset, so a gliding chord fell apart. All chord tones now glide together.
  • Note-OFF, VOL, PAN, SDA, SDB, and KIL didn't reach Drum pad voices, since drums use a separate voice pool. These commands now apply to all active pad voices on the channel.
  • COLLECT didn't gather Drum pad samples, so collected projects silently shipped incomplete. Pad samples are now included.
  • WAVE_FORMAT_EXTENSIBLE WAV files containing 32-bit integer PCM were decoded as float, producing noise. The subformat GUID is now read correctly.
  • PRB 00 (documented as "never fires") fired ~1/256 of the time due to a boundary bug. 00 now truly never fires; FF now fires unconditionally; 80 is exactly 50%.
  • FIT xBAR with an extreme ratio would fail with a confusing "no free slot?" error. It now shows a clear FIT RATIO OUT OF RANGE status.
  • Chain screen copy/cut/paste/dive on the label row could read/write one position before the start of the steps array. Guarded. A project serialisation bug in send-bus sync fields (format v16/v17) could corrupt fields written after them in projects round-tripped through an older format version.

Splash screen

The boot screen now shows the actual ElkTracker wordmark instead of text drawn in the bitmap font, and the version string is displayed so you always know exactly what build you're running.

Other changes

Drum instrument: the SEMI field has been removed. Drum pads always play at their sample's natural pitch regardless, so the field had no effect.

v1.4.0

Instruments

Drum Sampler (DRUM)

New instrument type. Each instrument holds 8 pads mapped to notes C4–G4. Each pad has an independent sample slot, volume, and choke group. Triggering a drum instrument allocates from a 16-slot polyphony pool so multiple pads ring simultaneously without stealing each other. Choke groups work across pads and across channels.

Paraphonic Chord Mode (CHD FX command)

Any synth instrument (Macro, Multi, Reso, Sub, Wavetable) can play a chord by placing a CHD command in the phrase. 16 shapes available: MAJ, MIN, 5TH, MAJ7, MIN7, DOM7, SUS2, SUS4, AUG, DIM, DIM7, MMAJ7, MAJ6, MIN6, ADD9, MADD9. Up to 3 extra chord voices per channel run through the same instrument.

Synth volume boost

Macro, Multi, and Reso engines now apply a ×1.5 output gain to match the perceived loudness of sampler-based channels.

Song Screen

Right panel — live channel table

Shows CH / IN / NOTE for all 8 channels in real time. Row background and text brightness fade with channel level.

Right panel — waveform grid

3×3 grid of mini waveform displays for channels 1–8 plus master (M). Updates at ~172 fps (256-sample accumulation windows). Active channels render in accent colour; silent channels dim.

Project name in header

The word SONG is replaced with the current project name. A small accent-coloured dot appears to the right of the name when there are unsaved changes.

Quality of Life

Button Mapping Wizard

The manual config of gamepad.cfg seemed to be tripping a few people up, so I added a new wizard to map buttons that can be ran from the settings page. This wizard also runs on the first load of ElkTracker, or if a gamepad.cfg doesn't exist. The completed config is saved to gamepad.cfg.

Double-tap to create in next free slot

Tapping Edit (A) twice quickly on an empty cell finds the next unused chain (Song screen), phrase (Chain screen), or instrument (Phrase screen, instrument column) and fills the cell with it. Single-tap still inserts the last-used value as before.

Reset on project load / new project

Loading a project or creating a new one now resets all cursor positions, scroll offsets, view context (active chain, phrase, instrument), and undo/redo history. You always start at row 00 on the Song screen.

Battery indicator

Status bar shows a battery widget (level + charging state) on devices that report power info via SDL. Refreshes every 10 seconds.

Unsaved-changes indicator

A dot in the accent colour appears next to the project name whenever there are uncommitted edits. Clears on save or project load.

v1.3.1

Bug fixes

Retrigger (RTG) overhauled

The RTG command was effectively broken for most users. Several issues fixed:

Default speed changed to 16. The old default of 6 ticks per row made the RTG parameter unusable with hex-style editing — pressing Up on the param column jumps by 16, which immediately puts you above the tick count. At speed 16, the full low-nibble range (01–0F) is usable without adjustment.

Out-of-range params now clamp instead of doing nothing. If the RTG param is ≥ the current speed setting, it now clamps to the highest valid value rather than silently firing zero times. This means RTG 10 at speed 16 now retriggers every 15 ticks (once near the end of the row) instead of never.

RTG now defaults to 03 when selected. Switching a FX command to RTG with an empty param no longer leaves it at 00, which was a silent no-op. The param auto-sets to 03 (trigger roughly four times per row at default speed).

Slice + Retrigger fixed

Two interactions between SLC/slice modes and RTG were broken:

SliceMode: Note + RTG was retriggering at the melody pitch instead of the correct slice. The voice now re-triggers at the instrument's slice root note and re-applies the correct slice region for each retrigger.

SLC command + RTG was ignoring the SLC slice and replaying from the sample start on each retrigger. The active slice selection is now carried through for the full duration of the row.

MODAL synth removed

The MODAL (Elements physical modelling) instrument type has been removed. It was causing hard crashes due to incompatibility between the DSP engine's floating-point assumptions and the ARM Linux audio environment.

Existing projects that contain MODAL instruments will still load — those instruments appear as MODAL in the type field but produce no sound. Change the TYPE to any other instrument to repurpose the slot. MODAL cannot be selected for new instruments.

v1.3.0

New Instruments

CHIP — 4-channel chiptune synthesiser Inspired by Mutable Instruments Edges. Four independent channels (A, B, C, D), each with a selectable waveform: SQR, P25, P12, TRI, NES (staircase triangle), SIN, NSE (pitched noise), or OFF. Channels B/C/D have a semitone offset and per-channel volume for chords and detuned unisons within a single instrument. All four channels share an ADSR envelope, filter, and the standard VOLUME / PAN / SEND / LFO / MOD parameters.

MODAL — physical modelling synthesiser Three simultaneous exciters — BOW (friction), BLOW (breath/wind), and STRK (mallet/impulse) — drive a modal resonator with three models: MODAL, STRING, and STRNG2. Shape the resonator with GEOM, BRIGHT, DAMP, and POS. ENV SH controls the exciter envelope shape; SPACE adds internal reverb. Full LFO, MOD, and common parameter support.


Project & Save

  • Overwrite confirmation — SAVE now shows a dialog if the file already exists, with OVERWRITE or CANCEL options.
  • SAVE NEW — saves as a fresh file (name-1, name-2, …) without ever touching an existing file. Good for versioning.
  • Safe auto-save on quit — the auto-save on exit now writes to AUTOSAVED.elk instead of the current project file, so named saves are never silently overwritten.

Playback

  • Chain / phrase isolation — on the Chain or Phrase screen, Select+Start when stopped plays the current chain or phrase in isolation (looping). The status bar shows a C or P label next to the play triangle while active. Select+Start while playing still triggers PANIC as before.

Instrument Screen

  • B resets to default — pressing B on any parameter field resets it to its factory default value. Previously B had no effect on the Instrument screen.
  • A-tap opens file browser — tapping A on the SAMPLE (Sampler) or WTABLE (Wavetable) field opens the file browser directly, the same as pressing R/Dive on those fields.

Status Bar Hints

The status bar now shows contextual hints next to the transport symbol:

  • Phrase screen (FX column selected) — full name of the current FX command (e.g. PROBABILITY, ARPEGGIO, GLIDE) instead of just the 3-letter code.
  • Instrument screen — description of the highlighted parameter (e.g. Attack time, Filter cutoff, Synthesis model).
  • Track screen — descriptive names for insert FX parameters (e.g. Gain, Bit depth, Cutoff) rather than the generic P1/P2 labels.
v1.2.0

Instrument Screen — Two-Page Layout

The instrument screen is now split into two pages:

  • Page 1: all type-specific and common parameters, arranged in two columns (type-specific left, common right: VOLUME, PAN, CUTOFF, RES, SEMI, SCALE, ROOT, CHOKE).
  • Page 2: LFO 1, LFO 2, MOD 1–4.

Navigate to the bottom of either column to flip pages. Each page has a page indicator (1/2 or 2/2) in the top-right corner.

Wavetable — FINE Tuning

Wavetable instruments now have a FINE field (sub-semitone tuning, ±100 cents), matching the Sampler engine.

Sampler — EDIT Field

The waveform editor entry point on the Sampler instrument screen is now labelled EDIT (was WAVE >). Functionality is unchanged.

Send Bus B — Sync Mode

The ping-pong delay (Bus B) now supports a SYNC / FREE toggle:

  • FREE: delay time is a free-running knob (~10 ms–1 s).
  • SYNC: delay time is set as a musical fraction of a bar — N/D where N (numerator, 1–8) is adjusted with A+←→ and D (denominator: 1, 2, 4, 8, 16, 32) is cycled with A+↑↓. Dotted values (1.5×) are included in the cycle and shown as N/D·. Delay time updates in real time when BPM changes. Binary format v17.

Labels

Chains, phrases, and instruments can each have an 8-character name, editable from the top name row of each screen. Labels are shown at the top-right of the parent screen when the cursor is on that item (e.g. chain label appears on the Song screen). Saved with the project. Binary format v15.

Quick Navigation

On the Chain, Phrase, or Instrument screen: Select+R jumps to the next item in the parent list (next chain in the same column / next phrase in the chain / next populated instrument); Select+L jumps to the previous. Cursor resets to row 0 on each jump.

Independent Channel Advancement

Each channel now moves through its column independently. When a channel finishes a chain it scans forward for the next non-empty cell in its column, skipping gaps, and wraps to the first filled row when it reaches the bottom. Channels with different numbers of entries drift in and out of phase, creating evolving polyrhythm with no extra setup. A dot above each cell shows the channel's current play position.

Song END Blocks

Press B on an empty song cell to place an END block (EN). When the sequencer reaches it, that channel stops permanently until Play is pressed again. B on an END block clears it.

Font

Switched to a 5×7 pixel font with proportional spacing for prose text (help screens, labels). Monospace grid cells are unchanged.

v1.1.0

LFOs

Each instrument now has two assignable LFOs. Scroll past the type-specific fields on the Instrument screen to reach the LFO 1 and LFO 2 sections.

  • Assign the LFO to any modulatable parameter: Volume, Pan, Pitch, Cutoff, Resonance, WT Pos, Send A, Send B
  • Sync mode locks the LFO rate to the project BPM as a note value (1/1 through 1/32); Free mode uses a continuous hex rate
  • Depth (00–FF) controls the modulation amount
  • Retrig optionally resets the LFO phase on each note trigger
  • Parameters targeted by an LFO show a ~ indicator on the Instrument screen

MOD Commands

  • Four MOD slots per instrument let you set parameter values directly from the phrase FX lanes.

Assign a slot to a target on the Instrument screen, then use MO1–MO4 in a phrase step to write a value (00–FF) to that parameter. The change applies to the playing voice immediately and is reflected on the Instrument screen. MOD and LFO can both target the same parameter — the LFO modulates around whatever the MOD command last set.

Neon theme

  • A new Neon colour palette with a #d946ef magenta accent is now the default theme for new projects. Switch between all five themes in Settings.

UX improvements

  • Song screen cursor now has an accent-colour border, making the selected cell visible on all themes
  • Instrument screen now scrolls — a v arrow appears when more fields are below. Parameters targeted by an LFO or MOD slot are marked with ~
  • QUIT option added to the bottom of the Project screen — exits to the OS (auto-saves if licensed)
  • Export progress — EXPORT WAV and STEMS now display a Rendering… message before the blocking render starts, so the screen no longer looks frozen
1.0.0

ElkTracker v1.0.0

ElkTracker is a tracker-style groovebox built for handheld Linux devices (Anbernic RG351V). Play, chop, and sequence samples directly on the device with no computer required.

Sampler

Waveform editor with OFS (offset) and REV (reverse) commands Autoslice — chop samples automatically by transient detection or grid Timestretch — fit-to-grid, percentage stretch, and Paulstretch modes Fractional pitch offset and glide between notes

Synthesis

Multi and Reso synth engines (MIT-licensed DSP) Insert FX per instrument: LP/HP filter, flanger, phaser, saturation

Sequencer

Tracker-style step sequencer with scale mode — lock note entry to a key Full undo/redo and clipboard (copy/paste patterns and selections) PANIC button to silence stuck notes

Mixer

Per-track mixer screen with levels and routing

Device

Hardware-bound offline licensing — one licence per device, no internet required Boot splash + chime In-app manual (Settings → HELP) User preferences persist across sessions (theme, data root, last project) Gamepad mapping via gamecontrollerdb.txt Install: unzip and copy the ElkTracker/ folder into your ports directory. See INSTALL.txt for full instructions.