Giter VIP home page Giter VIP logo

Gotracker

Go

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_MAPPER device)
      • DirectSound (via optional build flag: directsound)
      • PulseAudio (via optional build flag: pulseaudio) - NOTE: Not recommended except for WSL (Linux) builds!
    • File
      • Wave/RIFF file (built-in)
      • Flac (via optional build flag: flac)
  • Linux
    • Sound Card
      • PulseAudio
    • File
      • Wave/RIFF file (built-in)
      • Flac (via optional build flag: flac)

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)

  1. 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.
  2. Next, open a Terminal for powershell.
  3. Enter the following commands
    go mod download
    go build
    When the command completes, you should now have the gotracker.exe file. Drag an .S3M file on top of it!

How to build (on Linux)

  1. 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.:
    PULSE_SERVER=tcp:127.0.0.1:4713
    (Take note that there are bugs associated with TCP connection strings; see bugs section below) For more information about the PULSE_SERVER environment 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.

gotracker's Projects

goaudiofile icon goaudiofile

goaudiofile is a pure Go audio file support library

gomixing icon gomixing

gomixing is a pure Go audio mixing library

gosound icon gosound

gosound is a pure Go audio device output library

opl2 icon opl2

A Pure Go conversion of the OPL2 library from the DOSBox project

voice icon voice

voice is a pure Go audio instrument/voice library

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.