Gotracker
Go-based music tracker
Install / Use
/learn @gotracker/GotrackerREADME
Gotracker
What is it?
It's a tracked music player written in Go.
Why does this exist?
Heucuva needed to learn Go forever ago and figured this was a good way to do it.
What does it play?
Files from/of the following formats/trackers:
- S3M - ScreamTracker 3
- MOD - Protracker/Fasttracker/Startrekker (internally up-converted to S3M)
- XM - Fasttracker II
- IT - Impulse Tracker
- Maybe more! (check the support list from the gotracker/player library)
What systems does it work on?
- Windows (Windows 2000 or newer)
- Sound Card
- WinMM (
WAVE_MAPPERdevice) - DirectSound (via optional build flag:
directsound) - PulseAudio (via optional build flag:
pulseaudio) - NOTE: Not recommended except for WSL (Linux) builds!
- WinMM (
- File
- Wave/RIFF file (built-in)
- Flac (via optional build flag:
flac)
- Sound Card
- Linux
- Sound Card
- PulseAudio
- File
- Wave/RIFF file (built-in)
- Flac (via optional build flag:
flac)
- Sound Card
How do I build this thing?
What you need
For a Windows build, we recommend the following:
- Windows 2000 (or newer) - we used Windows 11 Pro (Windows 11 Version 23H2 - 22631.3007)
- Visual Studio Code
- Go extension for VSCode v0.19.0 (or newer)
- Go v1.21.5 (or newer)
For a non-Windows (e.g.: Linux) build, we recommend the following:
- Ubuntu 20.04 (or newer) - we used Ubuntu 22.04.2 LTS running in WSL2
- Go v1.21.5 (or newer)
How to build (on Windows)
- First, load the project folder in VSCode. If this is the first time you've ever opened a Go project, VSCode will splash up a thousand alerts asking to install various things for Go. Allow it to install them before continuing on.
- Next, open a Terminal for
powershell. - Enter the following commands
When the command completes, you should now have the gotracker.exe file. Drag an .S3M file on top of it!go mod download go build
How to build (on Linux)
- Build the player with the following commands
go mod download go build
NOTE: In order to use PulseAudio, you must have your PULSE_SERVER connection string environment variable configured:
- e.g.:
(Take note that there are bugs associated with TCP connection strings; see bugs section below) For more information about thePULSE_SERVER=tcp:127.0.0.1:4713PULSE_SERVERenvironment variable, please see the PulseAudio documentation.
How does it work?
Not well, but it's good enough to play some moderately complex stuff.
Bugs
Known bugs
| Tags | Notes |
|------|-------|
| windows winmm | Setting the number of channels to more than 2 may cause WinMM and/or Gotracker to do unusual things. You might be able to get a hardware 4-channel capable card (such as the Aureal Vortex 2 AU8830) to work, but driver inconsistencies and weirdnesses in WinMM will undoubtedly cause needless strife. |
| pulseaudio | PulseAudio support is offered through a Pure Go interface originally created by Johann Freymuth, called jfreymuth/pulse. While it seems to work pretty well, it does have some inconsistencies when compared to the FreeDesktop supported C interface. If you see an error about there being a "missing port in address" specifically when using a TCP connection string, make sure to append the default port specifier of :4713 to the end of the PULSE_SERVER environment variable. |
| windows directsound | DirectSound integration is not great code. It works well enough after recent code changes fixing event support, but it's still pretty ugly. |
| flac | Flac encoding is still very beta. |
NOTE: for more known bugs, please check the list from the gotracker/playback library.
Unknown bugs
- There are many, we're sure.