Skip to content

A Versatile MIDI Controller, Player, Recorder & Editor

License

Notifications You must be signed in to change notification settings

jberthault/MIDILab

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MIDILab

A Versatile MIDI Controller, Player, Recorder, Editor ... for Windows & Linux.

This application provides a GUI that lets you:

  • plug multiple devices and tweak them in realtime
  • play any MIDI file using connected devices or locally on a SoundFont synthesizer
  • record any stream and save it as MIDI files for later
  • edit files (well not now, but I'm on it)
  • customize interface & behavior using configurations files

The development started out as a toy project a few years ago. Nonetheless, it is already functional as a MIDI player. Awesome features will eventually make their way into an upcoming release ... I guess. So you should probably check it out if you are a MIDI maniac ;)

Disclaimer

By now, MIDILab is clearly not user-friendly, in addition to being poorly tested and documented. I'm working on the latter but you should not consider any of this work to be stable or production-ready.

This if the reason why I need feeback to improve the app. So let me know if you experience a bug or any incomprehensible behavior.

Please also keep in mind that I develop MIDILab on my spare time. I clearly do not have enough time to do everything I would. But if you really want a specific feature, please let me know.

INSTALL

If you want to give it a try, you may take a look at the prebuilt binaries. I will try to update Windows installers for the latest release.

Unfortunately, for other platforms, you will have to build it from the sources. Any help to provide packaging for major Linux distributions is welcome.

First of all, you will need a C++ toolchain supporting C++14. A recent version of CMake is also required.

MIDILab depends on the following libraries:

Make sure you have those dependencies installed before running CMake.

Most icons come from Open Iconic but no additional installation is required.

On Windows, the simplest way to go is to use MSYS2 together with MinGW. Once installed, use pacman in order to install the toolchain, CMake, Qt5, Boost & fluidsynth. See this guide for further information.

On Linux, your favorite package manager should do the job as well. Just make sure you install the development version of these packages.

However, I did not try other platforms (e.g. macOS). So any feedback would be appreciated.

Once you managed to get your environnement ready, the rest is straightforward as long as the dependencies are in your path:

git clone https://github.com/jberthault/MIDILab.git
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ../MIDILab
make

Moreover, make sure your path contains the runtime dependencies, namely Qt5 and fluidsynth, before launching the application.

On Linux, fluidsynth will try to start jackd. It implies that it is installed on your system. It will provide low-latency audio, but the downside is that the process will reserve your audio output for its own. More about jack: http://jackaudio.org/

Quick Start

MIDILab works with configuration files. It starts with the last configuration used. The first time you launch it, and as long as you do not save any configuration file, it will start with a default configuration.

This configuration consists in three windows named:

  • MIDILab: The main window containing controls, a trackbar, a tempo slider, a playlist and a transposer
  • Keyboard: Two components representing a pitch wheel and a piano keyboard, both being interactive
  • SoundFont Properties: A window containing settings of the audio output, being based on SoundFonts

Each component is in fact the graphical interface of a handler. We call handler any component dealing with MIDI events.

A configuration is actually a list of handlers and a connection graph, that is to say how handlers interact with each others.

To get a visual description of the configuration, go to the menu "Handlers".

There is a window named "Handlers Configuration" (Alt-V) containing all handlers, their status (open or closed) and parameters. You can edit or delete those handlers by right-clicking on their name. Parameters can also be changed in real time.

The second window, "Handlers Connections" (Alt-C), contains all handlers and their connections. An arrow going from a handler to another one means that all events generated by the first one will be received by the second one. For example, The arrow going from "Piano" to "SF2" means that each key pressed on the piano will be sent to the audio output. To add a connection, you should right-click on the source handler then release your mouse on the destination. To remove a connection, right-click on the arrow and select the option "Delete".

To add a new handler, you can open the window named "Handlers Catalog" (Alt-N) and double-click on a handler type. It will then be visible (if a user interface is provided) and registered in the first window.

That being said, if you click on the piano, you won't hear any sound, despite the fact that it is connected to SF2. This is because you need a .sf2 file to get the synthesizer to work. You should download one and load it by clicking on the file icon in the SoundFont window.

If it works, you can use this configuration as a MIDI player. To play a MIDI file, you must first populate the playlist. This can be done in two ways :

  • By dropping files in the playlist area directly from a file explorer
  • By right-clicking in the playlist area, and select the option "Browse"