midi123 is a command line MIDI player and MIDI->WAV converter for Linux that uses Remilia's Haematite library for its audio engine. It is written entirely in the Crystal programming language.

Releases and AppImages for x86-64 Linux systems can be found on the Releases wiki page.

Wanna support Remilia? Buy me a coffee on Ko-Fi, or support me through Liberapay.

Buy Me a Coffee at ko-fi.com Donate using Liberapay

Example videos

Basic Usage

midi123 is a command line program. To play a MIDI, run midi123 with the MIDI file as a parameter. Multiple MIDI files can be specified, and they will be played in the order that they appear on the command line.

The program will respond to various keys during playback. These are listed below, and you can also press the h key to see them while midi123 is running.

If you want to pause playback, the easiest way is just to do a Ctrl+Z to suspend the program. Later you can use fg 1 to start the program running again exactly where it left off (you may need to use a different number than 1 if you have multiple programs suspended).

There is also a configuration file where you can set various options so that you don't need to always type in the command line parameters. The location for this file is $XDG_CONFIG_HOME/midi123/midi123.hjson (this usually means ~/.config/midi123/midi123.hjson).

Below are various examples of how to call midi123 on the command line.

# Play a MIDI file using a SoundFont, and stop after it finishes.
$ midi123 -s TimGM6mb.sf2 "24 - I Choose the Stairs.mid"

# Play a MIDI file using a SoundFont, and loop at the end.
$ midi123 --loop -s sc-55.sf2 "11 - Goin' Down the Fast Way.mid"

# Render multiple MIDI files to WAVs in parallel.
$ midi123 --render -s "Arachno SoundFont.sf2" "15 - Spray.mid" "my playlist.xspf" "07 - How'd I Do.mid"

# Show the help information.
$ midi123 --help

# Show version information
$ midi123 --version

Notable Features

Building from Source

You will need Fossil installed to clone this repo and the dependency. You will also need Shards v0.17.1 or later. If you have an earlier version of Shards, you will need to to build the latest version manually.

To build the program, start out by cloning this Fossil repository somewhere and changing into the directory.

fossil clone https://chiselapp.com/user/MistressRemilia/repository/midi123/
cd midi123

You can then use rake to build things in the following ways:

There are more detailed instructions in the wiki.


Style info

I use a somewhat non-standard style for my code.

How do I contribute?

  1. Go to https://chiselapp.com/user/MistressRemilia/repository/midi123/ and clone the Fossil repository.
  2. Create a new branch for your feature.
  3. Push locally to the new branch.
  4. Create a bundle with Fossil that contains your changes.
  5. Get in contact with me.


Links and Licenses

midi123 is under the GNU Affero General Public License version 3.