Wakes
Sample player firmware that combines Mutable Instruments engines.
forTeenage Engineering / KANO Stem Player (SP-1)·by@Worldwave
Unclaimed. Is this yours? Sign in with GitHub as @Worldwave to claim it.
wakes-sp1-fresh.bin· 530 KB· +7 files
MIT· Worldwave/Wakes·downloads come from the creator’s GitHub releases
v0.9.0Wakes v0.9.0Latest8 files
What's New in v0.9.0
- Custom scales: v0.9.0 lets you configure the scales used by Plaits' quantizer and Marbles' X STPS quantization, via
scales.cnfg, at<SP-1>:/WAKES/CNFG. Wakes has 7 scale slots for you to play with. Plug your SP-1 into your host while it's in STANDBY, and edit the file in a text editor. - Scala format:
scales.cnfguses the Scala.sclformat to define scales, so any scale that you build and export as .scl from tools like Scale Workshop can be pasted into a slot as-is. Wakes adds two extras on top: a weight parameter following each interval definition, which decides how prominent that note's presence is as you move Marbles' STPS upwards, andplaits = N, which acts as a threshold determining the notes Plaits' quantizer chooses to play out of the scale. The intent is to create a functionality where you can make scales appear out of chromatic tuning definitions. The file explains both states, with examples. - A scales wiki: below the
[scales_wiki]line,scales.cnfgcontains a reference library of scales for you to copy into your slots and use: the seven musical modes (Ionian to Locrian), and examples of experimental microtonal scales 31-EDO's chromatic definition and the first mode of its cute and dreamy Mothra[6]. Wakes doesn't read anything below[scales_wiki], so the library doesn't get in the way of any parsing. Copy between the two markers around each scale, scroll above[scales_wiki], and paste the definition under one of the slots [1]-[7] to use the scale. - Bigger scales: a scale can now hold up to 64 notes, so large microtonal tunings like 31-EDO and 53-EDO fit. Scales don't have to repeat at the octave either; any period works, for example the 3/1 tritave of Bohlen-Pierce.
- New default scale: whole-tone now ships in slot 7 (○○○●), so all 7 slots are filled out of the box.
- Tune By Ear: tune Plaits' FREQ by ear while checking it with TRIG, then turn the quantizer on with SCL> (T3). For most scales, Wakes takes the note you were playing as the root tuning of the selected scale. Stepping between scales keeps that root; turning the quantizer off and on again allows you to take a new one. Pelog, bhairav and shri are examples for scales that stay rooted on C. You can switch Tune By Ear on or off per scale, it is a setting in
scales.cnfg. - OCTV's two-octave lock: below the octave switch, OCTV used to lock FREQ to ±7 semitones. It now locks FREQ to two octaves around the root note. That way, FREQ's extremes land on root notes with any scale, as long as it has a period. Just below max, FREQ still sweeps full octaves of the root note, or your scale root's octaves when the quantizer is on.
- PRSTs remember Tune By Ear's root, so a PRST is loaded in the key you originally tuned it to, in case it was part of a project.
- If something's wrong in
scales.cnfg, Wakes ignores the whole file and uses the built-in scales. If you define more than 7 slots, extras get dropped. Either way, the log tells you what happened. Made a mess? Delete the file. Wakes will write a fresh copy with the defaults the next time it turns ON. - Logging:
logs.cnfghas a newscalessetting, off by default. Turn it on to see each of your scales in the log at every ON. - Updating from v0.8.2: v0.9.0 changes the PRST format to store Tune By Ear's root, so this release uses the
freshbin. Back up yourWAKESfolder first (copy it off to somewhere in your PC), then follow the Flashing steps below. Older Wakes versions can't read v0.9.0's PRSTs: if you go back to v0.8.2, those slots load as defaults.
Flashing
Read
docs/SAFETY.mdfirst. The SP-1 has no hardware reset pin.-
v0.9.0 needs the
freshbin, for everyone. It formats your storage, so if you've used Wakes before, plug your SP-1 into your PC while it's in STANDBY and copy theWAKESfolder off to somewhere in your PC first. It holds your PRSTs, your.cnfgedits and your logs. -
Download
wakes-sp1-v0.9.0-fresh.binbelow. -
Older Wakes versions and release notes are available through the repo's releases page.
-
Open https://solderless.engineering. Hold down T1+T4. Keep them held while connecting the SP-1 over USB-C.
-
Follow solderless.engineering's instructions on how to connect to your SP-1 to flash it.
-
Select the
.binin Solderless Engineering's "firmware utility" page, flash it, and once done, you can unplug. -
The first time you turn Wakes ON after flashing, it will perform a short format of the eMMC card. Give it a moment. Wakes then writes its default PRSTs and all five
.cnfgfiles,scales.cnfgincluded. -
If you had edited your
.cnfgfiles, copy your changes back into the new files by hand, from your backup. Once everything's set, delete your backups. -
For future versions, use the regular bin again, unless the release notes say otherwise.
wakes-sp1.binandwakes-sp1-fresh.binare the same files as the versioned bins, under a fixed name, so the README's download link works.When in doubt, check the files against
SHA256SUMSbefore flashing.Storage:
wakes-sp1vswakes-sp1-freshwakes-sp1-*.binnever formats the SP-1's internal storage (the eMMC). Flash it to update: your presets and files stay where they are.wakes-sp1-*-fresh.binFORMATS the eMMC the first time it turns ON, and erases everything on it, including whatever another firmware left there (stock stems, tape-looper recordings). Flash it once to set the storage up, or to start over; a progress bar shows on T1-T4 while it formats. Flashing the same fresh file again does not format a second time.wakes-sp1-fresh.binis the same file under a fixed name.- Without a formatted card, Wakes can still operate, but the storage features get turned off.
wakes-sp1-v0.9.0-fallback.binis the test-tone recovery build. Plaits and Marbles are offline. It never touches the eMMC, and is for diagnosing hardware only in case of issues.Claude's Blurb
Size vs v0.8.2
plaits vs v0.8.2
Config: plaits
base head Δ of total FLASH ( .bin)509,952 537,528 +27,576 58.85% RAM 126,964 135,758 +8,794 51.79% Sections that changed
section base head Δ rodata220,844 242,544 +21,700 bss80,460 89,250 +8,790 text283,436 289,320 +5,884 datas3,492 3,496 +4 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0xa33b8) [PASS] wakes-sp1.bin matches the ELF's loadable span (537528 B vs 537528 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] one layout per Plaits/Marbles class (175 classes) [PASS] plaits::sp1_zero calls nothing (#36) (152 B, leaf) [PASS] ParticleEngine::Reset clears without memset (#36) (no libc fill) [PASS] String::Reset clears without memset (#36) (no libc fill) [PASS] uacring_push copies without memcpy/memset (M5c) (word copies) [PASS] uacring_pop copies without memcpy/memset (M5c) (word copies) [PASS] frames_copy copies without memcpy/memset (M5c) (word copies) [PASS] storage: a failed mount never formats (FS_FATFS_MOUNT_MKFS off) (got None) [PASS] storage: normal image contains no formatter (no f_mkfs) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 537528 B (58.85% of the slot), plaits config OK: safe to hand over for flashingfresh vs v0.8.2
Config: plaits
base head Δ of total FLASH ( .bin)514,852 542,432 +27,580 59.39% RAM 127,862 136,656 +8,794 52.13% Sections that changed
section base head Δ rodata221,756 243,460 +21,704 bss81,322 90,112 +8,790 text287,408 293,276 +5,868 datas3,512 3,516 +4 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0xa46e0) [PASS] wakes-sp1.bin matches the ELF's loadable span (542432 B vs 542432 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] one layout per Plaits/Marbles class (175 classes) [PASS] plaits::sp1_zero calls nothing (#36) (152 B, leaf) [PASS] ParticleEngine::Reset clears without memset (#36) (no libc fill) [PASS] String::Reset clears without memset (#36) (no libc fill) [PASS] uacring_push copies without memcpy/memset (M5c) (word copies) [PASS] uacring_pop copies without memcpy/memset (M5c) (word copies) [PASS] frames_copy copies without memcpy/memset (M5c) (word copies) [PASS] storage: a failed mount never formats (FS_FATFS_MOUNT_MKFS off) (got None) [PASS] storage: FRESH image links the formatter (f_mkfs present) [NOTE] FRESH IMAGE: formats the eMMC on its first entry to ON. Ship it as wakes-sp1-fresh, never as wakes-sp1. [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 542432 B (59.39% of the slot), plaits config OK: safe to hand over for flashingfallback vs v0.8.2
Config: fallback
base head Δ of total FLASH ( .bin)87,000 87,000 0 9.52% RAM 124,532 124,532 0 47.51% check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x353d8) [PASS] wakes-sp1.bin matches the ELF's loadable span (87000 B vs 87000 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 87000 B (9.52% of the slot), fallback config OK: safe to hand over for flashingSHA-256
863d89700ea633b2413e57e6f0fb7935e9578a7f24fa844cd2b4bec2f3d5a580 wakes-sp1-fresh.bin 2196e61fc227e955c427aff412f0aad0a6e14717acb837f098484534e7818886 wakes-sp1-v0.9.0-fallback.bin 863d89700ea633b2413e57e6f0fb7935e9578a7f24fa844cd2b4bec2f3d5a580 wakes-sp1-v0.9.0-fresh.bin 7254ceb72920a35ebe7cef6739727e74137ad38b87f7a0106692561692b61fde wakes-sp1-v0.9.0.bin 7254ceb72920a35ebe7cef6739727e74137ad38b87f7a0106692561692b61fde wakes-sp1.bin- Custom scales: v0.9.0 lets you configure the scales used by Plaits' quantizer and Marbles' X STPS quantization, via
v0.8.2Wakes v0.8.28 files
What's New in v0.8.2
- Configuration from storage: v0.8.2 adds advanced configuration through
.cnfgfiles found in Wakes' onboard storage, at<SP-1>:/WAKES/CNFG. You don't need to fork Wakes' GitHub repository anymore to configure your version of Wakes. Plug your SP-1 into your host while it's in STANDBY, and edit the files directly in a text editor..cnfgfiles are in the .ini format, and contain comments explaining what each setting does. - Four files to play with:
engines.cnfg(your Plaits engine stack),midi.cnfg(MIDI note handling and CC bindings),audio.cnfg(USB audio level and the speaker) andlogs.cnfg(what goes into Wakes' logs). - Changes apply at the next ON. Wakes reads its
.cnfgfiles every time it's turned ON. If Wakes can't read a line, that setting keeps its default, and the log tells you which line it was. Made a mess? Delete the file: Wakes writes a fresh copy with the defaults the next time it turns ON. - Your engine stack:
engines.cnfglets you test, curate and rearrange your sound engines across up to 24 slots, for a perfect selection. ENG- (T2), ENG+ (T3) and the MODEL input (via MIDI CC) will skip empty slots. Ripping Out Plaits' Cables takes you back to the first engine in your stack. If Wakes can't use the file (a misspelled engine, an engine used twice, or no engines at all), it ignores the whole file and loads the original 16 Plaits 1.0 engines. - The default stack is now the 16 original Plaits engines. VA-VCF, phase distortion, wave terrain, string machine and chiptune moved out of it, and are ready for you to add back in through
engines.cnfg. Your PRSTs that use them will still load them. PRSTs that load engines that are outside of your stack have a special flashing 4-LED glyph. - An engine encyclopedia:
engines.cnfgalso contains a reference for every Plaits engine offered by Wakes. Read its ENGINES section to learn about each engine, each parameter it offers, and what's on its AUX output. - New MIDI defaults: Wakes now listens to every MIDI channel (omni) by default. Wakes is also set to legato mode by default. Velocity no longer opens LEVL by default; bind it back in
midi.cnfgif you want it. - Logging:
<SP-1>:/WAKES/LOGScontains.logsfiles. Each session (from ON to OFF/STANDBY) creates a logfile with a session number as its name, and Wakes keeps the last 5.logs.cnfglets you choose what gets logged. If you encounter bugs, Adara might ask you to turn some of these on and send her one of your.logsfiles. - Fix: a single noisy fader reading could stop a SHFT hold from shutting Wakes down. It now takes a real fader move to defer shutdown.
- Updating from v0.8.0: Backup your PRST files (copy the folders off to somewhere in your PC). Flash the regular
wakes-sp1.bin. Your PRSTs should stay where they are, and Wakes will set up the rest, writing the four.cnfgfiles intoWAKES/CNFGthe first time it turns ON. Once everything's set, delete your backups.
Flashing
Read
docs/SAFETY.mdfirst. The SP-1 has no hardware reset pin.-
Wakes features new storage protocols for the SP-1. If you've never used Wakes before, you need to format your storage partition.
To do that, Download the latest
freshbin below. -
If you've used Wakes before, and want to avoid touching your storage, Download the latest regular bin below.
-
Older Wakes versions and release notes are available through the repo's releases page.
-
Open https://solderless.engineering. Hold down T1+T4. Keep them held while connecting the SP-1 over USB-C.
-
Follow solderless.engineering's instructions on how to connect to your SP-1 to flash it.
-
Select the
.binin Solderless Engineering's "firmware utility" page, flash it, and once done, you can unplug. -
The first time you turn Wakes ON after flashing a
freshbin, it will perform a short format of the eMMC card. Give it a moment.
wakes-sp1.binandwakes-sp1-fresh.binare the same files as the versioned bins, under a fixed name, so the README's download link works.When in doubt, check the files against
SHA256SUMSbefore flashing.Storage:
wakes-sp1vswakes-sp1-fresh-
wakes-sp1-*.binnever formats the SP-1's internal storage (the eMMC). Flashit to update: your presets and files stay where they are.
-
wakes-sp1-*-fresh.binFORMATS the eMMC the first time it turns ON, anderases everything on it, including whatever another firmware left there (stock
stems, tape-looper recordings). Flash it once to set the storage up, or to start
over; a progress bar shows on T1-T4 while it formats. Flashing the same fresh file
again does not format a second time.
wakes-sp1-fresh.binis the same file undera fixed name.
-
Without a formatted card, Wakes can still operate, but the storage features get turned off.
wakes-sp1-v0.8.2-fallback.binis the test-tone recovery build. Plaits and Marbles are offline.It never touches the eMMC, and is for diagnosing hardware only in case of issues.
Claude's Blurb
Size vs v0.8.0
plaits vs v0.8.0
Config: plaits
base head Δ of total FLASH ( .bin)459,736 509,952 +50,216 55.83% RAM 204,935 126,964 -77,971 48.43% Sections that changed
section base head Δ noinit124,212 42,312 -81,900 rodata184,412 220,844 +36,432 text269,892 283,436 +13,544 bss76,763 80,460 +3,697 datas3,260 3,492 +232 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x9c800) [PASS] wakes-sp1.bin matches the ELF's loadable span (509952 B vs 509952 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] one layout per Plaits/Marbles class (175 classes) [PASS] plaits::sp1_zero calls nothing (#36) (152 B, leaf) [PASS] ParticleEngine::Reset clears without memset (#36) (no libc fill) [PASS] String::Reset clears without memset (#36) (no libc fill) [PASS] uacring_push copies without memcpy/memset (M5c) (word copies) [PASS] uacring_pop copies without memcpy/memset (M5c) (word copies) [PASS] frames_copy copies without memcpy/memset (M5c) (word copies) [PASS] storage: a failed mount never formats (FS_FATFS_MOUNT_MKFS off) (got None) [PASS] storage: normal image contains no formatter (no f_mkfs) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 509952 B (55.83% of the slot), plaits config OK: safe to hand over for flashingfresh vs v0.8.0
Config: plaits
base head Δ of total FLASH ( .bin)464,616 514,852 +50,236 56.37% RAM 205,833 127,862 -77,971 48.78% Sections that changed
section base head Δ noinit124,228 42,328 -81,900 rodata185,320 221,756 +36,436 text273,840 287,408 +13,568 bss77,625 81,322 +3,697 datas3,280 3,512 +232 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x9db24) [PASS] wakes-sp1.bin matches the ELF's loadable span (514852 B vs 514852 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] one layout per Plaits/Marbles class (175 classes) [PASS] plaits::sp1_zero calls nothing (#36) (152 B, leaf) [PASS] ParticleEngine::Reset clears without memset (#36) (no libc fill) [PASS] String::Reset clears without memset (#36) (no libc fill) [PASS] uacring_push copies without memcpy/memset (M5c) (word copies) [PASS] uacring_pop copies without memcpy/memset (M5c) (word copies) [PASS] frames_copy copies without memcpy/memset (M5c) (word copies) [PASS] storage: a failed mount never formats (FS_FATFS_MOUNT_MKFS off) (got None) [PASS] storage: FRESH image links the formatter (f_mkfs present) [NOTE] FRESH IMAGE: formats the eMMC on its first entry to ON. Ship it as wakes-sp1-fresh, never as wakes-sp1. [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 514852 B (56.37% of the slot), plaits config OK: safe to hand over for flashingfallback vs v0.8.0
Config: fallback
base head Δ of total FLASH ( .bin)86,648 87,000 +352 9.52% RAM 124,503 124,532 +29 47.51% Sections that changed
section base head Δ text74,332 74,680 +348 noinit117,208 117,228 +20 bss5,687 5,696 +9 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x353d8) [PASS] wakes-sp1.bin matches the ELF's loadable span (87000 B vs 87000 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 87000 B (9.52% of the slot), fallback config OK: safe to hand over for flashingSHA-256
e21ce887a3d8d11fe697cbb03a2dab69b1ec06445d347c2a3cec5cbea8e8e331 wakes-sp1-fresh.bin 6b620a70380ba32b1baf57aa41e70b5e4fd5665cb1ae57f8b7b0860b51afbb6d wakes-sp1-v0.8.2-fallback.bin e21ce887a3d8d11fe697cbb03a2dab69b1ec06445d347c2a3cec5cbea8e8e331 wakes-sp1-v0.8.2-fresh.bin 3712aa6e184870794dd0fb0bb92a28ba16cf02cf38c448d80ce670724d97b121 wakes-sp1-v0.8.2.bin 3712aa6e184870794dd0fb0bb92a28ba16cf02cf38c448d80ce670724d97b121 wakes-sp1.bin- Configuration from storage: v0.8.2 adds advanced configuration through
v0.8.0Wakes v0.8.08 files
What's New in v0.8.0
- Storage: v0.8.0 introduces device storage. While in STANDBY (OFF, with USB plugged in), Wakes behaves like a removable card reader, and the SP-1 shows up on your computer as a drive. While storage activity is ongoing, you'll see a dancing pattern on the face LED's. Wait until the lights are fully dark before unplugging or trying to turn the SP-1 ON, otherwise you risk file corruption.
- First-time users: flash
wakes-sp1-fresh.binonce. It formats the SP-1's 4GB eMMC card and prepares Wakes' folders. This clears any data on the eMMC card. After that, usewakes-sp1.binfor future flashes to keep your storage. - PRST: save and retrieve full Wakes patches as
.prstfiles, across four onboard slots. When turned ON, Wakes always loads the last-loaded slot. It saves to the currently selected slot when turned OFF or to STANDBY. Everything is saved except DJVU and VOL. - PRST browser: while holding SHFT, tap PLAY once (instead of holding it to ROTC) to see which slot you're on via a blinking LED. While the animation is still playing, tap PLAY again quickly to flip to the next slot. Letting go of SHFT or waiting a short moment takes you out of the browser. Moving to the next slot doesn't save the one you were on.
- PRSTs on your computer: go to
<SP-1>:/WAKES/PRSTto find a folder for each of the four slots. The first file in alphabetical order loads into that slot, and any other files are ignored. If you rename .prst files, keep to simple characters. - 30s emergency shutdowns skip saving. Regardless, It's good to periodically back up your storage card.
- ROTC has a new animation, and Ripping Out Marbles' Cables now leaves t2 > TRIG and X2 > FREQ connected, so PLAY's behaviour stays consistent.
- Any Plaits engine from a PRST: a .prst can load any Plaits engine, even one that isn't in your
engines.csv. This case has a special glyph: A fast flicker on all four face LED's.
Flashing
Read
docs/SAFETY.mdfirst. The SP-1 has no hardware reset pin.- Wakes features new storage protocols for the SP-1. If you've never used Wakes before, you need to format your storage partition.
To do that, Download the latest
freshbin below. - If you've used Wakes before, and want to avoid touching your storage, Download the latest regular bin below.
- Older Wakes versions and release notes are available through the repo's releases page.
- Open https://solderless.engineering. Hold down T1+T4. Keep them held while connecting the SP-1 over USB-C.
- Follow solderless.engineering's instructions on how to connect to your SP-1 to flash it.
- Select the
.binin Solderless Engineering's "firmware utility" page, flash it, and once done, you can unplug. - The first time you turn Wakes ON after flashing a
freshbin, it will perform a short format of the eMMC card. Give it a moment.
wakes-sp1.binandwakes-sp1-fresh.binare the same files as the versioned bins, under a fixed name, so the README's download link works. When in doubt, check the files againstSHA256SUMSbefore flashing.Storage:
wakes-sp1vswakes-sp1-freshwakes-sp1-*.binnever formats the SP-1's internal storage (the eMMC). Flash it to update: your presets and files stay where they are.wakes-sp1-*-fresh.binFORMATS the eMMC the first time it turns ON, and erases everything on it, including whatever another firmware left there (stock stems, tape-looper recordings). Flash it once to set the storage up, or to start over; a progress bar shows on T1-T4 while it formats. Flashing the same fresh file again does not format a second time.wakes-sp1-fresh.binis the same file under a fixed name.- Without a formatted card, Wakes can still operate, but the storage features get turned off.
wakes-sp1-v0.8.0-fallback.binis the test-tone recovery build. Plaits and Marbles are offline. It never touches the eMMC, and is for diagnosing hardware only in case of issues.Claude's Blurb
Size vs v0.7.2
plaits vs v0.7.2
Config: plaits
base head Δ of total FLASH ( .bin)427,776 459,736 +31,960 50.33% RAM 178,427 204,935 +26,508 78.18% Sections that changed
section base head Δ text243,852 269,892 +26,040 bss57,719 76,763 +19,044 noinit117,352 124,212 +6,860 rodata179,168 184,412 +5,244 datas2,882 3,260 +378 k_mem_slab_area64 128 +64 _static_thread_data_area0 48 +48 k_msgq_area44 88 +44 k_mutex_area0 40 +40 net_buf_pool_area80 120 +40 usbd_class_fs_area72 96 +24 usbd_msc_lun_area0 16 +16 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x903d8) [PASS] wakes-sp1.bin matches the ELF's loadable span (459736 B vs 459736 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] one layout per Plaits/Marbles class (175 classes) [PASS] plaits::sp1_zero calls nothing (#36) (152 B, leaf) [PASS] ParticleEngine::Reset clears without memset (#36) (no libc fill) [PASS] String::Reset clears without memset (#36) (no libc fill) [PASS] uacring_push copies without memcpy/memset (M5c) (word copies) [PASS] uacring_pop copies without memcpy/memset (M5c) (word copies) [PASS] frames_copy copies without memcpy/memset (M5c) (word copies) [PASS] storage: a failed mount never formats (FS_FATFS_MOUNT_MKFS off) (got None) [PASS] storage: normal image contains no formatter (no f_mkfs) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 459736 B (50.33% of the slot), plaits config OK: safe to hand over for flashingfresh
Config: plaits
size of total FLASH ( .bin)464,616 50.87% RAM 205,833 78.52% The base (v0.7.2) did not build; no diff.
check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x916e8) [PASS] wakes-sp1.bin matches the ELF's loadable span (464616 B vs 464616 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] one layout per Plaits/Marbles class (175 classes) [PASS] plaits::sp1_zero calls nothing (#36) (152 B, leaf) [PASS] ParticleEngine::Reset clears without memset (#36) (no libc fill) [PASS] String::Reset clears without memset (#36) (no libc fill) [PASS] uacring_push copies without memcpy/memset (M5c) (word copies) [PASS] uacring_pop copies without memcpy/memset (M5c) (word copies) [PASS] frames_copy copies without memcpy/memset (M5c) (word copies) [PASS] storage: a failed mount never formats (FS_FATFS_MOUNT_MKFS off) (got None) [PASS] storage: FRESH image links the formatter (f_mkfs present) [NOTE] FRESH IMAGE: formats the eMMC on its first entry to ON. Ship it as wakes-sp1-fresh, never as wakes-sp1. [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 464616 B (50.87% of the slot), plaits config OK: safe to hand over for flashingfallback vs v0.7.2
Config: fallback
base head Δ of total FLASH ( .bin)86,560 86,648 +88 9.49% RAM 124,499 124,503 +4 47.49% Sections that changed
section base head Δ text74,272 74,332 +60 rodata9,300 9,324 +24 bss5,683 5,687 +4 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x35278) [PASS] wakes-sp1.bin matches the ELF's loadable span (86648 B vs 86648 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 86648 B (9.49% of the slot), fallback config OK: safe to hand over for flashingSHA-256
11530dc0b11f10a6839f27849a849465363b620189dfb0d1115b9a02676baa5d wakes-sp1-fresh.bin ff26399faa6c8fc1cad8eeb7bcb343c7e515c728924a6d3dc9597dfd1f30b020 wakes-sp1-v0.8.0-fallback.bin 11530dc0b11f10a6839f27849a849465363b620189dfb0d1115b9a02676baa5d wakes-sp1-v0.8.0-fresh.bin 161773f2eb6d82fee9ba74784f35f4084b5b325c12808ab965ce6365beb2eac6 wakes-sp1-v0.8.0.bin 161773f2eb6d82fee9ba74784f35f4084b5b325c12808ab965ce6365beb2eac6 wakes-sp1.binv0.7.2Wakes v0.7.26 files
What's New in v0.7.2
- v0.7.0 - USB Audio OUT: Wakes now supports audio output over USB. When you plug it into an audio-capable host (Mac, iPad, OP-1f, OP-XY etc.etc.), it'll show up as an audio input called "Wakes Audio Out". By default, the SP-1's onboard speaker goes quiet while connected this way.
- v0.7.0 - audio.ini: a new config file sets the USB output level, and whether the speaker stays on while recording. Its default setting parks VOL at -6dB while plugged in.
- v0.7.0 - MIDI clock timing now accounts for the USB audio path.
- v0.7.0 - New device name: the SP-1 now shows up as "Wakes" by Worldwave, so make sure to re-select the MIDI port in your DAW and reconfigure your clock settings for it.
- v0.7.1 - Full-range sweeping: The bottom of Plaits' OCTV fader (F1 on the SETTINGS page) now unlocks FREQ completely, allowing you to sweep the full frequency range with no centre-detent. For the freaks out there.
- v0.7.2 - GTLT - a new Wakes-unique Marbles t-side parameter on SHFT-F1. It tilts t1's and t3's maximum output strength relative to eachother. t2 is unaffected. Additionally, Marbles' UX is a little smoother, with less accidental fader movements, thanks to enabling some Mutable Instruments convenience features taken from Plaits.
Claude's Blurb
Flashing
Read
docs/SAFETY.mdfirst. The SP-1 has no hardware reset pin.- Open https://solderless.engineering in a browser and connect the SP-1 over USB-C.
- Hold Track 1 + Track 4 while plugging in. The four track lights go solid.
- Select
wakes-sp1-v0.7.2.bin, flash, then unplug and replug.
wakes-sp1.binis the same file under a fixed name, for the README's download link. Check the file againstSHA256SUMSbefore flashing.wakes-sp1-v0.7.2-fallback.binis the test-tone build without Plaits or Marbles, for diagnosing hardware only. It is not the instrument.Size vs v0.7.1
plaits vs v0.7.1
Config: plaits
base head Δ of total FLASH ( .bin)427,648 427,776 +128 46.83% RAM 178,314 178,427 +113 68.06% Sections that changed
section base head Δ text243,732 243,852 +120 bss57,606 57,719 +113 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x88700) [PASS] wakes-sp1.bin matches the ELF's loadable span (427776 B vs 427776 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] one layout per Plaits/Marbles class (175 classes) [PASS] plaits::sp1_zero calls nothing (#36) (152 B, leaf) [PASS] ParticleEngine::Reset clears without memset (#36) (no libc fill) [PASS] String::Reset clears without memset (#36) (no libc fill) [PASS] uacring_push copies without memcpy/memset (M5c) (word copies) [PASS] uacring_pop copies without memcpy/memset (M5c) (word copies) [PASS] frames_copy copies without memcpy/memset (M5c) (word copies) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 427776 B (46.83% of the slot), plaits config OK: safe to hand over for flashingfallback vs v0.7.1
Config: fallback
base head Δ of total FLASH ( .bin)86,560 86,560 0 9.48% RAM 124,499 124,499 0 47.49% check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x35220) [PASS] wakes-sp1.bin matches the ELF's loadable span (86560 B vs 86560 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 86560 B (9.48% of the slot), fallback config OK: safe to hand over for flashingSHA-256
86014023f983a9ee9ae4340ae242f2458c412ca7bc833f835f76ccaac2f7ac47 wakes-sp1-v0.7.2-fallback.bin 1a6230059ef17ad28ba51f7f5c085387ef1592f0f42159df0e764ae6d8c571c3 wakes-sp1-v0.7.2.bin 1a6230059ef17ad28ba51f7f5c085387ef1592f0f42159df0e764ae6d8c571c3 wakes-sp1.binv0.7.1Wakes v0.7.16 files
Small v0.7.1 addition:
Full-range sweeping: The bottom of Plaits' OCTV fader (F1 on the SETTINGS page) now unlocks FREQ completely, allowing you to sweep the full frequency range with no centre-detent. For the freaks out there.
Flashing
Read
docs/SAFETY.mdfirst. The SP-1 has no hardware reset pin.- Open https://solderless.engineering in a browser and connect the SP-1 over USB-C.
- Hold Track 1 + Track 4 while plugging in. The four track lights go solid.
- Select
wakes-sp1-v0.7.1.bin, flash, then unplug and replug.
wakes-sp1.binis the same file under a fixed name, for the README's download link. Check the file againstSHA256SUMSbefore flashing.wakes-sp1-v0.7.1-fallback.binis the test-tone build without Plaits or Marbles, for diagnosing hardware only. It is not the instrument.Size vs v0.7.0
plaits vs v0.7.0
Config: plaits
base head Δ of total FLASH ( .bin)427,664 427,648 -16 46.82% RAM 178,314 178,314 0 68.02% Sections that changed
section base head Δ text243,748 243,732 -16 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x88680) [PASS] wakes-sp1.bin matches the ELF's loadable span (427648 B vs 427648 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] one layout per Plaits/Marbles class (175 classes) [PASS] plaits::sp1_zero calls nothing (#36) (152 B, leaf) [PASS] ParticleEngine::Reset clears without memset (#36) (no libc fill) [PASS] String::Reset clears without memset (#36) (no libc fill) [PASS] uacring_push copies without memcpy/memset (M5c) (word copies) [PASS] uacring_pop copies without memcpy/memset (M5c) (word copies) [PASS] frames_copy copies without memcpy/memset (M5c) (word copies) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 427648 B (46.82% of the slot), plaits config OK: safe to hand over for flashingfallback vs v0.7.0
Config: fallback
base head Δ of total FLASH ( .bin)86,560 86,560 0 9.48% RAM 124,499 124,499 0 47.49% check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x35220) [PASS] wakes-sp1.bin matches the ELF's loadable span (86560 B vs 86560 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 86560 B (9.48% of the slot), fallback config OK: safe to hand over for flashingSHA-256
a082f9250704de64d62f7dd894efbab9b164142c9ae88b8f817cbb054fafda6b wakes-sp1-v0.7.1-fallback.bin 1981db861e884747a2cb8588ff817f4463f10a7d2f4564385a791ae336135f5c wakes-sp1-v0.7.1.bin 1981db861e884747a2cb8588ff817f4463f10a7d2f4564385a791ae336135f5c wakes-sp1.binv0.7.0Wakes v0.7.06 files
What's New in v0.7.0
- USB Audio OUT: Wakes now supports audio output over USB. When you plug it into an audio-capable host (Mac, iPad, OP-1f, OP-XY etc.etc.), it'll show up as an audio input called "Wakes Audio Out". By default, the SP-1's onboard speaker goes quiet while connected this way.
- audio.ini: a new config file sets the USB output level, and whether the speaker stays on while recording. Its default setting parks VOL at -6dB while plugged in.
- MIDI clock timing now accounts for the USB audio path.
- New device name: the SP-1 now shows up as "Wakes" by Worldwave, so make sure to re-select the MIDI port in your DAW and reconfigure your clock settings for it.
Claude's Blurb
Flashing
Read
docs/SAFETY.mdfirst. The SP-1 has no hardware reset pin.- Open https://solderless.engineering in a browser and connect the SP-1 over USB-C.
- Hold Track 1 + Track 4 while plugging in. The four track lights go solid.
- Select
wakes-sp1-v0.7.0.bin, flash, then unplug and replug.
wakes-sp1.binis the same file under a fixed name, for the README's download link. Check the file againstSHA256SUMSbefore flashing.wakes-sp1-v0.7.0-fallback.binis the test-tone build without Plaits or Marbles, for diagnosing hardware only. It is not the instrument.Size vs v0.6.1
plaits vs v0.6.1
Config: plaits
base head Δ of total FLASH ( .bin)424,428 427,664 +3,236 46.82% RAM 168,790 178,314 +9,524 68.02% Sections that changed
section base head Δ bss48,290 57,606 +9,316 text241,300 243,748 +2,448 rodata178,588 179,168 +580 datas2,699 2,882 +183 usbd_class_fs_area48 72 +24 device_states25 26 +1 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x88690) [PASS] wakes-sp1.bin matches the ELF's loadable span (427664 B vs 427664 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] one layout per Plaits/Marbles class (175 classes) [PASS] plaits::sp1_zero calls nothing (#36) (152 B, leaf) [PASS] ParticleEngine::Reset clears without memset (#36) (no libc fill) [PASS] String::Reset clears without memset (#36) (no libc fill) [PASS] uacring_push copies without memcpy/memset (M5c) (word copies) [PASS] uacring_pop copies without memcpy/memset (M5c) (word copies) [PASS] frames_copy copies without memcpy/memset (M5c) (word copies) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 427664 B (46.82% of the slot), plaits config OK: safe to hand over for flashingfallback vs v0.6.1
Config: fallback
base head Δ of total FLASH ( .bin)86,044 86,560 +516 9.48% RAM 123,447 124,499 +1,052 47.49% Sections that changed
section base head Δ bss4,631 5,683 +1,052 text73,848 74,272 +424 rodata9,200 9,300 +100 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x35220) [PASS] wakes-sp1.bin matches the ELF's loadable span (86560 B vs 86560 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 86560 B (9.48% of the slot), fallback config OK: safe to hand over for flashingSHA-256
87195a1ec5da3bb19eb60c78f394e8df7791ee85b5c671a5da5d745de43a7e95 wakes-sp1-v0.7.0-fallback.bin 5d15f9f76d73d22dfa8529fecde2fb043cadc759ce9aa2d9b520f6e2a1d929ea wakes-sp1-v0.7.0.bin 5d15f9f76d73d22dfa8529fecde2fb043cadc759ce9aa2d9b520f6e2a1d929ea wakes-sp1.binv0.6.1Wakes v0.6.16 files
What's New in v0.6.1
- Some engines' memory handling has been changed, poofing away some overruns and audio cutouts when switching between some of the engines.
Claude's Blurb
Flashing
Read
docs/SAFETY.mdfirst. The SP-1 has no hardware reset pin.- Open https://solderless.engineering in a browser and connect the SP-1 over USB-C.
- Hold Track 1 + Track 4 while plugging in. The four track lights go solid.
- Select
wakes-sp1-v0.6.1.bin, flash, then unplug and replug.
wakes-sp1.binis the same file under a fixed name, for the README's download link. Check the file againstSHA256SUMSbefore flashing.wakes-sp1-v0.6.1-fallback.binis the test-tone build without Plaits or Marbles, for diagnosing hardware only. It is not the instrument.Size vs v0.6.0
plaits vs v0.6.0
Config: plaits
base head Δ of total FLASH ( .bin)424,252 424,428 +176 46.47% RAM 168,790 168,790 0 64.39% Sections that changed
section base head Δ text241,112 241,300 +188 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x879ec) [PASS] wakes-sp1.bin matches the ELF's loadable span (424428 B vs 424428 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] one layout per Plaits/Marbles class (175 classes) [PASS] plaits::sp1_zero calls nothing (#36) (152 B, leaf) [PASS] ParticleEngine::Reset clears without memset (#36) (no libc fill) [PASS] String::Reset clears without memset (#36) (no libc fill) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 424428 B (46.47% of the slot), plaits config OK: safe to hand over for flashingfallback vs v0.6.0
Config: fallback
base head Δ of total FLASH ( .bin)86,044 86,044 0 9.42% RAM 123,447 123,447 0 47.09% check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x3501c) [PASS] wakes-sp1.bin matches the ELF's loadable span (86044 B vs 86044 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 86044 B (9.42% of the slot), fallback config OK: safe to hand over for flashingSHA-256
b03087bc74b430fc3533d6c56ad6052933ae5b86f1e8412f18907d56b8b9d3a8 wakes-sp1-v0.6.1-fallback.bin 5f8b44df7f79a9a1ab9c0d5fc19892e8e19e0e359c8620ce73434769a641da6d wakes-sp1-v0.6.1.bin 5f8b44df7f79a9a1ab9c0d5fc19892e8e19e0e359c8620ce73434769a641da6d wakes-sp1.binv0.6.0Wakes v0.6.06 files
What's New
In v0.6.0, a deep optimization pass on Plaits' audio thread, Marbles' MIDI clock sync calculation, and the MIDI over USB thread resulted in a massive decrease in CPU requirements, a reduction in latency from ~25ms to ~8ms, and a smart clock delay compensation algorithm for Marbles. Wakes is now a fully playable and sync-able MIDI instrument, ready to play along with other instruments.
Claude's Blurb
Flashing
Read
docs/SAFETY.mdfirst. The SP-1 has no hardware reset pin.- Open https://solderless.engineering in a browser and connect the SP-1 over USB-C.
- Hold Track 1 + Track 4 while plugging in. The four track lights go solid.
- Select
wakes-sp1-v0.6.0.bin, flash, then unplug and replug.
wakes-sp1.binis the same file under a fixed name, for the README's download link. Check the file againstSHA256SUMSbefore flashing.wakes-sp1-v0.6.0-fallback.binis the test-tone build without Plaits or Marbles, for diagnosing hardware only. It is not the instrument.Size vs v0.5.0
plaits vs v0.5.0
Config: plaits
base head Δ of total FLASH ( .bin)420,856 424,252 +3,396 46.45% RAM 172,530 168,790 -3,740 64.39% Sections that changed
section base head Δ noinit121,192 117,352 -3,840 text238,072 241,112 +3,040 rodata178,240 178,588 +348 bss48,198 48,290 +92 datas2,690 2,699 +9 device_states26 25 -1 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x8793c) [PASS] wakes-sp1.bin matches the ELF's loadable span (424252 B vs 424252 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] one layout per Plaits/Marbles class (175 classes) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 424252 B (46.45% of the slot), plaits config OK: safe to hand over for flashingfallback vs v0.5.0
Config: fallback
base head Δ of total FLASH ( .bin)85,404 86,044 +640 9.42% RAM 127,490 123,447 -4,043 47.09% Sections that changed
section base head Δ noinit121,048 117,208 -3,840 text73,288 73,848 +560 bss4,834 4,631 -203 rodata9,120 9,200 +80 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x3501c) [PASS] wakes-sp1.bin matches the ELF's loadable span (86044 B vs 86044 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 86044 B (9.42% of the slot), fallback config OK: safe to hand over for flashingSHA-256
f941579b541fcf73b1f3110c6f02c16bad8b4b928e5f2de261164e9735f0c579 wakes-sp1-v0.6.0-fallback.bin 0484c18e325123d0088aa3e30f8f2b94a1e498d46be447574319332280e953b5 wakes-sp1-v0.6.0.bin 0484c18e325123d0088aa3e30f8f2b94a1e498d46be447574319332280e953b5 wakes-sp1.binv0.5.0Wakes v0.5.06 files
Draft created by CI. Read it, then publish by hand.
Flashing
Read
docs/SAFETY.mdfirst. The SP-1 has no hardware reset pin.- Open https://solderless.engineering in a browser and connect the SP-1 over USB-C.
- Hold Track 1 + Track 4 while plugging in. The four track lights go solid.
- Select
wakes-sp1-v0.5.0.bin, flash, then unplug and replug.
Check the file against
SHA256SUMSbefore flashing.wakes-sp1-v0.5.0-fallback.binis the test-tone build without Plaits or Marbles, for diagnosing hardware only. It is not the instrument.Size vs v0.4.8
plaits vs v0.4.8
Config: plaits
base head Δ of total FLASH ( .bin)393,584 420,856 +27,272 46.08% RAM 67,686 172,530 +104,844 65.81% Sections that changed
section base head Δ noinit24,644 121,192 +96,548 text212,756 238,072 +25,316 bss40,226 48,198 +7,972 rodata176,620 178,240 +1,620 datas2,432 2,690 +258 net_buf_pool_area40 80 +40 usbd_class_fs_area24 48 +24 initlevel152 160 +8 init_array4 8 +4 device_states24 26 +2 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x86bf8) [PASS] wakes-sp1.bin matches the ELF's loadable span (420856 B vs 420856 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] one layout per Plaits/Marbles class (175 classes) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 420856 B (46.08% of the slot), plaits config OK: safe to hand over for flashingfallback vs v0.4.8
Config: fallback
base head Δ of total FLASH ( .bin)83,420 85,404 +1,984 9.35% RAM 30,550 127,490 +96,940 48.63% Sections that changed
section base head Δ noinit24,644 121,048 +96,404 text71,668 73,288 +1,620 bss4,298 4,834 +536 rodata8,768 9,120 +352 device_states25 24 -1 datas1,223 1,224 +1 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x34d9c) [PASS] wakes-sp1.bin matches the ELF's loadable span (85404 B vs 85404 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 85404 B (9.35% of the slot), fallback config OK: safe to hand over for flashingSHA-256
586427338a3925e2bcd51170d43616574d5ae624df933f16c66e9bad3a4ef6d2 wakes-sp1-v0.5.0-fallback.bin e596acf049a32998c946e3ed9601c24cc266375e6dada816409a8120b4dbe2da wakes-sp1-v0.5.0.bin e596acf049a32998c946e3ed9601c24cc266375e6dada816409a8120b4dbe2da wakes-sp1.binv0.4.8Wakes v0.4.8Beta3 files
Pre-release for beta testing. Tested on a single SP-1 unit. Read
docs/SAFETY.mdbefore flashing, and seedocs/Wakes - Manual.pdffor how to play it. Report problems with the bug form under Issues.What's new since v0.4.6
- Stability: resolved multiple crashes on heavy models when every feature ran together. With Plaits, Marbles, the drive and OUT+AUX all running, the CPU could overload and reset the device (#22).
- Optimizations: more CPU headroom across the engines. The biggest gains are on Chords and the virtual-analog family, with no change to their sound (#22).
- Optimizations: the drive and output stage are lighter. The drive now acts on the selected output as one signal, so OUT+AUX and OUT×AUX distort together (#22).
- OUT×AUX now passes through Plaits' low-pass gate after the multiply, so the envelope shapes the product once. Expect a slightly different decay on plucked notes in this mode (#22).
- Chords: each note's organ-to-wavetable crossfade on MORPH is shorter, and settles to one side when MORPH rests (#22).
Flashing
Read
docs/SAFETY.mdfirst. The SP-1 has no hardware reset pin.- Open https://solderless.engineering in a browser and connect the SP-1 over USB-C.
- Hold Track 1 + Track 4 while plugging in. The four track lights go solid.
- Select
wakes-sp1-v0.4.8.bin, flash, then unplug and replug.
Check the file against
SHA256SUMSbefore flashing.wakes-sp1-v0.4.8-fallback.binis the test-tone build without Plaits or Marbles, for diagnosing hardware only. It is not the instrument.Size vs v0.4.6
plaits vs v0.4.6
Config: plaits
base head Δ of total FLASH ( .bin)386,132 393,584 +7,452 43.09% RAM 66,965 67,686 +721 25.82% Sections that changed
section base head Δ text207,504 212,756 +5,252 rodata174,448 176,620 +2,172 bss39,521 40,226 +705 datas2,416 2,432 +16 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x80170) [PASS] wakes-sp1.bin matches the ELF's loadable span (393584 B vs 393584 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] one layout per Plaits/Marbles class (173 classes) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 393584 B (43.09% of the slot), plaits config OK: safe to hand over for flashingfallback vs v0.4.6
Config: fallback
base head Δ of total FLASH ( .bin)83,276 83,420 +144 9.13% RAM 30,490 30,550 +60 11.65% Sections that changed
section base head Δ text71,524 71,668 +144 bss4,238 4,298 +60 check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x345dc) [PASS] wakes-sp1.bin matches the ELF's loadable span (83420 B vs 83420 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 83420 B (9.13% of the slot), fallback config OK: safe to hand over for flashingSHA-256
5658e01e307dc2c5abada8ab3d947981b4ce6715ba8c76d9018af5444f4cb300 wakes-sp1-v0.4.8-fallback.bin c3b550a15395d6631ebefc0747e2cc783e4315466a840599be02e90bb97741c6 wakes-sp1-v0.4.8.binShow all 3 filesHide 1 files
Other filesv0.4.6Wakes v0.4.6Beta3 files
Pre-release for beta testing. Tested on a single SP-1 unit. Read
docs/SAFETY.mdbefore flashing, and seedocs/Wakes - Manual.pdffor how to play it. Report problems with the bug form under Issues.What's new since v0.4.5
- Unpatch no longer fires the button's ordinary action on release (#2)
- A completed rip fades back to the page instead of staying black (#4)
- Output select moves to PLAITS SETTINGS T4;
••+ T4 is Unpatch only (#11)
Flashing
Read
docs/SAFETY.mdfirst. The SP-1 has no hardware reset pin.- Open https://solderless.engineering in a browser and connect the SP-1 over USB-C.
- Hold Track 1 + Track 4 while plugging in. The four track lights go solid.
- Select
wakes-sp1-v0.4.6.bin, flash, then unplug and replug.
Check the file against
SHA256SUMSbefore flashing.wakes-sp1-v0.4.6-fallback.binis the test-tone build without Plaits or Marbles, for diagnosing hardware only. It is not the instrument.Size
plaits
Config: plaits
size of total FLASH ( .bin)386,132 42.27% RAM 66,965 25.55% check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x7e454) [PASS] wakes-sp1.bin matches the ELF's loadable span (386132 B vs 386132 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 386132 B (42.27% of the slot), plaits config OK: safe to hand over for flashingfallback
Config: fallback
size of total FLASH ( .bin)83,276 9.12% RAM 30,490 11.63% check_image
check_image: build/zephyr [PASS] _vector_table at 0x20000 (0x20000) [PASS] no load segment below 0x20000 (lowest LMA 0x20000) [PASS] no load segment at or above 0xFF000 (image ends 0x3454c) [PASS] wakes-sp1.bin matches the ELF's loadable span (83276 B vs 83276 B) [PASS] .map: FLASH region origin 0x20000 (0x20000) [PASS] .map: FLASH region ends at 0xFF000 (0xff000) [PASS] .map: _vector_table at 0x20000 (0x0000000000020000) [PASS] CONFIG_USE_DT_CODE_PARTITION=y (got y) [PASS] CONFIG_FLASH_LOAD_OFFSET=0x20000 (got 0x20000) [PASS] CONFIG_WATCHDOG=y (got y) [PASS] CONFIG_REBOOT=y (got y) [PASS] CONFIG_CLOCK_CONTROL_NRF_K32SRC_SYNTH=y (got y) [PASS] SP1_FORCE_CALIB is 0 (got 0) wakes-sp1.bin: 83276 B (9.12% of the slot), fallback config OK: safe to hand over for flashingSHA-256
01d70a1309c69f35e1d6a522ba3d4a8349182a4e2f9f92b86d95dbe90d8d8b24 wakes-sp1-v0.4.6-fallback.bin 75c61a0189c17b4b4e31c454c530ec7b4d7b5fa104655002eae25750a331d26c wakes-sp1-v0.4.6.binShow all 3 filesHide 1 files
Other files
