This repository is a working copy of GoatTracker 2.77, turned into a giant lab + experiment + vibecode extravaganza.
- Added/extended MIDI input handling in
src/midi.c+src/midi.husing CoreMIDI event intake and queueing. - Wired MIDI note/event processing into tracker runtime in
src/goattrk2.c(including command-line MIDI enable flow and live event consumption). - Build wiring includes CoreMIDI/CoreFoundation linkage in
src/makefilefor this MIDI path. - Branch direction is explicitly focused on low-latency jamming behavior and responsive interaction.
- Primary development machine: macOS on Apple Silicon.
- Implementation preference: keep things as POSIX-friendly as possible while shipping practical macOS support.
GoatTracker now starts a built-in IPC server at launch and exposes command-based control for external clients.
- Chosen IPC mechanism: Unix Domain Socket (
AF_UNIX, stream), default path/tmp/goattracker-<uid>.sock - Why: local-only by design (smaller attack surface than TCP), simple framing over a stream socket, robust file-permission model, and easy to extend with more string commands.
- Initial commands:
start_song,stop_song - Socket override: set
GOATTRACKER_IPC_SOCKETto use a custom socket path.
The server uses a command-dispatch table, so adding new commands is a small, isolated change (register a new command handler).
A separate CLI reference client is included:
goattracker-cli start
goattracker-cli stopThis client verifies the IPC transport and establishes a reusable client/server pattern for future clients (GUI, web, editor, automation).
Things to test:
Example Start it with -m1 (midi support) and low latency B5 (I have to test latency and when it starts to break).
./goattrk2 coolsong.sng -m1 -B5