Wakes, image 1 from its README
Firmware

Wakes

Hype: warming · 72

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.

Download v0.9.0

wakes-sp1-fresh.bin· 530 KB· +7 files

MIT· Worldwave/Wakes·downloads come from the creator’s GitHub releases

36 commits and 11 releases in the last year
11 releases
  1. 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.cnfg uses the Scala .scl format 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, and plaits = 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.cnfg contains 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.cnfg has a new scales setting, 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 fresh bin. Back up your WAKES folder 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.md first. The SP-1 has no hardware reset pin.

    1. v0.9.0 needs the fresh bin, 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 the WAKES folder off to somewhere in your PC first. It holds your PRSTs, your .cnfg edits and your logs.

    2. Download wakes-sp1-v0.9.0-fresh.bin below.

    3. Older Wakes versions and release notes are available through the repo's releases page.

    4. Open https://solderless.engineering. Hold down T1+T4. Keep them held while connecting the SP-1 over USB-C.

    5. Follow solderless.engineering's instructions on how to connect to your SP-1 to flash it.

    6. Select the .bin in Solderless Engineering's "firmware utility" page, flash it, and once done, you can unplug.

    7. 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 .cnfg files, scales.cnfg included.

    8. If you had edited your .cnfg files, copy your changes back into the new files by hand, from your backup. Once everything's set, delete your backups.

    9. For future versions, use the regular bin again, unless the release notes say otherwise.

    wakes-sp1.bin and wakes-sp1-fresh.bin are 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 SHA256SUMS before flashing.

    Storage: wakes-sp1 vs wakes-sp1-fresh

    • wakes-sp1-*.bin never formats the SP-1's internal storage (the eMMC). Flash it to update: your presets and files stay where they are.
    • wakes-sp1-*-fresh.bin FORMATS 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.bin is 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.bin is 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

    baseheadΔof total
    FLASH (.bin)509,952537,528+27,57658.85%
    RAM126,964135,758+8,79451.79%
    Sections that changed
    sectionbaseheadΔ
    rodata220,844242,544+21,700
    bss80,46089,250+8,790
    text283,436289,320+5,884
    datas3,4923,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 flashing
    

    fresh vs v0.8.2

    Config: plaits

    baseheadΔof total
    FLASH (.bin)514,852542,432+27,58059.39%
    RAM127,862136,656+8,79452.13%
    Sections that changed
    sectionbaseheadΔ
    rodata221,756243,460+21,704
    bss81,32290,112+8,790
    text287,408293,276+5,868
    datas3,5123,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 flashing
    

    fallback vs v0.8.2

    Config: fallback

    baseheadΔof total
    FLASH (.bin)87,00087,00009.52%
    RAM124,532124,532047.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 flashing
    

    SHA-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
    
  2. v0.8.2Wakes v0.8.28 files

    What's New in v0.8.2

    • Configuration from storage: v0.8.2 adds advanced configuration through .cnfg files 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. .cnfg files 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) and logs.cnfg (what goes into Wakes' logs).
    • Changes apply at the next ON. Wakes reads its .cnfg files 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.cnfg lets 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.cnfg also 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.cnfg if you want it.
    • Logging: <SP-1>:/WAKES/LOGS contains .logs files. Each session (from ON to OFF/STANDBY) creates a logfile with a session number as its name, and Wakes keeps the last 5. logs.cnfg lets 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 .logs files.
    • 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 .cnfg files into WAKES/CNFG the first time it turns ON. Once everything's set, delete your backups.

    Flashing

    Read docs/SAFETY.md first. The SP-1 has no hardware reset pin.

    1. 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 fresh bin below.

    2. If you've used Wakes before, and want to avoid touching your storage, Download the latest regular bin below.

    3. Older Wakes versions and release notes are available through the repo's releases page.

    4. Open https://solderless.engineering. Hold down T1+T4. Keep them held while connecting the SP-1 over USB-C.

    5. Follow solderless.engineering's instructions on how to connect to your SP-1 to flash it.

    6. Select the .bin in Solderless Engineering's "firmware utility" page, flash it, and once done, you can unplug.

    7. The first time you turn Wakes ON after flashing a fresh bin, it will perform a short format of the eMMC card. Give it a moment.

    wakes-sp1.bin and wakes-sp1-fresh.bin are 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 SHA256SUMS before flashing.

    Storage: wakes-sp1 vs wakes-sp1-fresh

    • wakes-sp1-*.bin never formats the SP-1's internal storage (the eMMC). Flash

      it to update: your presets and files stay where they are.

    • wakes-sp1-*-fresh.bin FORMATS 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.bin is 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.2-fallback.bin is 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

    baseheadΔof total
    FLASH (.bin)459,736509,952+50,21655.83%
    RAM204,935126,964-77,97148.43%
    Sections that changed
    sectionbaseheadΔ
    noinit124,21242,312-81,900
    rodata184,412220,844+36,432
    text269,892283,436+13,544
    bss76,76380,460+3,697
    datas3,2603,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 flashing
    

    fresh vs v0.8.0

    Config: plaits

    baseheadΔof total
    FLASH (.bin)464,616514,852+50,23656.37%
    RAM205,833127,862-77,97148.78%
    Sections that changed
    sectionbaseheadΔ
    noinit124,22842,328-81,900
    rodata185,320221,756+36,436
    text273,840287,408+13,568
    bss77,62581,322+3,697
    datas3,2803,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 flashing
    

    fallback vs v0.8.0

    Config: fallback

    baseheadΔof total
    FLASH (.bin)86,64887,000+3529.52%
    RAM124,503124,532+2947.51%
    Sections that changed
    sectionbaseheadΔ
    text74,33274,680+348
    noinit117,208117,228+20
    bss5,6875,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 flashing
    

    SHA-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
    
  3. 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.bin once. It formats the SP-1's 4GB eMMC card and prepares Wakes' folders. This clears any data on the eMMC card. After that, use wakes-sp1.bin for future flashes to keep your storage.
    • PRST: save and retrieve full Wakes patches as .prst files, 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/PRST to 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.md first. The SP-1 has no hardware reset pin.

    1. 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 fresh bin below.
    2. If you've used Wakes before, and want to avoid touching your storage, Download the latest regular bin below.
    3. Older Wakes versions and release notes are available through the repo's releases page.
    4. Open https://solderless.engineering. Hold down T1+T4. Keep them held while connecting the SP-1 over USB-C.
    5. Follow solderless.engineering's instructions on how to connect to your SP-1 to flash it.
    6. Select the .bin in Solderless Engineering's "firmware utility" page, flash it, and once done, you can unplug.
    7. The first time you turn Wakes ON after flashing a fresh bin, it will perform a short format of the eMMC card. Give it a moment.

    wakes-sp1.bin and wakes-sp1-fresh.bin are 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 SHA256SUMS before flashing.

    Storage: wakes-sp1 vs wakes-sp1-fresh

    • wakes-sp1-*.bin never formats the SP-1's internal storage (the eMMC). Flash it to update: your presets and files stay where they are.
    • wakes-sp1-*-fresh.bin FORMATS 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.bin is 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.bin is 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

    baseheadΔof total
    FLASH (.bin)427,776459,736+31,96050.33%
    RAM178,427204,935+26,50878.18%
    Sections that changed
    sectionbaseheadΔ
    text243,852269,892+26,040
    bss57,71976,763+19,044
    noinit117,352124,212+6,860
    rodata179,168184,412+5,244
    datas2,8823,260+378
    k_mem_slab_area64128+64
    _static_thread_data_area048+48
    k_msgq_area4488+44
    k_mutex_area040+40
    net_buf_pool_area80120+40
    usbd_class_fs_area7296+24
    usbd_msc_lun_area016+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 flashing
    

    fresh

    Config: plaits

    sizeof total
    FLASH (.bin)464,61650.87%
    RAM205,83378.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 flashing
    

    fallback vs v0.7.2

    Config: fallback

    baseheadΔof total
    FLASH (.bin)86,56086,648+889.49%
    RAM124,499124,503+447.49%
    Sections that changed
    sectionbaseheadΔ
    text74,27274,332+60
    rodata9,3009,324+24
    bss5,6835,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 flashing
    

    SHA-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.bin
    
  4. v0.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.md first. The SP-1 has no hardware reset pin.

    1. Open https://solderless.engineering in a browser and connect the SP-1 over USB-C.
    2. Hold Track 1 + Track 4 while plugging in. The four track lights go solid.
    3. Select wakes-sp1-v0.7.2.bin, flash, then unplug and replug.

    wakes-sp1.bin is the same file under a fixed name, for the README's download link. Check the file against SHA256SUMS before flashing. wakes-sp1-v0.7.2-fallback.bin is 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

    baseheadΔof total
    FLASH (.bin)427,648427,776+12846.83%
    RAM178,314178,427+11368.06%
    Sections that changed
    sectionbaseheadΔ
    text243,732243,852+120
    bss57,60657,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 flashing
    

    fallback vs v0.7.1

    Config: fallback

    baseheadΔof total
    FLASH (.bin)86,56086,56009.48%
    RAM124,499124,499047.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 flashing
    

    SHA-256

    86014023f983a9ee9ae4340ae242f2458c412ca7bc833f835f76ccaac2f7ac47  wakes-sp1-v0.7.2-fallback.bin
    1a6230059ef17ad28ba51f7f5c085387ef1592f0f42159df0e764ae6d8c571c3  wakes-sp1-v0.7.2.bin
    1a6230059ef17ad28ba51f7f5c085387ef1592f0f42159df0e764ae6d8c571c3  wakes-sp1.bin
    
  5. v0.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.md first. The SP-1 has no hardware reset pin.

    1. Open https://solderless.engineering in a browser and connect the SP-1 over USB-C.
    2. Hold Track 1 + Track 4 while plugging in. The four track lights go solid.
    3. Select wakes-sp1-v0.7.1.bin, flash, then unplug and replug.

    wakes-sp1.bin is the same file under a fixed name, for the README's download link. Check the file against SHA256SUMS before flashing. wakes-sp1-v0.7.1-fallback.bin is 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

    baseheadΔof total
    FLASH (.bin)427,664427,648-1646.82%
    RAM178,314178,314068.02%
    Sections that changed
    sectionbaseheadΔ
    text243,748243,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 flashing
    

    fallback vs v0.7.0

    Config: fallback

    baseheadΔof total
    FLASH (.bin)86,56086,56009.48%
    RAM124,499124,499047.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 flashing
    

    SHA-256

    a082f9250704de64d62f7dd894efbab9b164142c9ae88b8f817cbb054fafda6b  wakes-sp1-v0.7.1-fallback.bin
    1981db861e884747a2cb8588ff817f4463f10a7d2f4564385a791ae336135f5c  wakes-sp1-v0.7.1.bin
    1981db861e884747a2cb8588ff817f4463f10a7d2f4564385a791ae336135f5c  wakes-sp1.bin
    
  6. v0.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.md first. The SP-1 has no hardware reset pin.

    1. Open https://solderless.engineering in a browser and connect the SP-1 over USB-C.
    2. Hold Track 1 + Track 4 while plugging in. The four track lights go solid.
    3. Select wakes-sp1-v0.7.0.bin, flash, then unplug and replug.

    wakes-sp1.bin is the same file under a fixed name, for the README's download link. Check the file against SHA256SUMS before flashing. wakes-sp1-v0.7.0-fallback.bin is 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

    baseheadΔof total
    FLASH (.bin)424,428427,664+3,23646.82%
    RAM168,790178,314+9,52468.02%
    Sections that changed
    sectionbaseheadΔ
    bss48,29057,606+9,316
    text241,300243,748+2,448
    rodata178,588179,168+580
    datas2,6992,882+183
    usbd_class_fs_area4872+24
    device_states2526+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 flashing
    

    fallback vs v0.6.1

    Config: fallback

    baseheadΔof total
    FLASH (.bin)86,04486,560+5169.48%
    RAM123,447124,499+1,05247.49%
    Sections that changed
    sectionbaseheadΔ
    bss4,6315,683+1,052
    text73,84874,272+424
    rodata9,2009,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 flashing
    

    SHA-256

    87195a1ec5da3bb19eb60c78f394e8df7791ee85b5c671a5da5d745de43a7e95  wakes-sp1-v0.7.0-fallback.bin
    5d15f9f76d73d22dfa8529fecde2fb043cadc759ce9aa2d9b520f6e2a1d929ea  wakes-sp1-v0.7.0.bin
    5d15f9f76d73d22dfa8529fecde2fb043cadc759ce9aa2d9b520f6e2a1d929ea  wakes-sp1.bin
    
  7. v0.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.md first. The SP-1 has no hardware reset pin.

    1. Open https://solderless.engineering in a browser and connect the SP-1 over USB-C.
    2. Hold Track 1 + Track 4 while plugging in. The four track lights go solid.
    3. Select wakes-sp1-v0.6.1.bin, flash, then unplug and replug.

    wakes-sp1.bin is the same file under a fixed name, for the README's download link. Check the file against SHA256SUMS before flashing. wakes-sp1-v0.6.1-fallback.bin is 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

    baseheadΔof total
    FLASH (.bin)424,252424,428+17646.47%
    RAM168,790168,790064.39%
    Sections that changed
    sectionbaseheadΔ
    text241,112241,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 flashing
    

    fallback vs v0.6.0

    Config: fallback

    baseheadΔof total
    FLASH (.bin)86,04486,04409.42%
    RAM123,447123,447047.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 flashing
    

    SHA-256

    b03087bc74b430fc3533d6c56ad6052933ae5b86f1e8412f18907d56b8b9d3a8  wakes-sp1-v0.6.1-fallback.bin
    5f8b44df7f79a9a1ab9c0d5fc19892e8e19e0e359c8620ce73434769a641da6d  wakes-sp1-v0.6.1.bin
    5f8b44df7f79a9a1ab9c0d5fc19892e8e19e0e359c8620ce73434769a641da6d  wakes-sp1.bin
    
  8. v0.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.md first. The SP-1 has no hardware reset pin.

    1. Open https://solderless.engineering in a browser and connect the SP-1 over USB-C.
    2. Hold Track 1 + Track 4 while plugging in. The four track lights go solid.
    3. Select wakes-sp1-v0.6.0.bin, flash, then unplug and replug.

    wakes-sp1.bin is the same file under a fixed name, for the README's download link. Check the file against SHA256SUMS before flashing. wakes-sp1-v0.6.0-fallback.bin is 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

    baseheadΔof total
    FLASH (.bin)420,856424,252+3,39646.45%
    RAM172,530168,790-3,74064.39%
    Sections that changed
    sectionbaseheadΔ
    noinit121,192117,352-3,840
    text238,072241,112+3,040
    rodata178,240178,588+348
    bss48,19848,290+92
    datas2,6902,699+9
    device_states2625-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 flashing
    

    fallback vs v0.5.0

    Config: fallback

    baseheadΔof total
    FLASH (.bin)85,40486,044+6409.42%
    RAM127,490123,447-4,04347.09%
    Sections that changed
    sectionbaseheadΔ
    noinit121,048117,208-3,840
    text73,28873,848+560
    bss4,8344,631-203
    rodata9,1209,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 flashing
    

    SHA-256

    f941579b541fcf73b1f3110c6f02c16bad8b4b928e5f2de261164e9735f0c579  wakes-sp1-v0.6.0-fallback.bin
    0484c18e325123d0088aa3e30f8f2b94a1e498d46be447574319332280e953b5  wakes-sp1-v0.6.0.bin
    0484c18e325123d0088aa3e30f8f2b94a1e498d46be447574319332280e953b5  wakes-sp1.bin
    
  9. v0.5.0Wakes v0.5.06 files

    Draft created by CI. Read it, then publish by hand.

    Flashing

    Read docs/SAFETY.md first. The SP-1 has no hardware reset pin.

    1. Open https://solderless.engineering in a browser and connect the SP-1 over USB-C.
    2. Hold Track 1 + Track 4 while plugging in. The four track lights go solid.
    3. Select wakes-sp1-v0.5.0.bin, flash, then unplug and replug.

    Check the file against SHA256SUMS before flashing. wakes-sp1-v0.5.0-fallback.bin is 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

    baseheadΔof total
    FLASH (.bin)393,584420,856+27,27246.08%
    RAM67,686172,530+104,84465.81%
    Sections that changed
    sectionbaseheadΔ
    noinit24,644121,192+96,548
    text212,756238,072+25,316
    bss40,22648,198+7,972
    rodata176,620178,240+1,620
    datas2,4322,690+258
    net_buf_pool_area4080+40
    usbd_class_fs_area2448+24
    initlevel152160+8
    init_array48+4
    device_states2426+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 flashing
    

    fallback vs v0.4.8

    Config: fallback

    baseheadΔof total
    FLASH (.bin)83,42085,404+1,9849.35%
    RAM30,550127,490+96,94048.63%
    Sections that changed
    sectionbaseheadΔ
    noinit24,644121,048+96,404
    text71,66873,288+1,620
    bss4,2984,834+536
    rodata8,7689,120+352
    device_states2524-1
    datas1,2231,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 flashing
    

    SHA-256

    586427338a3925e2bcd51170d43616574d5ae624df933f16c66e9bad3a4ef6d2  wakes-sp1-v0.5.0-fallback.bin
    e596acf049a32998c946e3ed9601c24cc266375e6dada816409a8120b4dbe2da  wakes-sp1-v0.5.0.bin
    e596acf049a32998c946e3ed9601c24cc266375e6dada816409a8120b4dbe2da  wakes-sp1.bin
    
  10. v0.4.8Wakes v0.4.8Beta3 files

    Pre-release for beta testing. Tested on a single SP-1 unit. Read docs/SAFETY.md before flashing, and see docs/Wakes - Manual.pdf for 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.md first. The SP-1 has no hardware reset pin.

    1. Open https://solderless.engineering in a browser and connect the SP-1 over USB-C.
    2. Hold Track 1 + Track 4 while plugging in. The four track lights go solid.
    3. Select wakes-sp1-v0.4.8.bin, flash, then unplug and replug.

    Check the file against SHA256SUMS before flashing. wakes-sp1-v0.4.8-fallback.bin is 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

    baseheadΔof total
    FLASH (.bin)386,132393,584+7,45243.09%
    RAM66,96567,686+72125.82%
    Sections that changed
    sectionbaseheadΔ
    text207,504212,756+5,252
    rodata174,448176,620+2,172
    bss39,52140,226+705
    datas2,4162,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 flashing
    

    fallback vs v0.4.6

    Config: fallback

    baseheadΔof total
    FLASH (.bin)83,27683,420+1449.13%
    RAM30,49030,550+6011.65%
    Sections that changed
    sectionbaseheadΔ
    text71,52471,668+144
    bss4,2384,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 flashing
    

    SHA-256

    5658e01e307dc2c5abada8ab3d947981b4ce6715ba8c76d9018af5444f4cb300  wakes-sp1-v0.4.8-fallback.bin
    c3b550a15395d6631ebefc0747e2cc783e4315466a840599be02e90bb97741c6  wakes-sp1-v0.4.8.bin
    
  11. v0.4.6Wakes v0.4.6Beta3 files

    Pre-release for beta testing. Tested on a single SP-1 unit. Read docs/SAFETY.md before flashing, and see docs/Wakes - Manual.pdf for 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.md first. The SP-1 has no hardware reset pin.

    1. Open https://solderless.engineering in a browser and connect the SP-1 over USB-C.
    2. Hold Track 1 + Track 4 while plugging in. The four track lights go solid.
    3. Select wakes-sp1-v0.4.6.bin, flash, then unplug and replug.

    Check the file against SHA256SUMS before flashing. wakes-sp1-v0.4.6-fallback.bin is the test-tone build without Plaits or Marbles, for diagnosing hardware only. It is not the instrument.

    Size

    plaits

    Config: plaits

    sizeof total
    FLASH (.bin)386,13242.27%
    RAM66,96525.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 flashing
    

    fallback

    Config: fallback

    sizeof total
    FLASH (.bin)83,2769.12%
    RAM30,49011.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 flashing
    

    SHA-256

    01d70a1309c69f35e1d6a522ba3d4a8349182a4e2f9f92b86d95dbe90d8d8b24  wakes-sp1-v0.4.6-fallback.bin
    75c61a0189c17b4b4e31c454c530ec7b4d7b5fa104655002eae25750a331d26c  wakes-sp1-v0.4.6.bin