DigiFilter

Extra per-track filter modes (BP/BP2/COMB/TRASH) for the Elektron Digitakt mk1 (OS 1.53), as an elekloader mod.

Works withDigitakt I
Version v1.0i.2·released 40 minutes ago·40 downloads
DigiFilter
Preview picture from GitHub

About

Four extra filter types for the original Digitakt, per track, on top of the stock LP, HP and EQ modes: two band passes, a comb filter and a trashy second comb.

Highlights
  • BP and BP2 (a wider band pass), COMB (feedback comb: delay from FREQ, feedback from RESO) and TRASH (a second comb at half the delay)
  • Each type uses the track's own FREQ, RESO and filter envelope, just like the stock types
  • Extra comb controls on the second FLTR page: delay offset, harmonics, damping and feedback trim
  • Costs no more DSP than the stock filter and combines with digihealth

What you need
A Digitakt MKI on OS 1.53, your own stock OS file and elekloader with its core 2.1. The .elemod is attached to the release.

Good to know
Work in progress: the curve on the FLTR page still shows the stock shapes for the new types, and BP can clip with high resonance at some frequencies (BP2 is the gentler choice). Digitakt II is not supported.

README

DigiFilter

Extra per-track filter modes for the Elektron Digitakt mk1 (OS 1.53).

A format-2 elekloader mod, id digifilter. It adds four filter types on top of the stock OFF / LP / HP / EQ:1..5:

TYPE mode what it is
8 BP band pass (state-variable filter)
9 BP2 a wider band pass (about half the resonance)
10 COMB feedback comb, delay from FREQ, feedback from RESO
11 TRASH second comb at half the delay (a higher harmonic series)

Each mode runs per track and uses that track's own FREQ, RESO and filter envelope, exactly like the stock types. Stock TYPE values keep running the stock filter — nothing here reimplements a stock mode.

The FLTR page redraws its FREQ/RES response curve for the new types (a band-pass bell for BP/BP2, comb teeth for COMB, a trash can for TRASH) and shows a small fixed version of each shape in the TYPE box to the right of the graph:

COMB TRASH
COMB TRASH

Digitakt mk1 only. Digitakt II's filter machines are out of scope.

Status

The audio path is done and validated (BP / BP2 / COMB / TRASH), including the filter envelope, the second FLTR page's comb controls (delay, harmonics, damping, feedback trim), and the FLTR page's FREQ/RES response curve and TYPE-box glyphs, which now redraw for the new modes (a band-pass bell for BP/BP2, comb teeth for COMB, a trash can for TRASH). The DSP is budgeted at or below the stock filter's cost per voice per block. See RE_NOTES.md.

Everything in this repo builds (BUILT), lints against core and combines with digihealth (OK: the mods combine).

Known issues

  • BP (TYPE 8) can clip at some frequencies. The band-pass SVF has no output saturation (the comb does), so with high RESO near the pass-band the output can exceed full scale. Back off RESO/ENV depth or use BP2. (Tracked for a soft-clip in the SVF.)

Controls

  • FREQ (E) sets the cutoff / comb pitch; RESO (F) the resonance / comb feedback; the filter envelope (H + ADSR) modulates the cutoff exactly as the stock types do.
  • Second FLTR page, while TYPE is COMB or TRASH, reuses the stock knobs: Base (A) = delay offset, Width (B) = harmonics (delay divider 1–4), Env Delay (C) = damping, SRR (D) = feedback trim. Their stock defaults (Base 0, Width max, Env Delay 0, SRR 0) leave the comb unchanged.

How it works

Three patch sites plus an ev_draw subscription (addresses and the full reverse-engineering are in RE_NOTES.md):

  1. widen the Filter Type range field from max 7 to max 11;
  2. re-point the TYPE label formatter so 8–11 print BP / BP2 / COMB / TRASH;
  3. hook the per-voice filter call in the render and run our own DSP for TYPE 8–11, tail-calling the stock filter for everything else;
  4. subscribe to core's ev_draw (digifilter_draw, order 40): after the page has drawn, when the shown page kind is FLTR (6) and the active track's TYPE is 8–11, mask the stock graph and TYPE box and paint the BP/BP2/COMB/TRASH response curve plus the mode's small TYPE-box glyph. (This composes with the event chain; patching the page drawView vtable entry 0x401842a0 directly lost the curve in multi-mod builds.)

Our DSP is integer-only (no FPU, no libgcc): a trapezoidal state-variable filter for BP/BP2 and two feedback combs for COMB/TRASH. The cutoff and resonance are smoothed (a coefficient ramp across the block, and a fractional, smoothed comb delay) so modulating the filter does not step or click. The filter envelope is added to the cutoff exactly as the stock filter does.

Per voice per render block (measured in digiemu), TYPE 1 (stock) costs ~2400 instructions; BP/BP2 ~2800; COMB/TRASH ~1750 — so the new modes are no more expensive than the stock filter. The SVF computes its coefficients at the block's two ends and ramps between them, and the comb's interpolation and feedback each use a single 32×32 multiply.

Building

Needs the m68k cross toolchain, an elekloader checkout, the stock Digitakt_OS1.53.syx, and core (2.1). Set up the shell, then build:

export PATH="<m68k-elf bin>:$PATH"          # e.g. C:\SysGCC\m68k-elf\bin on Windows
export ELEKLOADER_CROSS=m68k-elf-
export PYTHONPATH="<elekloader checkout>"

python -m elekloader.sdk.build . --stock <Digitakt_OS1.53.syx>
python -m elekloader.lint  out/digifilter-1.0i.elemod --stock <Digitakt_OS1.53.syx> --with <core-2.1.elemod>
python -m elekloader.patch --stock <Digitakt_OS1.53.syx> --mod <core-2.1.elemod> --mod out/digifilter-1.0i.elemod --out custom.syx --version 2.0t --check

That must print BUILT, then OK: links as core 2.1 …, then OK: the mods combine. Drop --check on the last command to write custom.syx.

core is elekloader's mods/core (built, or its release). Add --with <digihealth.elemod> / --mod <digihealth.elemod> if you use it — the third site is chosen so this mod does not overlap digihealth 1.0.

Files

file contents
mod.json the mod: id, version, sites, sources, requires core
filter.c modes, coefficients, the comb DSP, the site entry point
filter_dsp.s the per-voice state-variable filter (ColdFire EMAC)
filter_glue.s the raw site entry points (labels + the per-voice dispatcher)
filter_ui.c the FLTR page response-curve ev_draw handler (digifilter_draw)
filter_tables.h g, k, frequency and comb-delay tables
tests/filter_model.py floating-point reference (svf_block, comb_gain)
tests/digiemu_filter_*.py headless digiemu traces/tests (need a digiemu checkout)
tools/disas.py disassembly helper (m68k-elf-objdump -m m68k:cfv4e)
tools/re_locate.py, tools/emu_filter.py early image/unicorn helpers
RE_NOTES.md the reverse-engineering findings

Testing

# floating-point model self-test (no toolchain needed)
python tests/filter_model.py

# live tests in digiemu (need a digiemu source checkout + a set-up firmware)
python tests/digiemu_filter_dsp.py  --digiemu <checkout> --fw <folder> --type 8
python tests/digiemu_filter_mod.py  --digiemu <checkout> --fw <folder> --type 10
python tests/digiemu_filter_cutoff.py --digiemu <checkout> --fw <folder>
python tests/digiemu_filter_curve.py --digiemu <checkout> --fw <folder>

Licence

GPL-2.0-or-later. No Elektron firmware is included or committed.

Pictures in the README load from GitHub.

What's New v1.0i.2released 40 minutes ago
digifilter 1.0i (curve animation)

FLTR response-curve animation rework.

  • COMB/TRASH: the tooth spacing now sweeps the whole FREQ range with no dead zones (continuous step), and RESO sets the tooth depth so it rises from the floor and clamps only at the extremes.
  • The displayed depth scales with FREQ/RESO directly (no curve normalisation), so turning a knob animates the curve instead of flattening it.
  • BP/BP2: narrower bell (no vertical brickwall at the box edges); the peak height follows Q.
  • Every curve now tapers smoothly to the floor at both ends.
  • Refreshed elemod + source package and the README screenshots.

Known issue: BP (TYPE 8) can clip at high RESO near the pass-band.

Discussion

From the forum. Replies you write here are posted in the thread.
#1
A format-2 elekloader mod, DigiFilter.

It adds four filter types on top of the stock  LP / HP / EQ:1..5:
TYPE   mode 
BP       band pass (state-variable filter)
BP2     a wider band pass (about half the resonance)
COMB  feedback comb, delay from FREQ, feedback from RESO
TRASH second comb at half the delay (a higher harmonic series)

Each mode runs per track and uses that track's own FREQ, RESO and filter envelope, exactly like the stock types. Stock TYPE values keep running the stock filter — nothing here reimplements a stock mode, just keep cycling through the filter types until you get to the new types.

Comb+Trash filter controls : repurposes the base / width filter controls (set to default) and replaces them with comb delay and harmonics.

https://github.com/DigiAlchemydsp/DigiFilter/releases
Log in or register to reply.
Language
Python
License
Other
Stars
14
Forks
1
Created
09-29-2026
Last commit
40 minutes ago

Added by Neutron on Yesterday · History (1 version)




User Profile Send Private Message E-mail Find all posts Find all threads Mod Tools Admin Tools