digiprism, image 1 from its README
1/7
Mod

digiprism

Rising74/100

An effects pedal for the Digitone mk1's audio inputs, four reorderable modules of effects: an elekloader mod (core-dn1 3.2)

digiprism is a mod for the Elektron Digitone and Elektron Digitone Keys, by @irpina. Open source under GPL-2.0, 4 stars on GitHub.

forElektron Digitone,Elektron Digitone Keys·by@irpina

Unclaimed. Is this yours? Sign in with GitHub as @irpina to claim it.

Downloads
0
Stars
4
Forks
0
Commits
3
Last commit
Download v0.2

Betadigiprism-0.2-os1.44.elemod· 313 KB· +6 files

GPL-2.0· irpina/digiprism·downloads come from the creator’s GitHub releases

3
Commits
3
Releases
3 commits and 3 releases in the last year
Activity · last 12 months

DigiPrism

An effects pedal for the Digitone mk1's audio inputs: four modules in a chain you can reorder, each with five effects, Color (DRIVE, WARMTH, FUZZ, WAIL, SWELL), Motion (DOUBLER, VIBRATO, PHASER, TREMOLO, PITCH), Ambience (ECHOES, TAPE, SPACE, SCATTER, REVERSE) and Grit (FILTER, COMP, LO-FI, GLITCH, STATIC), with GESTURE (knob recordings), CAPTURE (a 30-second looper and sustainer) and MIDI CCs. DigiPrism is an elekloader mod on fxkit (core-dn1 4.1). Its MIDI CCs follow the Hologram Electronics Chroma Console's published CC chart, so a controller set up for that pedal works with it too. DigiPrism is not affiliated with Hologram Electronics and uses none of its code.

DIGIPRISM is an entry in core-dn1's Mod Menu (hold a track key). While it is the active effect, DigiPrism owns the audio engine, as DigiSwarm does (fxkit's core_audio owner): the synths are silent, the Digitone's own effects are off, and what you hear is the inputs through the pedal. NO turns it off and gives the audio and the screen back. The sequencer keeps running, so PLAY, STOP and TEMPO still work and the clock can follow the Digitone's tempo. BYPASS (trig 16) passes the inputs through dry, with the delays' and the reverb's tails.

Sources. That is SETUP's SOURCE: INPUTS, the default. With core-dn1 3.4 (its insert audio) SOURCE can also be DIGITONE: the pedal then sits after the Digitone's master stage, so the synths, the inputs as the mixer has them and the Digitone's own chorus, delay and reverb all go through it, and it stays on after NO, while you play the Digitone as usual, until BYPASS. A project saved without DigiPrism starts with it off. With an older core SOURCE reads INPUTS ONLY.

DigiPrism 0.2 is a beta (a pre-release). It is an effect on fxkit: a MIXER on AMP (the inputs' levels and pans, as loud as the Digitone's own input), two LFOs on the stock LFO page aimed at its controls, p-locks kept in the pattern (RECORD, then hold a trig and turn a control), and MIDI hands the screen to the stock UI for the MIDI tracks while it keeps playing. Presets are gone: the project keeps its controls, mixer and LFOs, and a project saved with 0.1 opens it at its defaults. 0.2 was tested on a Digitone mk1 by its author (built before the effects' rename, which changed only names); it was also checked in digikit's emulator (digiemu) on OS 1.43 and 1.44. Not yet run on a Digitone Keys. Its source is also in elekloader, as mods/digiprism-dn1.

DIGIPRISM in core-dn1's Mod Menu Page 1 Page 2 Page 3 The MIXER (AMP) LFO 1 (LFO), as the stock LFO page SETUP

The screenshots are from the emulator, which has no DMA timer 0, so the C at the top right (the render's share of each block) does not read true there.

Install

The easiest way is elekloader's web page: tick DigiPrism and the + beside its Needs fxkit; the page takes the core it needs. To build it yourself you need:

  • elekloader from its main branch, with Python 3.9 or newer (see its README). DigiPrism keeps 7 MB of buffers in the Digitone profile's bulk area, which the 0.4.0 app does not know: it refuses DigiPrism.
  • This mod, fxkit and their core, from this repository's releases: digiprism-0.2.elemod, fxkit-0.1.elemod and core-dn1-4.1.elemod for OS 1.43, or the three -os1.44 files for 1.44. DigiPrism needs core-dn1 4.1 or newer and fxkit; every effect on fxkit (DigiSwarm, DigiPrism, DigiTide, DigiTriad, DigiReel, DigiHoard, DigiHalo) fits in one build with them.
  • The stock OS file: Digitone_and_Digitone_Keys_OS1.44.syx or ..._OS1.43.syx, from Elektron's Digitone downloads. elekloader recognises the file by its hash.

Build your OS on the command line (or in elekloader's window, run from source: + Install from file... the three files and tick digiprism):

python -m elekloader.patch --stock Digitone_and_Digitone_Keys_OS1.44.syx \
    --mod core-dn1-4.1-os1.44.elemod --mod fxkit-0.1-os1.44.elemod \
    --mod digiprism-0.2-os1.44.elemod \
    --out Digitone_OS1.44-digiprism.syx --version PR02

--version is the 4 characters the unit will show. Flash the .syx with Elektron Transfer, as for any OS update: connect the unit over USB, select it in Transfer and Connect, drag the .syx onto Drop files here, and press YES on the unit. Don't turn it off until the upgrade is done.

Recovery: elekloader never changes the bootloader, so the stock OS file always restores the unit. Hold FUNC while powering on for the startup menu, and press TRIG 4 for OS UPGRADE. Then send the stock .syx with Transfer.

Opening it: hold a track key on its own for the Mod Menu, then pick DIGIPRISM with its trig key (or YES). NO turns it off and gives the synths back.

0.2: on fxkit

From 0.2 DigiPrism is an effect on fxkit (../fxkit-dn1), as every effect in the build is: one at a time is active. Its Mod Menu entry makes it the active effect and opens its page; while it is active it owns the audio, page or no page, and opening another effect's entry hands that one the audio.

keyon DigiPrism's page
SYN1, SYN2, FLTRits three pages (PRIMARY, SECONDARY and MODULES)
AMPthe MIXER: IN L, IN R (the inputs' levels, as the stock mixer's: 32 unity, up to +24 dB), L PAN, R PAN (where each input sits), BAL, VOL, WDTH (the output's width)
LFOLFO 1, pressed again LFO 2: the stock LFO page (its knobs, WAVE and SPH as one wave, a turned knob's value under it), at the stock rates; turning DEST opens its list (DigiPrism's controls and the mixer's), YES picks, NO closes
RECORDLOCK mode: hold a trig and turn a control, and that step has a p-lock of it (the title bar shows the 16 steps, filled where DigiPrism has a lock); FUNC + a trig clears the step; PAGE the next 16 steps. RECORD again (or NO) leaves it
MIDIthe stock UI, for the MIDI tracks and the rest, with DigiPrism playing on; its Mod Menu entry brings the page back
NODigiPrism off: the synths again

The p-locks are the pattern's: they are kept in one synth track's lock table (SETUP's LOCK TRACK, T4 unless you pick another), saved and copied with the pattern, and play on their steps; that track should play nothing of its own (no notes, no arpeggiator) in a pattern with DigiPrism's locks, or its trigs go astray. 0.1's presets are gone: the project keeps DigiPrism's controls, mixer and LFOs (tag DCHR, 56 bytes).

The page

DigiPrism's page is drawn like the Digitone's own parameter pages, in their fonts: the tempo in the box at the top left, the page in the title bar, CAPTURE's state (with G while a gesture plays, B while bypassed) and the output's meter on the left, and eight controls, one per knob: the top row TILT, RATE, TIME and MIX, the bottom row the four modules' AMOUNT, each named by its module's effect. A bypassed module's knobs are dotted. While you turn a knob the title bar shows its value; LEFT and RIGHT, or PAGE, move between the three pages, and holding FUNC shows page 2.

PageKnobs A-DKnobs E-H
1 Prism (the primary controls)TILT (Color's tone), RATE (Motion), TIME (Ambience), MIXAMOUNT of Color, Motion, Ambience, Grit
2 Secondary (the gray labels)SENS (Color's sensitivity), DRFT (Motion's DRIFT), DRFT (Ambience's), OUT (output level)VOL: each module's EFFECT VOL (Ambience's: its wet only)
3 Modulesthe four modules' effects: turn to pick, push for on/offORDR (the order, as letters: CMAG), FLTR (FILTER's style: TILT, LPF, HPF), CAPT (CAPTURE: POST or PRE the effects), LEVL (the input level: LOW, MED, HIGH, VHI)

Pushing a knob on pages 1 and 2 sets it back to its default; on page 2 the knobs whose middle is neutral (SENS, OUT, the VOLs) show - and +. The C at the top right is how much of each audio block the whole render takes, the Digitone's and DigiPrism's (see CPU below).

ControlOn DigiPrism
A module's next effect, or its bypassT1-T4, the Digitone's track keys: tap for the module's next effect, hold to bypass it
TAP and CAPTUREtrig 15: tap tempo; hold to CAPTURE, release to play; tap to stop
BYPASStrig 16 (with DUAL BYPASS, in SETUP, the chosen modules; double tap, everything)
GESTUREtrig 13: record knob movements; again to play them. FUNC + trig 13 erases every gesture
Secondary controlspage 2, or FUNC held
Routing, filter style, capture routingpage 3 (DUAL BYPASS in SETUP)
CalibrationLEVL on page 3, and SENS on page 2
Presetsnone from 0.2: the project keeps the pedal, and p-locks (RECORD) follow the pattern
Global settingsYES opens SETUP: SOURCE (INPUTS, or DIGITONE with core-dn1 3.4), INPUT (STEREO, or MONO from input L), CLOCK, BYPASS (trails or cut), DUAL BYPASS, MIDI CC (auto channel or any), CC CLOSED
Expression pedalnot yet

Modules and effects

The chain runs in the order on page 3 (Color, Motion, Ambience, Grit by default), and MIX blends the chain against the dry signal. Each module's EFFECT VOL sets its output, and OUT the pedal's, with a soft clip before the output.

ModuleEffectIts controls
Color: TILT, AMOUNT, SENSDRIVEa tube-like drive. AMOUNT: the drive; TILT the tone before it and after it
WARMTHa preamp: EQ, compression and gentle saturation, all growing with AMOUNT
FUZZa fuzz. AMOUNT: its intensity; TILT changes its tightness, bias and tone together
WAILa fuzz into a resonant filter, opened by the playing. TILT: from smooth low tones to bright stabs; AMOUNT: drive and resonance
SWELLeach note fades in. AMOUNT: the attack and decay; SENS: when it triggers
Motion: RATE, AMOUNT, DRIFTDOUBLERtwo short voices, as overdubs. RATE: tight to slapback; AMOUNT: how much; DRIFT: random pitch jumps
VIBRATORATE, AMOUNT (depth); DRIFT: a random wave and a wider stereo
PHASERRATE; AMOUNT: depth, feedback and 2 to 12 stages; DRIFT: a random sweep
TREMOLORATE; AMOUNT: depth, and from a sine to a square; DRIFT: an unsteady rate and depth
PITCHRATE: -1 to +1 octave, gliding (the middle is none); AMOUNT: the mix, all pitched at full; DRIFT: lo-fi and unsteady
Ambience: TIME, AMOUNT, DRIFTECHOESa dark bucket-brigade delay. TIME: 30-700 ms, and turning it bends the repeats; AMOUNT: repeats, self-oscillating at the top; DRIFT: modulation and wear
TAPEa tape echo: brighter, with wow and flutter. DRIFT: worn tape, dropouts
SPACEa reverb from a small chamber (TIME left) to a cloud (right). AMOUNT: its mix; DRIFT: pitch modulation inside
SCATTERa looping delay, 40 ms to 2.5 s: moving TIME bends and folds the loop. AMOUNT: repeats; DRIFT: random double-speed loops
REVERSEbackwards windows of what just played. TIME: half speed (left) to double (right); AMOUNT: its mix; DRIFT: pitch modulation
Grit: AMOUNTFILTERthe cutoff: TILT style cuts highs left of the middle and lows right of it; LPF and HPF styles are open at one end
COMPa heavy compressor that overdrives near the top
LO-FItape: saturation, a narrowing band, wow, flutter, hiss and dropouts, in turn as AMOUNT grows
GLITCHa motor in need of service: pitch drops, wobbling level and speed
STATICstatic and crackle that follow the music, radio fading, bursts of a phone's buzz, then stutters, crushed bits and dropouts

With CLOCK on DIGITONE (or TAP, after you tap trig 15) the delays' TIME picks subdivisions of the tempo (1/32 to 1/4; SCATTER 1/16 to two bars), VIBRATO's, PHASER's and TREMOLO's RATE picks a cycle from two bars to 1/32, REVERSE's windows are a quarter note long, and gestures play at the tempo against the one they were recorded at. On FREE the knobs are continuous.

With SOURCE INPUTS Ambience is stereo. SPACE takes each side through its own allpasses into four of its eight lines, and the delays and REVERSE keep a line a side, so a stereo source keeps its sides in the repeats. On a mono source the two sides' modulation (the delays' wow, REVERSE's windows) runs apart, for width. As an insert (DIGITONE) Ambience is lean: SPACE has four lines at half the rate, and the delays and REVERSE repeat the sum of both sides (see CPU below).

GESTURE and CAPTURE

  • GESTURE: trig 13 starts recording. Each primary knob you then turn (page 1, or by MIDI) records its own loop of values, from your first move until trig 13 again, which plays them all, each knob looping on its own. A dot over a knob shows its gesture playing. Turning that knob later deletes its gesture; FUNC + trig 13 deletes all of them. Gestures are not saved.
  • CAPTURE: hold trig 15 to record (from the press), release to play. A recording under a second plays as a sustained pad (two overlapping windows); a longer one as a loop, up to 30 seconds. A tap stops it. POST (page 3's CAPT) records what you hear and plays it beside the pedal's output; PRE records what comes in and plays it into the effects. Captures are not saved.

MIDI

DigiPrism takes its MIDI CCs (the chart below) that come on the Digitone's auto channel (MIDI CONFIG > CHANNELS > AUTO CHANNEL), through core-dn1's ev_midi_cc, while its page is open; with SETUP's CC CLOSED on, also while it is closed, and with MIDI CC on ANY CH on a track's channel too. The Digitone does not apply a CC DigiPrism takes; every other CC goes on to the Digitone. MIDI CONFIG > PORT CONFIG > INPUT FROM has to let them in.

CCCC
64TILT72SENSITIVITY
65AMOUNT (Color)73EFFECT VOL (Color)
66RATE74DRIFT (Motion)
67AMOUNT (Motion)75EFFECT VOL (Motion)
68TIME76DRIFT (Ambience)
69AMOUNT (Ambience)77EFFECT VOL (Ambience)
70MIX78OUTPUT LEVEL
71AMOUNT (Grit)79EFFECT VOL (Grit)
16-19a module's effect: 0-21, 22-43, 44-65, 66-87, 88-109 the five, 110-127 off91bypass below 64, on from 64
92total bypass (0-31), dual bypass (32-63), all on (64-127)103-106a module's bypass, below 64
80GESTURE: record from 64, play below81GESTURE: erase
82CAPTURE: stop (0-43), play (44-87), record (88-127)83CAPTURE: post below 64, pre from 64
84FILTER: LPF (0-43), TILT (44-87), HPF (88-127)93TAP
94the input level: LOW, MED, HIGH, VERY HIGH by quarters95taken, does nothing

Program changes (for presets) are not mapped: core-dn1 passes mods the CCs only.

How it works

The render (dsp.c) runs at interrupt level in core-dn1's render, on each block of 32 frames (the inputs, or with DIGITONE what the master stage made): the modules in their order, MIX against the dry, CAPTURE, OUTPUT LEVEL and a soft clip. Everything is fixed point in C: samples are 16-bit with 6 dB of headroom between the modules, and the delay lines hold them at half scale. The UI (ui.c) runs in the Digitone's UI task.

  • Memory: the buffers (7 MB: Ambience's 2.7-second line, SPACE's eight lines, Motion's and Grit's short lines, the gestures and CAPTURE's 30 seconds) are a region in the Digitone profile's bulk area after DigiSwarm's, cleared at the first ticks after power-up. The code and its state take 59 KB of the 128 KB mods share; with DigiSwarm, digitables and digihealth too, 114 KB.
  • CPU: in digikit's emulator, with the factory pattern playing. With the source INPUTS the Digitone's own render shrinks to about 18% (no master stage, no voices' filters), and DigiPrism uses the time: the full SPACE takes 17% of each block, the stereo delays and REVERSE 8%, the other effects 3-7%; the default chain 24%, and the heaviest chain tried (FUZZ, PHASER, SPACE, STATIC) 27%, so the whole render stays under 45%. With DIGITONE DigiPrism runs on top of all of the Digitone's render, about 57%, and is lean: one module takes 3-8% (SPACE the most), the default chain 14%, the heaviest chain 17%, and the whole render stays under 80%. In both PHASER's wet chain runs at half the rate and slow modulation is worked out a block at a time. The emulator's timing tables assume memory without wait states, so a unit runs slower: a guard times the whole render on DMA timer 0 every block, and if the unit stays over 93% for 0.2 s it bypasses the pedal at once (no trails) and says so in the title ("CPU full: bypassed"); BYPASS turns it back on.
  • Project data: DigiPrism's controls, its latches and SETUP, with fxkit's mixer and LFOs (fx_pack), are saved with the project (tag DCHR, 56 bytes; mods share 480 there, and the seven effects, GAIN and fxkit take about 470). The p-locks are the pattern's.

Build

With the SDK and a stock OS file:

python -m elekloader.sdk.build . --stock Digitone_and_Digitone_Keys_OS1.43.syx   # out/digiprism-0.2.elemod
python -m elekloader.sdk.build . --stock Digitone_and_Digitone_Keys_OS1.44.syx   # out/digiprism-0.2-os1.44.elemod

It names no firmware address, so its 1.44 port is empty. It needs fxkit and core-dn1 4.1 ("requires": ["core", "fxkit"], "resources": {"core": "4.1"}) and an elekloader with the profile's bulk area. The source DIGITONE needs core-dn1 3.4's insert audio: DigiPrism weak-imports 3.4's core_audio_caps ("weak" in mod.json), which reads 0 with 3.2, and then offers the inputs only. gentables.py makes tables.h.

Checked

In digikit's emulator, OS 1.43 and 1.44, and with the render's own code compiled for a computer and fed test signals:

  • The firmware. A build with the released core-dn1 3.2 and DigiPrism passes every stage of the emulator's check against stock on 1.43 and 1.44, with every screen identical (and so did one with core-dn1 3.4).
  • INPUTS. With plucked notes on the inputs and the factory pattern playing: closed, the synths; open, the plucks through the pedal and the synths silent (with the inputs silent too, an rms of 6 against the synths' 1856), the whole render 40% of a block with the default chain and its full SPACE; after NO the synths again, and the stock render. With core-dn1 3.2 SOURCE stays INPUTS.
  • DIGITONE (core-dn1 3.4): SETUP's SOURCE turns to DIGITONE, the synths go through the pedal, and it stays on after NO.
  • The page and the keys. Its three pages, a knob turn and its value in the title, T2's next effect (VIBRATO, by name), T3 held (Ambience bypassed, its knobs dotted), page 3's order, SETUP, GESTURE (RATE turned while recording, then playing on its own) and CAPTURE (held 1.5 s: 1.5 s playing), as screenshots and as the state DigiPrism keeps; on 1.43 and 1.44.
  • Presets. Saved as P5 from SETUP and recalled with FUNC + trig 5 exactly (the knobs, the effects, which run, the order); an empty one changes nothing.
  • MIDI. CCs sent into the emulator's MIDI input on 1.43. Before the page was ever opened a mapped CC went on to the Digitone. With it open, each kind in the chart on the auto channel (the primary and secondary knobs, the modules' effects and bypasses, FILTER's style, CAPTURE's route and its record, play and stop, GESTURE's record and stop, bypass, the input level, TAP) set DigiPrism and stopped at core's site, and a CC outside the chart went on. The runs were split: in the timed emulator, MIDI input stops a few seconds after a track key has been held, on stock 1.43 too.
  • The effects (the render on a computer): every effect at AMOUNT 0, 64 and 127 on plucked notes, within a few dB of the dry (louder where a delay self-oscillates, FUZZ and WAIL near the top) and with no DC; PITCH's and REVERSE's octaves; the delays' first repeat at the knob's time (30-700 ms, SCATTER 40 ms-2.5 s), and on the tempo when synced; their feedback at the top bounded; SPACE's decay from 0.3 s (TIME left) to 9.4 s (right), the lean one's to 10.6 s; with INPUTS an input on L alone reaching R through SPACE and staying on L through the delays, at the lean versions' level within 1 dB; TREMOLO's rate, also synced; FILTER's three styles open where the table above says; COMP's curve; CAPTURE's pad and loop; GESTURE's loop; BYPASS's trails, and without them a clean cut; the CPU guard's trip (sustained 94% bypasses, 92% and a short burst do not).
  • CPU on the cycle clock: above.

Not yet

  • Program changes, and an expression pedal (the Digitone Keys has an input for one).
  • The source DIGITONE on a unit with a released core: it needs core-dn1 3.4, which is not released yet.
  • Presets, and gestures and captures saved: the project keeps one, and the Digitone's +Drive has no files for mods.
  • Automatic calibration: LEVL and SENS set the input level by hand.

Licence

GPL-2.0-or-later, as the rest of elekloader (LICENSE).