Introduction

This application is a multiplatform MIDI file player for Linux, Windows and macOS. It reads .MID (Standard MIDI Files), .KAR (Karaoke), and .WRK (Cakewalk) file formats, and outputs MIDI events to hardware MIDI ports and also software synths.

Drumstick is a set of GPLv3 licensed C++/Qt libraries for MIDI applications. The project includes several tools as examples, and among them is the drumstick-guiplayer utility that leverages the Drumstick::ALSA library, so it is available only for Linux (because the ALSA sequencer is a Linux only technology). Some people have requested a program with the same functionalities on Windows and macOS, and here it is. But this program is much more than that, and it also works on Linux…

Some key features:

MIDI Output

Any MIDI Player outputs MIDI events only, but no sound. To produce sound, a MIDI Synthesizer is needed to render the events into digital audio that can be reproduced by the computer’s (or external) audio speakers. The events can also be rendered by an external musical MIDI instrument connected to the computer, for instance a MIDI organ, piano, or synthesizer with an USB interface. If that option is not available, another usual alternative is a software synthesizer (a program).

There are software synthesizers included in the computer’s operating systems, for instance Microsoft Windows includes the “Microsoft GS Wavetable Synth”, and Apple macOS includes the “Apple DLS Synthesizer”. To use them, you need to open the “MIDI Setup” dialog and then:

Playback Controls

The following standard actions are available in the File menu and also the tool bar, with the conventional functionalities on any media player:

By default, Play is activated automatically upon loading a MIDI file except when this feature is disabled in the configuration dialog.

The status bar, optionally located at the bottom of the main window, shows the current playback status as “Playing”, “Stopped”, “Paused”, etc.

Transpose

The Pitch control is located in the main window. It is a spin box initialized to zero, with a valid range from -12 to +12 semitones. The limits are equivalent to one octave up or down the original tone. This should be enough for singers or instrumentalists needing to adjust the tonality for their comfort.

All MIDI channels are chromatically transposed, except the percussion channel (GM channel 10 by default).

Volume Level

The Volume control is located in the main window. It is a slider, initialized to 100%, with a valid range from 0% to 200%. The upper limit effect may be lower because the MIDI CC 7 has a valid range from 0 to 127. There is also a button to Reset Volume.

Tempo

The Tempo control is located in the main window. It is a slider initialized to 100% with a valid range from 50% to 200%. There is a button to Reset Tempo and also a tempo display, showing the effective tempo in beats per minute with an initial value of 120 bpm. This is the default tempo for a MIDI file if it does not contain a tempo change. This value is updated when changing the tempo control, and also while a MIDI file containing tempo changes is playing.

Jump, Loop and Positioning

Jump action (located in the File menu and the default tool bar), asks for a bar number, between 1 and the last bar of the loaded song, to change the current position of the song to the given bar.

Loop action (located in the File menu and the default tool bar), asks for two bar numbers. The song will be played between the two given bars when it is activated. You can switch off the loop any moment selecting the action again.

The Positioning control is located in the main window. It is a slider that moves while the current played position changes, and can be moved by hand to change the position to any arbitrary point within the song.

Song Settings

The song settings are stored at the $HOME/.dmidiplayer subdirectory with the same name as the songs and the “.cfg” suffix. When a song file is loaded, their song settings can be automatically loaded, and also saved when the song stopped. See the corresponding setting in the Preferences/General dialog.

The song settings can also be manually loaded and saved from the corresponding “File”->“Song Settings” menu items.

Each song settings .cfg file is a text file where the following data is stored:

For each MIDI channel used by the song, the following data coming from the Channels view is stored:

Views

The following options are enable in the View menu:

Three views are independent windows that you may open and close at your convenience: Channels, Lyrics and Piano Player.

On the other hand, you also can hide or show three more views that are embedded on the main window: Tool bar, Status bar, and Rhythm.

Channels

This window shows up to 16 rows, one for each MIDI channel used by the current MIDI file. The columns are:

Piano Player

This window shows up to 16 rows, one for each MIDI channel used by the current MIDI file. Each row contains:

There is a window menu, with the following options:

Lyrics

This window shows the text metadata from the loaded MIDI file, filtering the data with a series of controls located on the window tool bar:

There is a window menu, with the following options:

Playlists

Playlists are collections of file names, that can be used to play a series of MIDI pieces, like a musical “repertoire”.

The File->Play List... action manages the creation, modification, ordering, opening, and saving Play list files. This window shows the current playlist file name in the window title.

The File->Next and File->Prev actions are used to navigate the playlist manually forward and backward. There are configuration options to start playback automatically after loading MIDI files, and advance automatically to the next playlist item when finished playing the current item. Both configuration options are enabled by default.

The initial default playlist contains a collection of example MIDI files. If you prefer to start with an empty list, you should use the Clear button and then saving the empty playlist with a meaningful name. This will be the new initial playlist in the future.

The last opened or saved playlist file shall be remembered the next time the program is started, but playlists are not saved automatically.

Playlists are simple text files, with a file name on each text line. The file names can be relative to the location of the playlist file itself (so they do not have an absolute path prepended) or each file can have an absolute path on its own.

You may have several playlists that can be created easily outside of the program, for instance in the Linux command line this command creates a playlist file named “my_playlist.lst” with all the MIDI files located at the working directory:

$ ls -1 *.mid > my_playlist.lst

Opening MIDI Files

You can open individual files…

Customization

Preferences

There is a Restore Defaults button to initialize all options in this dialog to their default values.

There are three tabs, grouping the configuration settings

General

Lyrics

Player Piano

Toolbar Customization

The tool bar is located on the main window, which has typically very small available space, and can be moved to the top or the bottom of the window, and also outside of it. The actions available as tool buttons can be configured in this dialog window. All actions are also main menu items.

To select one action from the Available list, first select it with the mouse and then press the “add” button. The action is removed from the Available list and placed at the end of the selected list.

To remove one button from the tool bar, select it with the mouse in the Selected list and then press the “remove” button.

To reorganize the order of buttons in the tool bar, use the “up” and “down” buttons after selecting an item in the Selected list.

Style of the Tool Buttons: contains the following options that apply to all the buttons in the tool bar