Collidertracker
A terminal-based music tracker that uses SuperCollider for synthesis and sample playback.
**collidertracker** is A terminal-based music tracker that uses SuperCollider for synthesis and sample playback. The project is written primarily in Go, distributed under the MIT License license, first published in 2025. Key topics include: music-tracker, supercollider, tracker, tui.
A terminal-based music tracker powered by SuperCollider.
IMPORTANT NOTE: this software is currently in development and is definetly unstable and chock full of bugs.
COMPATIBILITY WARNING: Major version changes (X.0.0 -> Y.0.0) are not backward compatible. Save files from version X.0 cannot be used with version Y.0 and vice versa. Back up your projects before upgrading across major versions.
This is a music tracker designed to be used with any terminal (Linux, macOS, Windows WSL/terminal). It is the first tracker (to my knowledge) that uses SuperCollider as the sound engine, which allows for very flexible sound design and synthesis.
Prerequisites
- SuperCollider (required; extensions are checked at launch). Download here.
- collidertracker binary. See installation options below.
Automatic Plugin Downloads
ColliderTracker will automatically download required SuperCollider extensions on first run if they are not already installed. These extensions are downloaded to your system's standard SuperCollider extensions directory:
- macOS:
~/Library/Application Support/SuperCollider/Extensions - Linux:
~/.local/share/SuperCollider/Extensions - Windows:
%LOCALAPPDATA%/SuperCollider/Extensions
The following extensions are automatically downloaded:
- PortedPlugins (schollz/portedplugins) - Audio effects including Fverb and AnalogTape
- mi-UGens (v7b1/mi-UGens) - Mutable Instruments synthesizer modules including MiBraids
- Open303 (schollz/open303) - TB-303 bassline synthesizer emulator
- Juno60 (schollz/juno-60) - Roland Juno-60 analog polysynth emulator with chorus
- SC3 Plugins (supercollider/sc3-plugins) - Community collection of SuperCollider plugins including FM7
Checking the SuperCollider Installation Worked
First, open the SuperCollider IDE by searching for and running 'SuperCollider IDE'. The IDE should open and give you three main panes:
- a large blank text window
- a help window
- a post window containing text about how the startup process went.
Secondly, boot the server using the command in the Language menu, or Ctrl+B.
Thirdly, enter the following into the blank text window:
supercollider{SinOsc.ar}.play
Ensure the cursor is on this line and hit Ctrl+Enter. You should now hear a sine tone. Kill the sine tone by hitting Ctrl+.. If you don't hear the tone, remember to check your speakers, volume control – all the regular suspects!
Installation
macOS
Option 1: Homebrew (Recommended)
bashbrew tap schollz/tap brew install collidertracker
Option 2: Manual Download
Grab the latest build from Releases.
Linux/Windows
Grab the latest build from Releases.
Run
Option 1: (Recommended)
Simply run collidertracker - it will automatically detect if SuperCollider is already running with ColliderTracker code, or start a new instance if needed:
bash./collidertracker
Note: On Windows, you may need to add SuperCollider to the list of approved programs. Run the following commands in an Administrator-level PowerShell:
powershellAdd-MpPreference -ExclusionProcess "C:\Program Files\SuperCollider-3.13.0\sclang.exe" Add-MpPreference -ExclusionProcess "C:\Program Files\SuperCollider-3.13.0\scsynth.exe"
Option 2: Manual SuperCollider Management
If you prefer complete manual control:
- Run SuperCollider and then open
collidertracker/internal/supercollider/collidertracker.scdin SuperCollider. Then, in SuperCollider, goto "Language" -> "Evaluate File". SuperCollider should become Active. - Run collidertracker with the
--skip-scflag to bypass all detection and management:
bash./collidertracker -s
Command-line Options
| Flag | Default | Description |
|---|---|---|
-p, --project <dir> | save | Project directory for songs and audio files |
--port <port> | 57120 | OSC port for SuperCollider communication |
-r, --record | false | Enable automatic session recording (entire session to SuperCollider recordings folder) |
-s, --skip-sc | false | Skip SuperCollider detection and management entirely |
-l, --log <file> | - | Write debug logs to specified file |
Tutorial
<p align="center"> <a href="https://www.youtube.com/watch?v=pFGIcI3h3m0"> <img width="600" alt="vlcsnap-2025-08-23-18h24m04s244"src="https://github.com/user-attachments/assets/7d4c36c0-bd28-4611-a41b-ddf864af045c"/> </a> </p>Keyboard — Quick Reference
Navigation Between Views
| Key Combo | Description |
|---|---|
| Shift+Right | Navigate deeper into structure:<br>• Song → Chain (selected track/row)<br>• Chain → Phrase (selected row)<br>• Phrase → Retrigger/Timestretch/Arpeggio (if set) or File Browser |
| Shift+Left | Navigate back to parent view |
| Shift+Up | Go to Settings (from Song/Chain/Phrase) or File Metadata (from File Browser) |
| Shift+Down | Go to Mixer (from Song/Chain/Phrase) or back from Mixer |
| p | Toggle Preferences (Settings) view |
| m | Toggle Mixer view |
Navigation Within Views
| Key Combo | Description |
|---|---|
| Arrow keys | Move cursor/navigate within current view |
| Left/Right | Navigate tracks (Song), chains (Chain), or columns (Phrase) |
| PgUp/PgDown | Jump to previous/next 16-row boundary (0x00, 0x10, 0x20, etc.) |
Playback and Recording
| Key Combo | Description |
|---|---|
| Space | Play/stop from current position |
| Ctrl+@ | Play/stop from top (global) |
| C | Smart trigger/fill function:<br>• Non-empty values: Triggers EmitRowDataFor (plays row with full parameters)<br>• Empty values: Fills with next available content or copies last row<br>• Works in Song, Chain, and Phrase views |
| Ctrl+R | Toggle recording mode |
Recording Features
ColliderTracker offers two types of recording:
Session Recording (-r, --record flag)
- Records the entire session from start to finish
- Output saved to SuperCollider's default recordings folder
- Captures everything: all tracks, effects, and audio output
- Automatic recording begins when the program starts
Multitrack Recording (Ctrl+R in program)
- Context-aware recording of active tracks only
- Records current track (Chain/Phrase view) or all active tracks (Song view)
- Output: Generates master mix + individual track stems with timestamps
- Toggle recording on/off during playback for selective capture
Value Editing
| Key Combo | Description |
|---|---|
| Ctrl+Up/Down | Coarse adjust values (+/-16, coarse increments) |
| Ctrl+Left/Right | Fine adjust values (+/-1, fine increments) |
| Backspace | Clear cell/value |
| Ctrl+H | Delete entire row |
| S | Paste last edited row |
Copy and Paste
| Key Combo | Description |
|---|---|
| Ctrl+C | Copy cell |
| Ctrl+X | Cut row |
| Ctrl+V | Paste |
| Ctrl+D | Deep copy |
File Operations and System
| Key Combo | Description |
|---|---|
| Ctrl+S | Manual save |
| Ctrl+F | Smart fill/clear for DT column (Delta Time) |
| Ctrl+O | Open project selector to switch projects (press "n" to create new project) |
| Esc | Clear selection highlight |
| Ctrl+Q | Quit |
Views
Main Structure Views
| View | Description |
|---|---|
| Song | Top-level arrangement: 8 tracks × 16 rows (chains per track)<br>• Each track can be either Instrument or Sampler type |
| Chain | Pattern sequences: 16 rows mapping to phrases |
| Phrase | Main tracker grid with two modes:<br>• Sampler – Full sample manipulation (pitch, effects, files)<br>• Instrument – Note-based with chords, ADSR, arpeggio |
Support Views
| View | Description |
|---|---|
| Settings | Global configuration (BPM, PPQ, audio gains, etc.)<br>• Access with p key or Shift+Up |
| Mixer | Per-track volume levels and mixing<br>• Access with m key or Shift+Down |
File Management Views
| View | Description |
|---|---|
| File Browser | Select audio files for sampler tracks |
| File Metadata | Configure BPM and slice count per file<br>• Metadata is automatically saved with samples for portability |
Effect Configuration Views
| View | Description |
|---|---|
| Retrigger | Envelope settings for retrigger effects |
| Timestretch | Time-stretching parameters |
| Arpeggio | Arpeggio pattern editor (Instrument tracks only) |
| Modulate | Note modulation with randomization, scaling, and probability |
Modulation Settings
The Modulation system provides powerful note transformation capabilities for both Instrument and Sampler tracks. Access it by navigating to a MO (Modulate) column value and pressing Shift+Right.
Overview
Modulation settings allow you to:
- Add controlled randomness to notes
- Apply mathematical transformations (add/subtract)
- Quantize notes to musical scales
- Create incremental note sequences
- Control probability of modulation effects
Parameters
| Parameter | Range | Description |
|---|---|---|
| Seed | none/random/1-128 | Random number generator seed:<br>• none = No randomization<br>• random = Time-based seed (different each time)<br>• 1-128 = Fixed seed for reproducible results |
| IRandom | 0-128 | Random variation range applied to notes (0 = no randomization) |
| Sub | 0-120 | Value subtracted from the note after randomization |
| Add | 0-120 | Value added to the note after subtraction |
| Increment | 0-128 | Increment value applied based on playback counter |
| Wrap | 0-128 | Wrap point for increment counter (0 = no wrapping) |
| ScaleRoot | C-B | Root note of the scale (C, C#, D, etc.) |
| Scale | Various | Musical scale for quantization:<br>• all = No scale quantization<br>• major, minor, dorian, mixolydian<br>• pentatonic, blues, chromatic |
| Probability | 0-100% | Chance that modulation will be applied (100% = always) |
Processing Order
Modulation is applied in this sequence:
- Increment - Added based on playback counter (if active)
- Random Variation - Applied if IRandom > 0 and Seed is not "none"
- Subtraction - Sub value is subtracted
- Addition - Add value is added
- Scale Quantization - Note is quantized to nearest scale note (if not "all")
Usage Examples
Basic Randomization
- Seed:
random, IRandom:12, Sub:6, Add:0 - Adds ±6 semitones of random variation to notes
Incremental Sequences
- Increment:
2, Wrap:12 - Each successive trigger moves the note up 2 semitones, wrapping after 12 semitones
Scale Quantization
- ScaleRoot:
C, Scale:major, Probability:75% - 75% chance to quantize notes to C major scale
Controlled Chaos
- Seed:
42, IRandom:24, Sub:12, Add:5, Scale:minor - Reproducible random variations within a minor scale
Track-Specific Behavior
Instrument Tracks: Modulation applies to:
- Individual notes when no chord/arpeggio is active
- All chord notes when chords are used without arpeggio
- All arpeggio notes (including root) when arpeggio is active
Sampler Tracks: Modulation applies to the sample's playback pitch
Tips
- Use fixed seeds (1-128) for reproducible "random" patterns
- Set Probability < 100% to create organic, non-mechanical variations
- Combine Increment with Wrap for cyclical melodic patterns
- Use scale quantization to keep random variations musically coherent
Smart 'C' Key Functionality
The C key provides context-aware trigger and fill functionality across all views:
Phrase View
- Non-empty row: Triggers
EmitRowDataForwith complete parameter set:- Instrument tracks: Note, Chord (C/A/T), ADSR (A/D/S/R), Arpeggio (AR), MIDI (MI), SoundMaker (SO)
- Sampler tracks: All traditional sampler parameters
- Empty row: Copies last row with increment
Chain View
- Non-empty slot: Triggers first row of the referenced phrase
- Empty slot: Fills with next unused phrase
Song View
- Non-empty slot: Finds first phrase in referenced chain and triggers its first row
- Empty slot: Fills with next unused chain
This unified approach allows instant playback testing of any musical element while maintaining the original fill functionality for composition workflow.
Phrase Columns
Sampler View
SL DT NN PI GT RT TS Я PA LP HP CO VE VL MO FI
Instrument View
SL DT NOT C A T A D S R AR MI SO VL MO
Column Descriptions
- SL (slice) – Row number display
- DT (delta time) – Unified playback control:
--/00= skip,>00= play for N ticks - NN/NOT (note) – MIDI note (hex) or note name
- PI (pitch) – Pitch bend (sampler only)
- GT (gate) – Note length/gate time
- RT (retrigger) – Retrigger effect index
- TS (timestretch) – Time-stretch effect index
- Я (reverse) – Reverse playback probability (0-F hex: 0=0%, F=100%)
- PA (pan) – Stereo panning
- LP/HP (filters) – Low-pass/High-pass filters
- CO (comb) – Comb filter effect
- VE (reverb) – Reverb effect
- VL (velocity) – Note velocity (0-F hex, affects volume and expression)
- MO (modulate) – Modulation settings index for note randomization and scaling
- FI (file index) – Sample file selection (sampler only)
- C (chord) – Chord type: None(-), Major(M), minor(m), Dominant(d) (instrument only)
- A (chord addition) – Chord addition: None(-), 7th(7), 9th(9), 4th(4) (instrument only)
- T (transposition) – Chord transposition: 0-F semitones (instrument only)
- A D S R (ADSR) – Attack/Decay/Sustain/Release envelope (instrument only)
- AR (arpeggio) – Arpeggio pattern index (instrument only)
- MI (MIDI) – MIDI settings index for external MIDI output (instrument only)
- SO (SoundMaker) – SoundMaker settings index for built-in synthesis (instrument only)
- VL (velocity) – Note velocity (0-F hex, affects volume and expression)
Key Features
Unified DT Column
Both Sampler and Instrument views now use the same DT (Delta Time) column for playback control, replacing the previous separate P/DT system. This provides consistent behavior across both track types.
Velocity Support
The VL (Velocity) column provides expressive control over note dynamics. SuperCollider tracks and responds to velocity values for both volume and expression, enabling more musical and dynamic performances.
Probability-Based Reverse Effect
The Я (Reverse) column in Sampler view now uses a probability system instead of a simple on/off flag:
- 0 = Never reverse (0% chance)
- 1 = ~6.7% chance to reverse
- F = Always reverse (100% chance)
- Values 1-E = Linear probability scaling between 6.7%-93.3%
Each time a note plays, the system randomly determines whether to apply reverse playback based on the probability value, adding dynamic variation to your tracks.
Portable Sample Management
The application now uses a local folder structure (tracker-save/) instead of a single save file, automatically storing samples and their metadata together for complete project portability.
Building from source
Prerequisites for Building
- Go (latest stable version)
- C/C++ compiler (GCC on Linux, Xcode on macOS, MinGW on Windows)
- System dependencies (varies by platform)
Windows
-
Install MSYS2: Download from https://www.msys2.org/
-
Install required packages in MSYS2 terminal:
bashpacman -S --noconfirm mingw-w64-x86_64-rtmidi mingw-w64-x86_64-toolchain -
Set environment variables:
bashexport CGO_ENABLED=1 export CC=x86_64-w64-mingw32-gcc export CGO_LDFLAGS=-static export CGO_CXXFLAGS="-D__RTMIDI_DEBUG__=0 -D__RTMIDI_QUIET__" -
Build:
bashgo build -v -o collidertracker.exe
macOS
-
Install dependencies with Homebrew:
bashbrew update brew install pkg-config rtmidi -
Set environment variables:
bashexport CGO_ENABLED=1 export CGO_CXXFLAGS="-D__RTMIDI_DEBUG__=0 -D__RTMIDI_QUIET__" -
Build:
bashgo build -v -o collidertracker
Linux
Standard Build (Dynamic Linking)
-
Install dependencies (Ubuntu/Debian):
bashsudo apt-get update sudo apt-get install -y libasound2-devFor other distros: Install equivalent packages for ALSA development headers
-
Set environment variables:
bashexport CGO_CXXFLAGS="-D__RTMIDI_DEBUG__=0 -D__RTMIDI_QUIET__" -
Build:
bashgo build -v -o collidertracker
Static Build (Portable)
For a fully static binary that runs on any Linux system:
- Use Alpine Linux environment (Docker recommended):
bash
docker run --rm -v $(pwd):/workspace -w /workspace golang:1.25-alpine sh -c ' apk add --no-cache git build-base autoconf automake libtool linux-headers alsa-lib-dev && cd /tmp && git clone https://github.com/alsa-project/alsa-lib.git && cd alsa-lib && git checkout v1.2.10 && libtoolize --force --copy --automake && aclocal && autoheader && automake --foreign --copy --add-missing && autoconf && ./configure --prefix=/usr/local --enable-shared=no --enable-static=yes --disable-ucm && make -j$(nproc) && make install && cd /workspace && export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" && export CGO_CFLAGS="-I/usr/local/include" && export CGO_LDFLAGS="-L/usr/local/lib" && export CGO_CXXFLAGS="-D__RTMIDI_DEBUG__=0 -D__RTMIDI_QUIET__" && CGO_ENABLED=1 go build -buildvcs=false -ldflags "-linkmode external -extldflags \"-static -L/usr/local/lib\"" -o collidertracker '
Testing the Build
After building, verify the binary works:
bash./collidertracker --help
Build Notes
- The build requires CGO (C bindings) for MIDI and audio functionality
- Static linking is used on Windows and in the Alpine Linux build for portability
- The RTMIDI debug flags are disabled for release builds to reduce verbosity
- Version information can be embedded using:
go build -ldflags "-X main.Version=<version>"
Big list of trackers
Popular Modern / Commercial
Cross-Platform / General Trackers & Experimental
- OpenMPT (ModPlug Tracker)
- MilkyTracker
- Schism Tracker
- Furnace
- Radium Music Editor
- Psycle
- Buzztrax
- SoundTracker (GTK/Unix) · Source
- ChibiTracker
- Propulse Tracker
- Pata Tracker
Classic Trackers & Clones
- FastTracker II (original info) · ft2-clone
- ProTracker 2 clone (pt2-clone)
- HivelyTracker
- Impulse Tracker (mirror)
- Scream Tracker 3
- Skale Tracker
- MadTracker
Game Boy / NES / Console-Focused / Chiptune
- LSDj (Little Sound Dj)
- 0CC-FamiTracker
- FamiStudio · Website
- LittleGPTracker (LGPT) · Website
- NitroTracker · GitHub Fork
- klystrack · Itch.io page
- Lovely Composer
Commodore 64 / SID
- GoatTracker 2
- SID Factory II
- CheeseCutter
- SID-Wizard (C64 release info)
- JITT64 (Java Ice Team Tracker)
Yamaha / FM & Multi-Chip
Web / Browser / Mobile Trackers
Niche / Experimental
Uninstalling ColliderTracker
To completely remove all ColliderTracker-related data from your system:
1. Remove ColliderTracker Binary and Project Data
- Delete the ColliderTracker binary from wherever you installed it (e.g.,
/usr/local/bin/collidertrackeror the downloaded location) - Delete your project directory (default:
./save/in the directory where you run ColliderTracker, or custom directory specified with-pflag)
2. Remove Downloaded SuperCollider Extensions
ColliderTracker automatically downloads SuperCollider extensions to the following locations:
- macOS: Remove
~/Library/Application Support/SuperCollider/Extensions/PortedPlugins/,~/Library/Application Support/SuperCollider/Extensions/mi-UGens/,~/Library/Application Support/SuperCollider/Extensions/Open303/,~/Library/Application Support/SuperCollider/Extensions/Juno60/, and~/Library/Application Support/SuperCollider/Extensions/SC3plugins/ - Linux: Remove
~/.local/share/SuperCollider/Extensions/PortedPlugins/,~/.local/share/SuperCollider/Extensions/mi-UGens/,~/.local/share/SuperCollider/Extensions/Open303/,~/.local/share/SuperCollider/Extensions/Juno60/, and~/.local/share/SuperCollider/Extensions/SC3plugins/ - Windows: Remove
%LOCALAPPDATA%/SuperCollider/Extensions/PortedPlugins/,%LOCALAPPDATA%/SuperCollider/Extensions/mi-UGens/,%LOCALAPPDATA%/SuperCollider/Extensions/Open303/,%LOCALAPPDATA%/SuperCollider/Extensions/Juno60/, and%LOCALAPPDATA%/SuperCollider/Extensions/SC3plugins/
Note: These extensions may also be used by other SuperCollider applications. Only remove them if you're sure they're not needed by other software.
3. Clean Up Temporary Files
ColliderTracker may create temporary .scd files in your system's temp directory during operation. These are automatically cleaned up when the application exits, but you can manually remove any remaining files with names like:
collidertracker_*.scddx7_*.afxdx7_*.scd
4. SuperCollider Recordings (Optional)
If you used the recording feature (-r flag), recordings are saved to SuperCollider's default recordings directory. You may want to back up or remove these files:
- macOS:
~/Music/SuperCollider Recordings/ - Linux:
~/SuperCollider/ - Windows:
%USERPROFILE%/Music/SuperCollider Recordings/
Notes
LOC:
bashcloc --by-file --include-ext=go --not-match-f='dx7' internal
License
MIT
Contributors
Showing top 3 contributors by commit count.
