sayit
Loud83/100SAY IT - a S.A.M. (Software Automatic Mouth) speech synthesizer machine mod for the Elektron Digitone mk1 and Digitakt mk1.
sayit is a mod for the Elektron Digitone and Elektron Digitakt, by @x2k77m1. Open source under GPL-2.0, latest release v1.0b (October 2026), 5 stars on GitHub.
forElektron Digitone,Elektron Digitakt·by@x2k77m1
Unclaimed. Is this yours? Sign in with GitHub as @x2k77m1 to claim it.
sayit-1.0b-digitakt.elemod· 736 KB· +1 file
GPL-2.0· x2k77m1/sayit·downloads come from the creator’s GitHub releases
v1.0bSAY IT 1.0bLatest2 files
SAY IT 1.0b is a fix release for both machines: triggering a word no longer spikes the DSP meter or clicks a neighbouring track's FM voice.
What changed
A note start was carrying more than one audio block could hold. The block that started a word carried SAM's whole reciter and its rule tables, then the chunk's frame list, every phoneme blend, two walks of the frame slots, a full lookahead of synthesis and, at the first note after a machine load, the 32 formant entries THRT and MOUT rewrite. The render runs at interrupt level, 1500 blocks a second of 667 us each, and the machine's code and tables sit in DDR with no cache in front of them.
- The recitation runs ahead of the trigger. The UI task builds each track's phrase into a plan, one token a tick, and a note start only copies the packed stream it needs: the render never recites. A token the plan has not reached yet leaves the voice silent for a block and asks for it, so the word starts a tick later rather than stalling the block.
- A chunk's tables are made in slices. The frame list, blends and contour arrive a slice a block with silence until the last one, and the machine's per-block hook runs every block and holds the writer back in the block that finishes a chunk - so a block carries a slice or a ring refill, never both.
- The formant pair is cached and primed on the UI task instead of being rebuilt inside a note's first block, and the port's writer stops two blocks (
SAM_LOOKAHEAD) ahead of the reader rather than filling the ring in one call.
In the cycle model the render's worst block is now 64.9% of its 667 us period with none late, against 120% with two late at 1.0a. On the Digitakt the same work is what the machine's own render hook does once per block.
The two machines
asset device stock OS companions to tick in elekloader sayit-1.0b-digitone.elemodDigitone mk1 / Digitone Keys 1.44 core-dn1 4.0 + machines 0.2 sayit-1.0b-digitakt.elemodDigitakt mk1 1.54 core 4.0 + machine-pages 1.2 Machine id 77 on both. On the Digitone the five controls are borrowed FM parameters on the SYN first pages; on the Digitakt they are the machine's own SRC-page parameters and the machine renders the track's audio itself. Nothing else about how the machines behave has changed: a phrase typed at 1.0a is the same phrase here.
Install
This release is the mod, and nothing else - no OS image, because a custom image contains Elektron's firmware and belongs on your own unit only.
- Build a custom OS with elekloader, in the browser at https://irpina.github.io/elekloader/ or from source with
python -m elekloader: your own stock OS file for that device, this release's asset for that device, and the companions above. - Send the result to the unit with Elektron Transfer, as for any OS update.
- If a custom OS will not start: hold FUNC while powering on, press TRIG 4 (OS UPGRADE) and send the stock OS
.syx. The bootloader is never touched, so that always restores the unit.
Controls, the naming screen's keys, the C5 token map, where a phrase is kept on each device and the upstream limits are all in the README.
Checksums
file sha256 size sayit-1.0b-digitone.elemod269b41ad87d4385de2b830d24f32a88a787cc676e91f86d903bbb74e0a807a7b496 098 bytes sayit-1.0b-digitakt.elemod25f671ed9550d4fdec2ab79fa49729465e586ce703e6d559035cab9bc5b5beaa753 845 bytes What is verified
- 222 host checks over the real C core, green, including the plan (a note started from a plan is the note started from the text, sample for sample), the sliced setup and the two-block lookahead. SAM parity 20/20: the port in
sam/still renders byte-identical streams to upstream SAM (s-macke/SAM). - Both
.elemods lint and link at 1.0b for their own device (core 4.0 > machines 0.2 on the Digitone, 0 sites, RAM 145 316 of 1 310 720 bytes; core 4.0 > machine-pages 1.2 on the Digitakt, 0 sites, RAM 201 860 of 262 144 bytes), and the patch step verifies every written section byte for byte. - The payload in each asset is byte-identical to the corresponding 0.1e build apart from the version and author fields, so this release is the code that was measured, not a rebuild of it.
- Digitone: verified on hardware at 1.0b.
- Digitakt: tested in digiemu only, not on a Digitakt.
Licence
SAY IT's own code is GPL-2.0-or-later, by x2k. Unofficial and not affiliated with Elektron; it contains no Elektron code.
Its voice is S.A.M. by Don't Ask Software, 1982, in Sebastian Macke's C translation (https://github.com/s-macke/SAM). Neither carries an explicit licence and SAM's vendor no longer exists, so the provenance is stated plainly in
sam/README.mdand the original authors are credited. If an author or rights holder objects, open an issue and it will be removed.v1.0aSAY IT 1.0a2 files
SAY IT puts S.A.M. - Software Automatic Mouth (Don't Ask Software, 1982) inside an Elektron box as a machine: type a phrase on a factory-style naming screen, then play it from C5 upwards, one word (WORD) or character (CHAR) per key. The voice is SAM's own reciter and formant synthesiser, its 8-bit stream resampled to 48 kHz and handed to the track's voice, so the stock filter, mixer, effects, AMP envelope and LFOs still shape it. Every track has its own phrase and its own voice.
The two machines
asset device stock OS companions to tick in elekloader sayit-1.0a-digitone.elemodDigitone mk1 / Digitone Keys 1.44 core-dn1 4.0 + machines 0.2 sayit-1.0a-digitakt.elemodDigitakt mk1 1.54 core 4.0 + machine-pages 1.2 Machine id 77 on both. On the Digitone the five controls are borrowed FM parameters on the SYN first pages; on the Digitakt they are the machine's own SRC-page parameters and the machine renders the track's audio itself.
Install
This release is the mod, and nothing else - no OS image, because a custom image contains Elektron's firmware and belongs on your own unit only.
- Build a custom OS with elekloader, in the browser at https://irpina.github.io/elekloader/ or from source with
python -m elekloader: your own stock OS file for that device, this release's asset for that device, and the companions above. - Send the result to the unit with Elektron Transfer, as for any OS update.
- If a custom OS will not start: hold FUNC while powering on, press TRIG 4 (OS UPGRADE) and send the stock OS
.syx. The bootloader is never touched, so that always restores the unit.
Controls, the naming screen's keys, the C5 token map, where a phrase is kept on each device and the upstream limits are all in the README.
Checksums
file sha256 size sayit-1.0a-digitone.elemod6e5dee14078d92d027c8c2b0fb618098963404b39ae77873feefcd7fc5cc9e45377 710 bytes sayit-1.0a-digitakt.elemodb6d29711f362f853e8add8ee042ff8dbd00b8794691004067b543fe9bfd5c502606 247 bytes What is verified
- 139 host checks over the real C core, green, and SAM parity 20/20: the port in
sam/renders byte-identical streams to upstream SAM (s-macke/SAM). - Both images built from this tag boot, settle and run in digiemu 0.4.1 with no violations of their own, and every scripted screen matches the stock firmware.
- Digitone: played on hardware at OS 1.44 - the MACHINES tile, both pages, the naming screen and its keys, the five knobs, p-locks playing their values, a held trig showing its step's locked values, one SAY IT per track with its own settings and voice, the two system LFOs, and the page staying up through RECORD+PLAY while FUNC+RECORD's COPY PATTERN puts it aside.
- Digitakt: emulator only. It has not run on a Digitakt yet, and no phrase has been seen to survive a power cycle - treat it as a working port nobody has heard on that box.
Licence
SAY IT's own code is GPL-2.0-or-later, by x2k. Unofficial and not affiliated with Elektron; it contains no Elektron code.
Its voice is S.A.M. by Don't Ask Software, 1982, in Sebastian Macke's C translation (https://github.com/s-macke/SAM). Neither carries an explicit licence and SAM's vendor no longer exists, so the provenance is stated plainly in
sam/README.mdand the original authors are credited. If an author or rights holder objects, open an issue and it will be removed.- Build a custom OS with elekloader, in the browser at https://irpina.github.io/elekloader/ or from source with



