zeptocore

a handmade, handheld sample player.

buy

zeptocore is here.




Buy

a handmade, handheld sample player.

orders ship every Tuesday.

Stereo playback of 16-bit audio files @ 44.1 kHz sampling rate · SD-card storage for up to 32 gigabytes of samples · Recalls up to 256 audio files (16 banks of 16 tracks) · 16 different effects (saturate, fuzz, delay, reverb, etc…) · Single-cycle wavetable synthesizer · Realtime sequencer with optional quantization · Optional clock sync out · MIDI (in + out) over USB · Built-in 8-ohm speaker · Powered by two AAA batteries or USB-C · Open-source · Handmade in Seattle

demo

this is the zeptocore. a handmade, handheld sample player.

Quickstart

Download a one page PDF of this guide for easy reference.

on & off

To power on the device, toggle the switch on the top right to the “up” position. The device comes pre-loaded with several samples. A sample will start playing automatically.

Press keys to jump samples.

Navigate through the samples by pressing any of the 1-16 keys.

Hold a key and press to initiate a retrigger.

Experiment with retriggering samples by pressing and holding one 1-16 key and then pressing a different 1-16 key.

volume & tempo

The A, B, C, and D keys are used in combination with the knobs to adjust various settings.

Changing the volume.

Adjust the volume by holding the A key (top left key) and turning Knob Z located on the right-hand side.

Changing the tempo.

Similarly, modify the tempo by holding the A key and turning Knob Y.

banks & samples

There are 16 banks of samples, with each bank capable of holding 16 samples. By default, you are in the first bank and the first sample.

Pressing two keys while holding B will select a bank and then sample.

To switch to a different bank and select a different sample, follow these steps: first, hold B, then while holding B, press 1-16 to choose a bank. Keep the B key pressed and then press another 1-16 button to select a sample within that bank.

effects

The device powers up in JUMP mode, where pressing 1-16 allows you to navigate through samples. When in jump mode you can hold A and press any of the 1-16 to activate an effect.

Example of toggling the `fuzz` effect in `JUMP` mode.

There are 16 different effects to choose from.

effect parameters & probabilities

Each effect can be customized with up to two parameters and features a probability setting. To adjust the effect parameters, enter MASH mode by pressing (A + C). While in MASH mode, press and hold the effect you wish to edit. For instance, hold down 2 to modify the LOSS effect. While holding the effect, use Knob X or Knob Y to tweak the parameters for that effect. Detailed information about each parameter can be found in the effect reference section below. For example, loss allows adjustments to “loss type” and “loss amount.” To modify the likelihood of the effect occurring randomly, use Knob Z.

adding samples & updating firmware

To add samples, power off the device and remove the microSD card. Samples must be pre-processed before uploading them directly to the SD card. You can utilize the online tool for sample processing or opt to download the tool for offline use. Updating the firmware is simple - download a new release and upload it using a USB-C cable. Follow the provided instructions for uploading firmware to complete the process and install the new firmware.

long guide

For any additional information, refer to this guide or utilize the handy reference guide which provides quick access to button combinations and the effect list for easy reference.

Also, check out this video walkthrough for a visual guide on how to use the device:

About

The zeptocore is an open-source handheld device for playing with samples, featuring:

Goals

  1. Open-source: The source code is publicly available at https://github.com/schollz/_core, allowing anyone to modify this device today or in the future.
  2. Low learning curve: The device should be enjoyable without the need to read a manual, although reading the manual can enhance the experience.
  3. Unquantized: By default, the sequencer does not enforce 4/4 time signatures.

Non-Goals

  1. Similarity: The intention is not for this device to resemble anything else. Some decisions are highly opinionated, but since it is completely open-source, you can modify the device as you wish.
  2. Audio synthesis: The CPU is already quite taxed by the current system, and I believe that synthesis requires significantly more cycles to sound good.
  3. Polyphony: This device only supports two voices—a monophonic sample voice and a monophonic bass voice. These voices are smoothly crossfaded, but the CPU limits the possibility of having more polyphony. (Consider syncing more devices together instead!)

friends

if you like this device, you might also like these other small devices made by friends:

zeptoboard

zeptoboard is the breadboard variant of the zeptocore. It has most of the same functionality, but instead of using the buttons on the handheld device, you can utilize your keyboard and a midi interface (this website). This version requires some knowledge of breadboarding, but it is ideal if you want to develop your ideas based on the firmware.

you can purchase the components directly from me (helps to support my development!):

or directly from another manufacturer like Amazon:

(note: if you purchase components from me, I am able to provide reasonable amounts of support to help with your project).

pcm5102

when you get these off-the-shelf pcm5102 chips, make sure that you solder the backside to ensure proper audio connections. see this diagram:

zeptocade

the zeptocade offers a seamless plug-and-play experience with its zeptocore, housed in an arcade box featuring twenty led arcade buttons and eleven dedicated knobs. it’s perfect for those seeking a more tactile and colorful interaction with their music.

a handmade, handheld sample player...in an arcade box.

the zeptocade offers a seamless plug-and-play experience with its zeptocore, housed in an arcade box featuring twenty led arcade buttons and eleven dedicated knobs. it’s perfect for those seeking a more tactile and colorful interaction with their music.


zeptocade demo

zeptocade diy guide

zeptocore exchange

Removing and adding the zeptocore into the zeptocade is simple and straightforward. The zeptocore is held in place by four screws, which can be removed using a screwdriver. Once the screws are removed, the zeptocore can be lifted out of the zeptocade. To reinsert the zeptocore, simply place it back into the zeptocade and secure it with the screws.

If you are adding the zeptocore for the first time, make sure to first separate the top chip from the bottom plate - the top chip will sit in the top left of the zeptocade (see image below).

The first step is to remove the top four screws with an M4 hex key or Allen wrench.

Remove the four top screws to allow the plate to be opened.

The second step is to remove the back top corner screw and the standoff in the corner to leave enough room to add/remove the zeptocore.

Remove the back corner screw to remove the standoff.

Now, if adding the zeptocore, simply slide in the zeptocore and slot the knobs into the three holes. Then align the pins and push onto all of the header pins so that it is secure.

If removing the zeptocore, simply pull the zeptocore out of the header pins and slide it out of the zeptocade.

Carefully pull/push the zeptocore onto the header pins to exchange it.

For more information, see the demo video on how to add the zeptocore onto the header pins.

MIDI

MIDI Out

The zeptocore is a MIDI-compliant device that outputs midi when buttons are pressed or knobs are turned.

MIDI In

The zeptocore will automatically interpret MIDI start/stop/continue messages and automatically sync to the MIDI timing of the incoming signal.

Note: Interpretting other messages like button presses is not yet implemented but planned for a future update.

There are two ways to do MIDI input to the zeptocore.

USB MIDI

Simply plug in a USB cable from the zeptocore to a computer. The zeptocore will show up as a MIDI device on the computer. You can then forward MIDI messages from the computer to the zeptocore. For example, you can use midi2midi in a Chrome browser to forward MIDI messages from a MIDI controller to the zeptocore.

Using MIDI you can also easily sync up with Ableton or other DAWs.

Itty Bitty MIDI

I created a device called the itty bitty midi which you can use directly with a MIDI controller to send MIDI messages to the zeptocore. Simply plug in the MIDI controller to the “IN” side of the itty bitty midi and then plug the “OUT” side to the CLOCK input of the zeptocore. The itty bitty midi will automatically forward MIDI messages to the zeptocore.

Note: By default the zeptocore expects clock signals in the CLOCK input. You can switch to MIDI input by pressing the following combination: 13+10+11+16. More information here.

Combo for activating itty bitty midi MIDI input through the CLOCK in

Computer keyboard

The MIDI layer allows you to communicate with the zeptocore via a browser and computer keyboard. Simply open a browser (Note: Chrome only) to zeptocore.com and plug in the zeptocore to the computer.

If successful, a small screen will pop up that lets you see the current state of the zeptocore and allows you to interact with the zeptocore directly via the keyboard:

Modes

There are three modes that can be activated within the zeptocore:

Jump Mode is the default mode that is activated when turning on the zeptocore or by pressing A + B. In this mode, the 1-16 keys are used to navigate through audio slices, create loops, or retrigger audio samples for dynamic performance effects.

Mash Mode is accessed by pressing A + C and transforms the 1-16 keys into toggles for activating or deactivating effects. This mode adds complexity and textures to a sample.

Bass Mode can be initiated with A + D and assigns bass notes to the 1-16 keys, allowing users to play melodic basslines directly from the device. This mode enables easy integration of speaker-shaking audio elements into the output.

Uploading firmware

Periodically, new firmwares are released with updated effects or improved performance. If you have the tool installed, you can connect your device to your computer and automatically update the firmware. You can also download the latest release directly from this link:

Latest firmware: zeptocore v6.2.0

Instructions

To update your zeptocore to the latest version, follow these steps:

  1. Connect a USB-C cable to the device and hold the BOOTSEL button (located near the USB-C jack).
  2. While holding the BOOTSEL button, press the NRST button (also near the USB-C jack).
  3. After a few seconds, a new drive named RPI-RP2 should appear on your computer.
  4. Drag and drop the downloaded zeptocore_v6.2.0.uf2 file onto the RPI-RP2 drive.
  5. Wait momentarily for the drive to disappear, indicating the update is complete, and the device will turn on automatically.

Congratulations, your zeptocore has been successfully updated to the latest version.

(Note: If using zeptoboard, follow the same instructions but ensure you download the latest zeptoboard_v6.2.0.uf2).

Tool uploader

If you have installed the tool on your computer, launch the tool and click on the top right to upload a new firmware while the device is connected. Download the tool compatible with your operating system from the latest releases.

Firmware development

Follow these instructions if you want to develop the firmware yourself and create custom images.

Windows

Install WSL 2

$ wsl --set-default-version 2
$ wsl --install Ubuntu

Then restart computer and run

$ wsl --install

That should start your system. Then you can follow the Linux directions.

macOS

First install homebrew:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

You will need to add Homebrew to your PATH. Do so by running the following two commands:

which brew

will tell you which path your brew is on. then

echo 'eval "$([path to homebrew from command above] shellenv)"' >> /Users/USERNAME/.zprofile (remembering to substitute your username)
eval "$(/opt/homebrew/bin/brew shellenv)"

Now you can install the toolchain:

brew install cmake python
brew tap ArmMbed/homebrew-formulae
brew install gcc-arm-embedded

Now clone the repo and install the Pico SDK

git clone https://github.com/schollz/_core
cd _core
export PICO_SDK_PATH=$(pwd)/pico-sdk
git clone -b master https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk &&  git submodule update --init && cd ..

Now you should be able to build zeptocore:

make clean zeptocore
Linux

Install the pre-requisites:

sudo apt install cmake gcc-arm-none-eabi \
    libnewlib-arm-none-eabi \
    libstdc++-arm-none-eabi-newlib \
    git python3 g++
sudo -H python3 -m pip install numpy \
    matplotlib tqdm icecream librosa click

Clone this repo and install the Pico SDK:

git clone https://github.com/schollz/_core
cd _core
git clone https://github.com/raspberrypi/pico-sdk
cd pico-sdk &&  git submodule update --init && cd ..
export PICO_SDK_PATH=$(pwd)/pico-sdk

Do a build:

make clean zeptocore

(replace ‘zeptocore’ with ’ectocore’ or ‘zeptoboard’ if you are building a different image)

Uploading samples

Uploading samples is a straightforward process similar to transferring a file onto an SD card. However, as the samples need to be processed to meet the specifications of 44.1 kHz / 16-bit.

The sample tool is required for the sample preprocessing step, before transferring the samples to the SD card. This tool can be accessed online or downloaded to your computer for local use.

Use tool online: zeptocore v6.2.0 (Chrome and Firefox only)


Screenshot of the core tool

Stock samples

The zeptocore arrives with “stock” samples on it. If you ever want to remove them and replace them you can get them here by redownloading and transfering them back to the SD card.

Make sure you have the firmware updated to v5+ to use these samples.

Allowable formats

The sample tool will allow a variety of audio formats to be uploaded, including: .wav, .aif (OP-1 kits), .flac, .mp3, .xrni (Renoise splices), and even .wav (morphagene reels).

Transfering samples to SD card

Once you finish using the tool to collect your samples, click the Download .zip button in the lower left corner. This will download a zip file containing all of your samples.

Unzip this .zip file extract all the bankX folders into the SD card. The SD card structure should look like this:

Each of those bankX folders contains all the nessecary audio files. The bank0 folder corresponds to the first bank (they are “0-indexed”). If you want a bank to be in a different slot, you can simply rename it. For example, you could rename bank0 to bank2 and it would be loaded into the third bank slot.

Download to use tool offline:

Windows

Download for Windows: x64

Once downloaded, double click on the executable file to run it.

macOS

To install the tool on macOS, first open a terminal.

Then, if you are on an Intel-based mac install with:

curl -L https://github.com/schollz/_core/releases/download/v6.2.0/core_macos_amd64_v6.2.0 > core_macos

Or, if you are on a M1/M2-based mac install with:

curl -L https://github.com/schollz/_core/releases/download/v6.2.0/core_macos_aarch64_v6.2.0 > core_macos

Then to enable the program do:

chmod +x core_macos 
xattrc -c core_macos

Now to run, you can just type

./core_macos

A window should pop up in the browser with the offline version of the tool.

Linux

Download for Linux: x64

After downloading, run it directly from the terminal.

Building from source

Windows

First install Scoop by opening PowerShell terminal and type:

> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
> Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

Then in the Powershell:

> scoop update
> scoop install go zig sox

Now you can build directly from Powershell with:

> cd core
> $env:CGO_ENABLED=1; $env:CC="zig cc"; go build -v -x

Now the upload tool can be run by typing

./core.exe
Linux

Make sure Go is installed and then install air:

> go install github.com/cosmtrek/air@latest

Now you can build the tool using the following:

> git clone https://github.com/schollz/_core
> cd _core/core
> go build

For development, you will need to have a SSL certificate installed on localhost, otherwise the MIDI won’t work.

To get a local SSL server that redirects to the core server, follow these instructions. First install mkcert:

sudo apt install libnss3-tools
git clone https://github.com/FiloSottile/mkcert && cd mkcert
go build -ldflags "-X main.Version=$(git describe --tags)"
go install -v
mkcert -install
mkcert localhost

Then install and run local-ssl-proxy:

npm install -g local-ssl-proxy
local-ssl-proxy --key localhost-key.pem --cert localhost.pem --source 8000 --target 8101

Now you can run the core software:

cd core && air

And now the server can be accessed at https://localhost:8000.

Cases

The zeptocore comes as a PCB aesthetic which I find to be plenty durable and fun, but there are also 3rd party options for casings.

Cases for purchasing

Dich Studios has cases available for purchase, featuring frosted buttons which allow the LEDs to shine through well.

Dich Studios case

3D-printed cases

The case is a 3D-printed housing that fits the zeptocore and provides a more tactile interface.

There is a simple lower case made by @vectorstofinal that is available for download and 3D printing:

www.thingiverse.com/thing:6616773

There is also a case for USB powering only by @pabloantxon that is available for download and 3D printing:

www.thingiverse.com/thing:6648821

Combos

See the quick reference for the short form of this information.

Mode jump

Key combo: A + B from any mode

There are three possible modes: jump, mash, and bass.

In the JUMP mode, pressing in the 1-16 will jump slices, create little loops, or do retriggers.

Combo going to JUMP mode.

Mode mash

Key combo: A + C from any mode

There are three possible modes: jump, mash, and bass.

In the MASH mode, pressing in the 1-16 will toggle effects on and off depending on where you press. If you want to have the effects only active while the button is pressed, you can switch to momentary mode by pressing 1+4+13+16.

Combo going to MASH mode.

Mode bass

Key combo: A + D from any mode

There are three possible modes: jump, mash, and bass.

In the BASS mode, pressing in the 1-16 will play bass notes.

Combo going to BASS mode.

Tempo

Key combo: A + B + B + ... from any mode

Key combo: A + Knob X from any mode

The Tempo feature offers three methods for precision tempo control.

First, you can adjust dynamically by holding A and rotating Knob X—with the middle position representing the original BPM, turning fully clockwise for double speed, and turning fully counter-clockwise for half speed.

Combo for changing the tempo with a knob.

Secondly, you can hold A and tap B to manually tap in the tempo, which ranges from 30 to 300 BPM.

Combo for changing the tempo with tapping.

In both methods, the newly set tempo is briefly displayed, providing immediate visual confirmation of adjustments. This feature ensures that users can easily synchronize their audio to the desired pace.

Thirdly, you can press and hold A, and then hold B, and then tap any of the keys, 1-16 to set the tempo to a pre-defined value. This is useful for quickly setting the tempo to a common value.

Pitch

Key combo: A + Knob Y from any mode

Change the pitch by holding A and turning Knob Y. Pitch can be changed independent of tempo.

Try it: Interesting effects can be obtained by turning the tempo high and turning the pitch down or vice-versa.

Changing pitch.

Volume

Key combo: A + Knob Z from any mode

Change the volume by holding A and turning Knob Z. Turning the knob fully clockwise may cause clipping for some audio files, while turning it fully counter-clockwise will mute the current audio.

Changing volume.

Jump

Key combo: 1-16 from jump mode

Key combo: A + 1-16 from mash mode

In jump mode, pressing any of the 16 keys will “jump” the sample between slices. The slice position depends on what is set in the Zeptocore tool. The Zeptocore will instantly crossfade from the current position to the beginning of the slice that is jumped to.

Press any of the 16 keys to jump while in JUMP mode.

Retrigger

Key combo: 1-16 + 1-16 from jump mode

Select a slice with 1-16 and then press another key on the 1-16 keypad to initiate a retrigger effect on the selected slice. The retrigger rate will depend on the second key press, with 1 being the fastest rate and 16 being the slowest rate.

If you want pitch up/down effects to be applied to the retriggering, you can enable the Retrigger Setting under the effects (A + 15 in jump mode).

Hold any of the 16 keys and then press any of the 16 keys to jump while in JUMP mode to do a retrigger.

Loop sequence

Key combo: 1-16 + 1-16 + 1-16 from jump mode

Select a slice with 1-16 and then press another key on the 1-16 keypad. Subsequently, press a third key on the 1-16 keypad. This action will create a loop between the first and second slices pressed.

Hold three keys in JUMP mode to activate looping.

Change samples

Key combo: B + 1-16 + 1-16 from any mode

To change samples, you can hold B and press 1-16 to select a bank. While still holding B, press another 1-16 to select the sample. The current sample will be instantly faded out (within 10 ms), and the next sample will load at the position where the current sample is playing.

Pressing two keys while holding B will select a bank and then sample.

Alternatively, you can use the knobs to change samples - C + X will change to any sample.

Alternatively hold the C key while turning knobs to change bank/sample individually.

Mute

Key combo: B + C from any mode

This key combo will mute the audio but playback and clocking will continue.

If you want to stop everything you need to use start/stop.

Combo for toggling mute.

Start/Stop

Key combo: B + D from any mode

This key combination will mute the audio and stop playback. Pressing it again will restart the audio from the first beat. If you only need to mute the audio without stopping playback, you can use the mute key combination.

Combo for toggling the start and stop.

Random sequencer

Key combo: B + Knob X from any mode

Turning this knob fully CCW will allow the full sequence to play. Turning the knob fully CW will create a new random sequence in the current sample. Turning the knob in between both ends will adjust the number of steps available to the random sequence.

The random sequence can be re-rolled by turning fully CW. You can also re-roll a single random step by holding B and pressing A.

Filter sweep

Key combo: B + Knob Y from any mode

Rotating this knob clockwise will increase the cutoff frequency of the low pass filter, allowing higher frequencies to pass through. Rotating it counterclockwise will decrease the cutoff frequency, restricting the passage of higher frequencies.

Combo for doing a filter sweep.

Bass volume

Key combo: B + Knob Z from any mode

Turning this knob will adjust the volume of the bass. Turn it clockwise to increase the volume. Please note that high volume levels may cause crackling, depending on the headroom in your samples.

Combo for changing the volume of the bass.

Select sequence

Key combo: C + 1-16 from any mode

Select any one of the 16 slots (1-16) to store a sequence. Each of the three modes (JUMP, MASH, and BASS) has 16 slots available for storing sequences. This is the first step to record a sequence.

Combo for selecting a sequence slot.

Play/stop sequence

Key combo: C + B from any mode

If a sequence is recorded in this slot, this button will toggle playback for the sequence. If recording, pressing this button will end the recording.

Combo for playing a sequence slot.

Record sequence

Key combo: C + D from any mode

This key combination will toggle sequence recording. In the JUMP mode, it will record a sequence of jumps. In the MASH mode, it will record a sequence of toggling effects. In the BASS mode, it will record a bass sequence.

Combo for recording/deleting a sequence slot.

Recording a sequence on Zeptocore differs slightly from other devices. The key distinction is that Zeptocore records the time between presses. Therefore, to record a sequence of 4 steps, you will need to make 5 presses. The final press will not be counted as a sequenced step, but it is necessary to determine the duration of the penultimate press.

It is important to note that Zeptocore does not have a concept of time signature. All recorded actions are quantized to 1/96th of a beat, ensuring precise preservation of the recorded press timing. For quantizing the press timing with less resolution, you can utilize the C + Knob Z key combination.

Please be aware that the button combination of C + D also functions to delete a sequence currently stored in the selected slot.

Chain sequence

Key combo: C + 1-16 + 1-16 from any mode

Sequences can be combined into “chains” of sequences, which are saved as new sequences that can be recalled or further chained into new sequences.

Combo for creating a sequence chain.

To create a sequence chain, follow these steps:

  1. Press and hold the C key (the sequence selector). Lit buttons indicate where sequences are stored, while unlit buttons signify empty slots.
  2. While holding down the C key, press an unlit button to select the sequence slot where the new chain sequence will be stored.
  3. While still holding down the C key, press the lit buttons with existing sequences in any order to create the sequence chain.
  4. Release the C key, and the sequence chain will be automatically generated and saved in the slot chosen in step #2.

If there are no free slots available, you cannot create sequence chains. In such cases, you can delete a sequence by selecting it (C + 1-16) and then deleting it (C + D).

Change samples (with knob)

Key combo: C + Knob X from any mode

You can change the current sample using this combination.

You can also change banks + samples simultaneously using button presses.

Alternatively hold the C key while turning knobs to change bank/sample individually.

Random tunnel

Key combo: C + Knob Y from any mode

“Tunneling” is where the sample will randomly jump to a neighboring sample in the current bank.

Quantize

Key combo: C + Knob Z from any mode

This knob will increase the quantization for the current playing sequence (JUMP, MASH, or BASS).

Hold the C key while turning Knob Z to change quantization.

Select save

Key combo: D + 1-16 from any mode

Select any one of the 16 slots (1-16) to store a saved copy of the current state.

Load save

Key combo: D + B from any mode

Load the settings from the current saved slot.

Create save

Key combo: D + C from any mode

Save the current settings into the selected slot.

Octave +1

Key combo: A + 1-16 from bass mode

By pressing A in bass mode you will be able to press any of the notes (1-16) and they will be pitched up by one octave.

Random jump

Key combo: D + Knob X from any mode

Adjust the probability of random jumping by increasing it when turning the knob clockwise.

If you want to maintain sequence lock, you can use the sequence lock combo.

Random effects

Key combo: D + Knob Y from any mode

Adjust the probability of random effects. The effects that are activated are the ones designated in the current random effects banks. You can change the random effect bank by holding D and turning Knob Z.

Random effects banks

Key combo: D + Knob Z from any mode

When turning up the random effects, the precise effects that are affected will be determined by the effects selected for the current bank of effects. To change which effects are toggled, simply use the sample tool and adjust the settings and select the effects you’d like.

The effects are randomly activated by holding D and turning Knob Y.

Kick layering

Key combo: A + D + 1-16 from any mode

Key combo: 13 + 10 + 7 + 16 from any mode

Note: v6.2.0 and later firmware required for this feature.

This is an experimental mode that lets you choose from 16 different kick samples (keys 1 to 16). Hold down the A button and then hold down the D button and then press one of the 16 keys to layer the selected kick sample with the currently loaded sample. Continue to hold down the A and D buttons and press another of the 16 keys to set the volume of the selected kick sample.

You can turn this mode off by holding down the A button and then holding down the D button and then pressing the 1 key twice.

This mode can also be toggled using the button combo 13, 10, 7, 16.

When activated, the selected kick sample will be played at the same time as the detected kick drums in the sample. This can be useful for adding more punch to your kick drums.

Kick detection in web tool

Use the web tool in v4+ to generate information for the placement of kick samples. Determined placements are shown with a small kick drum icon “” placed at the position of each estimated kick.

In this sample, there were four detected locations for kick samples.

Kick detection

Unlike the slices which are manually set or defined by intervals, the kicks (and snares too) are detected using a machine learning approach. The detection is based of an ML model of drums and placement of kicks and snares. An original audio file of drums can be separated into just kick drums:

Original audio:

Kick stem:

The transients in the kick stem are used to calculate the best placement for kick drums.

One-shot

Key combo: 5 + 6 + 5 from any mode

The Zeptocore tool can be utilized to configure the one-shot mode for each sample. On the device, you can use this combination to toggle the one-shot mode on and off. When in one-shot mode, the sample will stop playing upon reaching the end of the sample (as opposed to default playback mode, detailed further in Play mode).

One-shot mode will show ONESHOT ON when enabled and ONESHOT OFF when disabled.

Combo for toggling one-shot mode.

MIDI with ittybittymidi

Key combo: 13 + 10 + 11 + 16 from any mode

The ittybittymidi is a device that allows you to send MIDI messages directly from another device to the zeptocore through the zeptocore clock input. To use this feature, you must first enable MIDI mode on the zeptocore. To do this, press the following combination: 13+10+11+16. The screen will show MIDI ON when MIDI mode is enabled.

Combo for activating itty bitty midi MIDI input through the CLOCK in

Momentary FX mode

Key combo: 1 + 4 + 16 + 13 from any mode

By default, the MASH mode will let you turn on and off effects by pressing the buttons to toggle them. You can change this toggling behavior to a momentary press behavior by using this combo. Press 1+4+16+13 to switch between momentary and toggling FX in MASH mode. The screen will show MOMENTARY when momentary mode is enabled. When in momentary mode, the effects will only be active while the button is pressed.

Combo for switching between activating effects with toggling or with momentary presses in MASH mode.

Change play mode

Key combo: 7 + 8 + 7 from any mode

Resampling

Key combo: 9 + 12 + 10 + 11 from any mode

There are two types of resampling in Zeptocore - linear and quadratic. By default, resampling is conducted linearly, which may introduce artifacts that sound “grainy” or “lofi”. An alternative mode is quadratic resampling, which offers slightly better audio quality but at a higher CPU cost. In cases where the CPU load surpasses a threshold (which can happen with multiple effects), quadratic resampling may lead to more frequent intermittent glitches.

When in linear resampling mode, it will display LINEAR, and when in quadratic mode, it will show QUAD.

Slice playback

Key combo: 1 + 2 + 1 from any mode

Sequence lock

Key combo: 1 + 2 + 3 + 4 from any mode

Sequence lock mode, when activated, will synchronize the sequence to a global clock. This ensures that manipulations to the sequence (such as jumping) will revert back to the intended beat position. Sequence lock mode will show LOCK ON when enabled and LOCK OFF when disabled. The sequence lock is enabled by default.

Combo for toggling sequence lock.

Tempo match

Key combo: 5 + 6 + 7 + 8 from any mode

Tempo matching involves adjusting the playback speed of a sample by a multiplier to align with the ratio between the sample’s BPM (set in the tool) and the BPM of the current tempo in Zeptocore. Typically, this adjustment is configured per sample when loading samples onto Zeptocore, but it can also be adjusted on the fly.

When enabled, the Tempo Match mode will show MATCH ON, and when disabled, it will display MATCH OFF.

This setting can be customized on a file-by-file basis using the tool.

Retrigger pitching

Key combo: 9 + 10 + 11 + 12 from any mode

When this effect is active, it will cause the retriggering to pitch up or down the audio randomly.

Sync out

Key combo: 13 + 9 + 5 + 1 + 15 + 11 + 7 + 3 from any mode

The Sync Out feature enables Zeptocore to output a sync signal through the left channel of the output. This signal channel can be utilized with external equipment that accepts a clock pulse.

When enabled, the Sync Out mode will show SYNC ON, and when disabled, it will display SYNC OFF.

Combo for activating itty bitty midi MIDI input through the CLOCK in

Randomize sequence

Key combo: 6 + 7 + 10 + 11 from any mode

Activating this combo will create a random sequence that will be used in place of the current sequence (whether is from sequencing or normal playback). (Requires v2.5.+ version of the firmware). Demo video.

If this is activated with random fill, then a new sequence will automatically be generated every 32 beats.

If this is activated, holding down and pressing any of the 1-16 keys will automatically generate a new sequence of that length.

New in v2.7.4: If this is activated, holding down B and pressing A will swap out a random entry in the sequence for another random entry.

Combo for toggling a random sequence.

Random fill

Key combo: 10 + 11 + 15 + 14 from any mode

Activating this combo will continuously toggle a random fill at the end of a sequence.

Combo for toggling the random fill mode.

Kicks

Key combo: 4 + 7 + 10 + 13 from any mode

Switching the kick mode will adjust the playback sequence to only play sequences containing kicks.

When enabled, the Kick mode will show KICKS, and when disabled, it will display NORM.

Snares

Key combo: 13 + 10 + 7 + 4 from any mode

Switching to snare mode will adjust the playback sequence to only play sequences containing snares.

When enabled, the Snare mode will show SNARES, and when disabled, it will display NORM.

Effects

Each effect can be adjusted using Knob Z to change the probability of occurrence from none (fully counter-clockwise) to often (fully clockwise).

Refer to the quick reference for a concise version of this information.

Saturation

Key combo: 1 from mash mode (or A + 1 from jump mode)

Knob X: preamp

The Saturation effect enriches audio by adding warmth and depth using a double sine wave technique. This enhances the overall texture and loudness without introducing distortion.

Loss

Key combo: 2 from mash mode (or A + 2 from jump mode)

Knob X / Y: loss type / loss amount

The Loss effect simulates the analog imperfections of a worn tape or faulty radio transmission. It provides controls for adjusting the type and amount of degradation, allowing you to achieve vintage or distressed audio textures.

Fuzz

Key combo: 3 from mash mode (or A + 3 from jump mode)

Knob X / Y: preamp / postamp

The Fuzz effect adds a rich, fuzz-like distortion to audio. It includes preamp and postamp knobs for finely tuning the intensity before and after the effect is applied.

Bitcrush

Key combo: 4 from mash mode (or A + 4 from jump mode)

Knob X / Y: bits / frequency

The Bitcrush effect aggressively degrades audio fidelity by reducing the bit depth to 2 bits and sampling frequency to 4 kHz. This mimics the characteristics of early digital audio gear.

Timestretch

Key combo: 5 from mash mode (or A + 5 from jump mode)

The Timestretch effect significantly slows down audio playback by a factor of approximately 8x without changing its pitch.

Delay

Key combo: 6 from mash mode (or A + 6 from jump mode)

Knob X / Y: feedback / duration

The Delay effect introduces a feedback delay mechanism where the knobs can finely adjust feedback intensity and delay duration. This feature allows for extensive creative flexibility, which can extend into overclipping for intense audio textures.

Comb filter

Key combo: 7 from mash mode (or A + 7 from jump mode)

Knob X / Y: left spread / right spread

The comb filter introduces a very short delay to the audio chain, creating a metallic resonating sound when activated.

Repeat

Key combo: 8 from mash mode (or A + 8 from jump mode)

Knob X: duration

The Repeat effect uses zero-crossings to loop audio segments that best match the requested duration. This effect is distinct from delay as it overtakes the audio rather than adding to it, allowing for speeds up to the audio rate.

Tighten

Key combo: 9 from mash mode (or A + 9 from jump mode)

Knob X: duration

The Tighten effect uses a gate to cut off the audio towards the end of a step, based on the duration setting. This clipping of the ends helps create a more defined and tighter sound profile.

The gate effect is a tool used in audio engineering to control the volume level of a signal. It works by allowing or blocking the passage of audio based on a set threshold. This can help eliminate unwanted noise or shape the dynamics of a sound.

Expand

Key combo: 10 from mash mode (or A + 10 from jump mode)

Knob X / Y: expanse / dry/wet

The Expand effect will create a reverberation effect on the sound. Please note that this effect consumes more CPU and memory than other effects. Using combinations of effects may create instabilities in the system.

Circulate

Key combo: 11 from mash mode (or A + 11 from jump mode)

Knob X / Y: rate / depth

The Circulate effect enhances the audio experience by dynamically circulating sound between the left and right channels. It offers adjustable rate and depth settings for creating immersive spatial movement.

Scratch

Key combo: 12 from mash mode (or A + 12 from jump mode)

Knob X: rate

The Scratch effect replicates a record scratch by rapidly altering the playback speed, and includes a rate knob to adjust the frequency of speed changes.

Lower

Key combo: 13 from mash mode (or A + 13 from jump mode)

Knob X / Y: duration / depth

The Lower effect activates a low-pass filter, gradually filtering out high frequencies to emphasize lower tones. It offers controls for adjusting the duration and depth of the transition.

Pitch

Key combo: 14 from mash mode (or A + 14 from jump mode)

Knob X / Y: duration / depth

This effect will alter the pitch without affecting the tempo, allowing beats to be split or doubled when the speed is halved or doubled, respectively.

Reverse

Key combo: 15 from mash mode (or A + 15 from jump mode)

This will reverse the audio and change the playback direction of the sequence to play it in reverse. If you are using the sequence, it will only reverse the audio.

Tapestop

Key combo: 16 from mash mode (or A + 16 from jump mode)

Knob X: duration

The Tapestop effect simulates the sound of a tape machine being stopped by gradually decreasing the pitch and halting audio playback. It includes a control for adjusting the duration of the effect.

Questions

Why is it randomly shutting down?

I apologize for any inconvenience. When encountering issues due to low battery levels, I recommend first replacing both batteries with fresh ones. Try powering the device using USB-C to check if it resolves the issue. I also suggest using high-quality alkaline batteries instead of carbon zinc ones, as alkaline batteries maintain voltage better over time and are less likely to cause operational problems.

How do I change volume?

To adjust the volume, hold A and turn Knob Z. For additional details, refer to this section.

Sometimes I hear a weird glitch?

I apologize for any issues you may be experiencing. The audio drops are likely related to the SD cards being used. Not all SD cards are equal, as some may have high latencies that can cause audio disruptions. Refer to the answer to this question to identify the best SD card for optimal performance. When glitches occur, the zeptocore can typically recover, producing varying glitch sounds. However, in rare cases, a restart may be necessary. The provided SD card should be suitable, but if you encounter ongoing issues, please inform me.

How do I start and stop?

You can easily start and stop by holding B and then pressing D. If the audio is playing, it will stop, and if it’s already stopped, it will start playing from the beginning. Additional details can be found in this section.

How do I change samples?

To change samples using the buttons, follow these steps: hold B and press 1-16 to choose a bank. While still holding B, press another 1-16 to select the sample.

Alternatively, you can change the sample by selecting a bank with a knob or by selecting a sample with a knob. For more information, refer to changing banks with a knob and changing samples with a knob.

Alternatively hold the C key while turning knobs to change bank/sample individually.
Which SD card can I use?

If you purchased the zeptocore from me, I have made efforts to supply the best SD card available.

Please note that not all SD cards are equal. Terms like “high-speed,” “A1,” or “U3” on the card do not necessarily indicate its actual speed performance.

Below is a list of known good and bad cards:

Known bad cards

Do not use these cards! They may appear to work, but they can cause spurious glitches.

Known good cards

Is a schematic available?

The schematics are open-source - you are welcome to utilize them to customize the device according to your preferences. If you intend to produce boards based on my schematics, I kindly ask for your financial support to help sustain the development of future devices.

How do I know which version I have?

When you power on the device, you can quickly check the current version by observing the flashing “Z” along with a version number such as “1.0.0,” indicating version 1.0.0.

How does the zeptocore compare?
zeptocorepikocorePO-33 K.O.Volca Sample
Open-sourceYesYesNoNo
Voices1 stereo, 1 mono1 mono4 mono8 mono
Audio quality16-bit, 44.1 khz8-bit, 33 khz8-bit, 23 khz12-bit, 32 khz
Effectsloop, distortion, saturation, bitcrusher, beat repeat, delay, comb, reverb, timestretch,
filter, reverse, autopan, reverse, stutter, scratch, repitch
distortion, timestretch, filter, reverse, stutter, loop, repitchloop, unions, stutter, scratch, reverse, repitchreverb, reverse, repitch
Sample limit25610016100
Memory limit32 GB16 MB1 MB4 MB
Record audioNoNoYesNo
SyncIn/OutIn/OutIn/OutIn/Out
MIDIIn/OutInNoIn
Why is the web tool not showing waveforms?

The web tool only supports Firefox and Chrome. If you are using a different browser, you may experience issues with the waveform display. Please try using Firefox or Chrome to see the waveforms correctly.

What is in the battery holder?

The residue is the battery holder is dried expoy glue. The battery holder is glued to the PCB to ensure that it doesn’t move around when you insert or remove batteries. The glue is a non-conductive epoxy that is safe to touch.

Dried expoy underneath the batteries to hold the battery pack.
Why is MIDI not working on Mac OS?

The zeptocore is a class-compliant MIDI device, which means it should work with any operating system that supports MIDI. However, some users have reported issues with Mac OS. Here are some common troubleshooting steps:

Reference

Combo list

ActionComboDescriptionMode
Jump1-16Crossfade into new slice positionjump
JumpA + 1-16Crossfade into new slice positionmash
Retrigger1-16 + 1-16Creates retrig ramp, speed depends on second pressjump
Loop sequence1-16 + 1-16 + 1-16Loop a sequence between first and second pressjump
Octave +1A + 1-16Increase octave in the bass modebass
Mode jumpA + BSwitches into jump modeany
Mode mashA + CSwitches into mash modeany
Mode bassA + DSwitches into bass modeany
TempoA + B + B + ...Sets new tempo based on the cadence of B pressesany
TempoA + Knob XSets new tempo based on the position of knob Xany
PitchA + Knob YChange pitchany
VolumeA + Knob ZChange volumeany
Change samplesB + 1-16 + 1-16The first 1-16 loads the bank, and then the next is the sampleany
MuteB + CMutes playback but does not stop playbackany
Start/StopB + DToggles the playback to start or stopany
Random sequencerB + Knob XCreate random seqeuences of different lengthsany
Filter sweepB + Knob YSweep the low pass filterany
Bass volumeB + Knob ZChange the volume of the bassany
Select sequenceC + 1-16Select sequence slot for current modeany
Play/stop sequenceC + BToggle sequence playback for current modeany
Record sequenceC + DToggle sequence recording for current modeany
Chain sequenceC + 1-16 + 1-16Chain sequences togetherany
Change samples (with knob)C + Knob XChange samples with a knobany
Random tunnelC + Knob YChange the probability of tunnelingany
QuantizeC + Knob ZQuantize the current playing sequenceany
Select saveD + 1-16Select save slotany
Load saveD + BLoad from current save slotany
Create saveD + CSave into the current slotany
Random jumpD + Knob XChange probability of random jumpany
Random effectsD + Knob YChange probability of effectsany
Random effects banksD + Knob ZSelect bank for random effectsany
Kick layeringA + D + 1-16Layer kick drums with preloaded samplesany
Kick layering13 + 10 + 7 + 16Layer kick drums with preloaded samplesany
One-shot5 + 6 + 5Toggle one-shot mode on/off on current sampleany
MIDI with ittybittymidi13 + 10 + 11 + 16Toggle MIDI mode for using with ittybittymidiany
Momentary FX mode1 + 4 + 16 + 13Switch between momentary/toggling FX in MASH modeany
Change play mode7 + 8 + 7Change between play modesany
Resampling9 + 12 + 10 + 11Toggle between linear and quadratic resampling modesany
Slice playback1 + 2 + 1Change between the slice playback modesany
Sequence lock1 + 2 + 3 + 4Toggle sequence locking modeany
Tempo match5 + 6 + 7 + 8Toggle tempo matching modeany
Retrigger pitching9 + 10 + 11 + 12Toggle retrigger pitchingany
Sync out13 + 9 + 5 + 1 + 15 + 11 + 7 + 3Toggle sync out modeany
Randomize sequence6 + 7 + 10 + 11Toggles randomization of the current sequence.any
Random fill10 + 11 + 15 + 14Toggles random fills at the end of a sequence.any
Kicks4 + 7 + 10 + 13Play only the kicks found in the sampleany
Snares13 + 10 + 7 + 4Play only the snares found in the sampleany

Effect list

EffectKeyKnob XKnob YDescription
Saturation1preampAdds warmth, depth without distortion, uses double sine
Loss2loss typeloss amountSimulates analog imperfections, type and amount control
Fuzz3preamppostampAdds rich fuzz-like distortion, tunable intensity
Bitcrush4bitsfrequencyReduces fidelity to mimic early digital audio
Timestretch5Timestretch of the original audio
Delay6feedbackdurationDelay controls feedback and duration of delay.
Comb filter7left spreadright spreadCreates tight comb delay filter
Repeat8durationLoops audio at zero-crossings, overtakes original audio
Tighten9durationGates audio, clips ends for tightness
Expand10expansedry/wetExpands the sound.
Circulate11ratedepthPans audio for immersive spatial experience
Scratch12rateSimulates record scratch, rapidly changes playback speed
Lower13durationdepthActivates low pass filter, emphasizes lower tones
Pitch14durationdepthAdjusts pitch up or down with depth, duration
Reverse15Reverses audio playback and sequence direction
Tapestop16durationDrops pitch, halts playback

Contact

For any questions or feedback, please contact me at zack@infinitedigits.co.

There are some common questions that have been answered here, but if you have any other questions, please feel free to reach out.

Version history

v6.2.0 - October 31, 2024

v6.1.0 - October 30, 2024

v6.0.10 - October 24, 2024

v6.0.9 - October 18, 2024

v6.0.8 - October 14, 2024

v6.0.7 - October 14, 2024

v6.0.6 - October 13, 2024

v6.0.5 - October 10, 2024

v6.0.3 - October 7, 2024

v6.0.2 - September 28, 2024

v6.0.0 - September 11, 2024

v5.0.11 - September 5, 2024

v5.0.9 - August 28, 2024

v5.0.6 - July 27, 2024

v5.0.5 - July 24, 2024

v5.0.3 - July 15, 2024

v5.0.2 - July 7, 2024

v5.0.1 - July 5, 2024

v5.0.0 - July 3, 2024

v4.0.0 - June 30, 2024

v3.0.2 - June 21, 2024

v3.0.1 - June 19, 2024

v3.0.0 - June 18, 2024

v2.9.2 - June 12, 2024

v2.9.1 - June 11, 2024

v2.9.0 - June 10, 2024

v2.8.3 - June 4, 2024

v2.8.2 - June 3, 2024

v2.8.1 - June 3, 2024

v2.8.0 - June 1, 2024

v2.7.7 - May 31, 2024

v2.7.6 - May 27, 2024

v2.7.5 - May 27, 2024

v2.7.4 - May 25, 2024

v2.7.3 - May 24, 2024

v2.7.2 - May 19, 2024

v2.7.0 - May 16, 2024

v2.6.1 - May 10, 2024

v2.6.0 - May 9, 2024

v2.5.0 - May 7, 2024

v2.4.0 - May 2, 2024

v2.3.4 - April 29, 2024

v2.3.3 - April 28, 2024