Skip to content

schollz/collidertracker

Repository files navigation

vlcsnap-2025-08-23-18h24m04s244
Version Build Status GitHub Sponsors

A terminal-based music tracker powered by SuperCollider + JACK.

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 that (to my knowledge) uses SuperCollider as the sound engine, which allows for very flexible sound design and synthesis. It also uses JACK for audio routing, which allows for low-latency audio and MIDI routing.

Prerequisites

  • SuperCollider (required; extensions are checked at launch). Download here.
  • SuperCollider extensions (required): Download here
  • JACK (jackd) must be running with the output to your favorite speaker. Download here.
  • collidertracker binary. See installation options below.

Installation

macOS

Option 1: Homebrew (Recommended)

brew 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: Automatic SuperCollider Management (Recommended)

  1. First start JACK audio server.
  2. Run collidertracker (it will automatically start and manage SuperCollider):
./collidertracker

Option 2: Manual SuperCollider Management

  1. First start JACK audio server.
  2. Run SuperCollider and then open collidertracker/internal/supercollider/collidertracker.scd in SuperCollider. Then, in SuperCollider, goto "Language" -> "Evaluate File". SuperCollider should become Active.
  3. Run collidertracker with the --skip-sc flag:
./collidertracker --skip-sc

Command-line Options

Flag Default Description
--project <dir> save Project directory for songs and audio files
-p, --port <port> 57120 OSC port for SuperCollider communication
--record false Enable automatic session recording
--skip-sc false Skip SuperCollider management (assume SC running)
--log <file> - Write debug logs to specified file

Keyboard — Quick Reference

Navigation Between Views

Key Combo Description
Shift+Right Navigate deeper into structure:
• Song → Chain (selected track/row)
• Chain → Phrase (selected row)
• 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:
Non-empty values: Triggers EmitRowDataFor (plays row with full parameters)
Empty values: Fills with next available content or copies last row
• Works in Song, Chain, and Phrase views
Ctrl+R Toggle recording mode

Recording Features

  • Session Recording: Use --record flag or press Ctrl+R to toggle recording mode
  • Context-Aware Recording: Records current track (Chain/Phrase view) or all active tracks (Song view)
  • Output: Generates master mix + individual track stems with timestamps

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)
• Each track can be either Instrument or Sampler type
Chain Pattern sequences: 16 rows mapping to phrases
Phrase Main tracker grid with two modes:
Sampler – Full sample manipulation (pitch, effects, files)
Instrument – Note-based with chords, ADSR, arpeggio

Support Views

View Description
Settings Global configuration (BPM, PPQ, audio gains, etc.)
• Access with p key or Shift+Up
Mixer Per-track volume levels and mixing
• 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
• 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)

Smart 'C' Key Functionality

The C key provides context-aware trigger and fill functionality across all views:

Phrase View

  • Non-empty row: Triggers EmitRowDataFor with 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  FI

Instrument View

SL  DT  NOT  C  A  T  A D S R  AR  MI  SO  VL

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)
  • 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

  1. Install MSYS2: Download from https://www.msys2.org/

  2. Install required packages in MSYS2 terminal:

    pacman -S --noconfirm mingw-w64-x86_64-rtmidi mingw-w64-x86_64-toolchain
  3. Set environment variables:

    export CGO_ENABLED=1
    export CC=x86_64-w64-mingw32-gcc
    export CGO_LDFLAGS=-static
    export CGO_CXXFLAGS="-D__RTMIDI_DEBUG__=0 -D__RTMIDI_QUIET__"
  4. Build:

    go build -v -o collidertracker.exe

macOS

  1. Install dependencies with Homebrew:

    brew update
    brew install pkg-config rtmidi sox
  2. Set environment variables:

    export CGO_ENABLED=1
    export CGO_CXXFLAGS="-D__RTMIDI_DEBUG__=0 -D__RTMIDI_QUIET__"
  3. Build:

    go build -v -o collidertracker

Linux

Standard Build (Dynamic Linking)

  1. Install dependencies (Ubuntu/Debian):

    sudo apt-get update
    sudo apt-get install -y libasound2-dev sox

    For other distros: Install equivalent packages for ALSA development headers and SoX

  2. Set environment variables:

    export CGO_CXXFLAGS="-D__RTMIDI_DEBUG__=0 -D__RTMIDI_QUIET__"
  3. Build:

    go build -v -o collidertracker

Static Build (Portable)

For a fully static binary that runs on any Linux system:

  1. Use Alpine Linux environment (Docker recommended):
    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 sox &&
    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:

./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

Classic Trackers & Clones

Web / Browser Trackers

Game Boy / NES / Console-focused

Commodore 64 / SID

Yamaha / PC-98 / FM & Multi-chip

Amiga / ProTracker Family

Niche

License

MIT

About

A terminal-based music tracker that uses SuperCollider for synthesis and sample playback.

Topics

Resources

License

Stars

Watchers

Forks

Contributors 3

  •  
  •  
  •  

Languages