A music tracker for the M5Stack CardputerZero. It reads and writes M8 song and instrument files, so a song can move between ZeroTracker and an M8.
ZeroTracker_0.1.0.mp4
ZeroTracker 0.1.0 on the CardputerZero (2:32). The song is "SLSKERS DEMO" by mikey303, from jegasus' M8 Tracker Workshop, CC BY-NC-SA 4.0; the video is shared under the same licence.
- Eight tracks, songs, chains, phrases, instruments and tables, as on the M8.
- Synth engines: FMSYNTH, WAVSYNTH, MACROSYNTH (Braids models), HYPERSYNTH, and the SAMPLER with slices and a sample editor that records from the microphone.
- Mixer with chorus, delay, reverb, per-instrument EQ and a master limiter.
- RENDER to WAV: the mix and a stem per track.
- LIBRARY: download packs of songs, instruments and samples on the device.
- Keyboard-first UI for the CardputerZero, in seven languages.
Getting started: docs/manual. Learning resources for the M8 workflow: docs/manual/resources.md.
ZeroTracker is inspired by the excellent M8 tracker by Dirtywave. We
are M8 users and fans. That is why ZeroTracker opens and saves M8 song (.m8s) and instrument
(.m8i) files, and why most of its workflow (song, chain, phrase, instrument, table) follows
the M8. Files move between the two without losing data; how they sound can differ (see below).
ZeroTracker is an independent project. It is not affiliated with, endorsed by or supported by Dirtywave. M8 is Dirtywave's product and trademark. ZeroTracker uses the name only to describe file compatibility.
No Dirtywave code was used. No M8 firmware was disassembled or decompiled. It contains no Dirtywave data, samples, wavetables, fonts or graphics.
Everything in ZeroTracker comes from analysis and comparison:
- File format. The
.m8sand.m8ireader and writer start from m8-file-parser (MIT), the community's open-source parser. We extended it by saving files and comparing the bytes. - Sound. The synth engines are our own code. Each one plays the same test songs on the M8 and on ZeroTracker. We render both, then compare the audio by level, frequency bands and timing, one track at a time. Then we change our code until the measurements match. The M8's sound is a target to listen to, not code to copy.
- MACROSYNTH. It uses the oscillator models of Mutable Instruments' Braids, open-sourced by Emilie Gillet under the MIT licence.
- Workflow. The screens follow the M8's concepts, redrawn for the CardputerZero's screen and keyboard.
Where we could not measure something, ZeroTracker does its own thing. An example: the M8's wavetables are Dirtywave's data, so ZeroTracker uses generic waveforms for those slots.
Because ZeroTracker is built by listening and measuring, not from the M8's code, its sound is close to the M8 but not identical. Your songs will play with the same notes, timing and structure. Some sounds will differ:
- Levels. A track can be a little louder or quieter than on the M8. On our test songs the typical difference per track is about 1-2 dB.
- Tone. Filters at high resonance, distortion (limit modes), and the chorus, delay and reverb are our own designs. They are tuned toward the M8, so they sound similar but not the same.
- WAVSYNTH wavetables. These play generic waveforms, so those instruments sound different.
- Fine details. Envelope curves, modulation and the master limiter are measured approximations.
ZeroTracker is not a replacement for an M8. It is a pocket tracker that speaks the same language. If something sounds clearly wrong to you, please open an issue with the song: every report helps us get closer.
On a CardputerZero, download the .deb from the releases page and run:
sudo apt install ./ZeroTracker_*_arm64.deb
XDG_RUNTIME_DIR=/run/user/1000 systemctl --user restart APPLaunch.serviceRust (stable) and CMake on Linux. The device binary is built in a Debian trixie container (Docker), so it matches the device's libraries.
scripts/fetch-fixtures.sh # once: test files from m8-file-parser (MIT)
scripts/ci.sh # cargo fmt, clippy, test, and the desktop build
build/linux-x86-64/Release/zerotracker # desktop simulator, 320x170
scripts/cp0-docker-build.sh --package # device build and .deb in dist/| Path | Content |
|---|---|
m8fmt/ |
M8 file reader and writer (MIT, a fork of m8-file-parser) |
m8view/, m8edit/ |
song views and editing commands |
engine/ |
sequencer and synth engines, C API in engine/include/ |
ffi/ |
the static library the app links: navigation, samples, RENDER, LIBRARY |
src/ |
the C++/LVGL app, from the CardputerZero Template |
docs/manual/ |
getting started and resources |
Bug reports, songs that sound wrong, translations and code are welcome: see CONTRIBUTING.md, including the clean-room rules every contribution follows.
ZeroTracker is free software under the GNU General Public License v3.0 or later
(LICENSE). m8fmt keeps the MIT licence of m8-file-parser. Third-party code, fonts
and icons are listed in NOTICE.md. The content that comes with the app keeps its
own licences, listed in CONTENT.md on the device.
ZeroTracker is free and open source. If it is useful to you, you can support its development with a one-off donation on Ko-fi or by sponsoring me on GitHub Sponsors. Donations are voluntary and do not unlock any feature. More in FUNDING.md.
ZeroTracker is not affiliated with Dirtywave.