LivePrompter and Cantabile

This document describes how to make LivePrompter work with Cantabile – a host for VST plugins and instruments, specialized on using them in a live situation.

Find out everything about Cantabile at

Live Prompter and Cantabile – A Winning Combination

I must admit: I absolutely LOVE Cantabile – for me, it is the best way to bring your VST instruments on stage. With Cantabile, I have reduced my live setup to one master keyboard, a guitar, a laptop and an audio interface (plus a couple of pedals for sustain, expression and program change).

What I find particularly great about it is its way to organize all your setup around songs (hmm, kinda obvious) and song states (sections of a song, intro, verse, chorus, etc…). For any song, you configure your setup of all the instruments and effects you may need in this song and their “cabling”; then you can step through your song states and simply activate different configurations of these instruments (essentially change levels, presets and where you play them on your keyboard). So, you may start out your song with a piano intro, then add some strings for the verse, leave the piano in your left hand for the chorus but add an organ on your right, then switch to a synth for your solo – you get the picture…

Cantabile even recently added some features to display notes and possibly lyrics with your songs (“Show Notes”), but for me, my Cantabile laptop sits safely somewhere behind me on stage, with just a small monitor as a display by my master keyboard to make sure I’ve loaded the right song and I’m in the right song state at the moment. I operate Cantabile purely via MIDI control from my master keyboard. For lyrics and chords display, I use LivePrompter on a small Windows tablet that sits on my master keyboard. I operate LivePrompter via the touch screen plus a Bluetooth pedal for “universal key”.

The only issue with this setup is that I need to set up set lists both for LivePrompter and Cantabile, plus I need to step through both set lists in parallel manually – press “right” on LivePrompter, then hit the MIDI key to step to the next song in Cantabile. This is not so bad, as long as I am playing a fixed set list, which simply requires stepping forward, but as soon as we get somewhat spontaneous and change the order of the set, this gets fiddly – open the song in LivePrompter, then step back to my laptop and select the song in Cantabile…

So, in order to sync the two programs, I decided to use MIDI commands. Cantabile deals with them easily and powerfully, and getting LivePrompter to deal with MIDI was not so difficult, building on some available C++ libraries. And since MIDI can not only be transported via 5-pin-cables but also between applications on one machine, or even over a network between machine, it is the most universal way to make the connection work.

Now, I only need to select a song on my LivePrompter tablet, and immediately Cantabile switches to the respective song in my setlist. And I can even take my Bluetooth pedal out of my setup – simply route a MIDI pedal from my master keyboard through Cantabile to LivePrompter!

But if Cantabile is at the center of your live workflow, you can also turn things around and have Cantabile control the loading of songs in LivePrompter – you could even automatically start LivePrompter scrolling on loading a song in Cantabile!

I’ll show you what you need to do specifically to make this work in the next chapter. I’m assuming you have read (and understood) the basic documentation for both programs, so I won’t get into basic operation and configuration.

Specifically, you should have read and understood the article on LivePrompter’s MIDI control features – if you haven’t better do that now…

LivePrompter changing songs in Cantabile

To use LivePrompter to switch songs in Cantabile, the first thing is to set up a (pre-loading) setlist within Cantabile with all the songs you will need for a specific project or band. Then make sure that all these songs have a unique program change associated with them. You can also use banks if you have more than 128 songs in you repertoire.

Next, create sub-folder called “MIDI” in your LivePrompter home directory (where your song files sit). In this folder, create a text file named “MidiSend.txt”. This file will contain all the mappings from LivePrompter’s song files to Cantabile program changes. ”. To avoid issues with international characters, be sure that this file is coded as UTF-8 (same as your song files). This is easy to achieve if you use EditPad (Lite) to edit them (

Now edit this file to make it contain one line for each of your LivePrompter song files that contains the program number in Cantabile, plus the file name of the LivePrompter song file (without “.txt”):

 You can also use bank + program change notation as in Cantabile, but with bank 0, this is not necessary:

But of course, once you get beyond 128 songs, you’ll have to continue with 1.1, 1.2, …

Just make sure: the program numbers need to match your set list in Cantabile, and the song names need to match your file names in LivePrompter!

Note: multiple LivePrompter songs can reference the same Cantabile song (see Song 5). Makes sense, if you have a “standard sound” like a universal piano sound…

Now the next step is to configure your MIDI connection. I use rtpMIDI
( to create MIDI connections between my LivePrompter tablet and my live laptop, but if you want to run both applications on the same machine, you can also use a MIDI loopback driver like LoopBe ( to connect from LivePrompter to Cantabile and vice-versa.

First, in LivePrompter you need to add the following lines to LivePrompter.ini

MidiOutPort=<<name of your MIDI port>>

To find the correct name for your MIDI output port, you can use MidiEnum, a little tool contained in the LivePrompter package:

You can copy and paste the name directly from the list to your LivePrompter.ini to avoid typos J.

Ok, you’re all done on LivePrompter. Now on to Cantabile – we are on my Cantabile machine now:

First, create a MIDI input port that will wait for program changes from LivePrompter – I call it “LP Control” – and assign it to the “other end” of your MIDI connection. On my live laptop, the rtpMIDI port is also called “Network-MIDI” (surprise!); I’m using it as an input port now:

Now we need a Binding in our Global Rack (Background Rack) that reacts to program changes that arrive at “LP Control”: Choose LP Control as the source, set MIDI channel to “Omni”, the Event to “Program Change (Banked)”, Bank and Program Number to “Any”, the target to “Set List” and “Load Song by Program (Instant)”.

Save your Global Rack, and you’re done! Now, whenever you start displaying a new song in LivePrompter, Cantabile should automatically load the corresponding song (provided that it is contained in the set list – and the set list is currently loaded!).

Whenever you create a new song, make sure that it gets a new unique program change (don’t reassign!) in Cantabile. Then create a new line in “MidiSend.txt” that contains the program change and the correct LivePrompter song file.

Cantabile Selecting Songs in LivePrompter

If you want Cantabile to lead, the configuration is different: now you need LivePrompter to listen to (bank &) program changes from Cantabile.

First, instead of “MidiSend.txt”, the relevant file is “MidiReceive.txt”, and it needs to contain a unique program change (if needed also bank select) for each LivePrompter song.

1,Song 1
2,Song 2
3,Song 3
4,Song 4
5,Song 5

When LivePrompter receives this program change, it will load and display the corresponding song file. To be sure: here the program changes need to be unique, to make sure that on receiving a program change, LivePrompter know what to load.

The next step again is to configure the MIDI connection. Since LivePrompter is listening now, we need to select an input port:

MidiInPort=<<name of your MIDI port>>

I am using “omni” here, since I don’t care about the MIDI channel; it’s an exclusive connection.

In Cantabile, you need to configure an output port now – I’m calling it “LP Remote” – and connect it to your network or loopback port:

Now, every song in Cantabile needs to contain a binding on “Song Load” that sends a (banked) program change to LivePrompter: create a new binding with source “Song à OnLoad”, set its action to “Program Change (banked)” and the respective program change from “MidiReceive.txt”, and its target to your “LP Remote” MIDI output port. Now save your song.

Once you have done this for all your songs, a program change will be sent to LivePrompter on loading this song. If there is a corresponding line for this program change in “MidiReceive.txt”, LivePrompter will load and display the corresponding song file.

Alternatively, you could also use the “Set List->Selected Song Program” source binding in your Background Rack:

  • Source: SetList->Selected Song Program
  • Target: LP Remote Midi In
  • Action: Program Change (Banked)

Now, Cantabile will automatic send the program change defined in the current set list to LivePrompter. But this way may not always work well:

  • Your Cantabile songs may have different program numbers in different set lists
  • If you load songs without a set list, LivePrompter will not get any information

Therefore, my recommendation would be to use the first option and define the program changes directly in the song files.

Important: By default, LivePrompter will only accept song changes via MIDI when the song file is part of the current LivePrompter setlist, but you can also change this in LivePrompter.ini:


Now, if LivePrompter doesn’t find a song in the currently loaded setlist or book, it will search the full list of songs and, if the song is found there, switch the loaded setlist to “all songs”.

Remote-Controlling LivePrompter Keys

Once a MIDI connection has been set up, you can also use Cantabile to send key commands to LivePrompter via MIDI. This way, you can control LivePrompter from your master keyboard or pedalboard.

To do this, you need to set up an output port in Cantabile (see previous section) – here called “LP Remote”. Then open your Global (Background) Rack and create a route from your masterkeyboard to LP Remote.

Next, set the MIDI filters for this route so that only the controllers you want to use pass through. For this example, I am using controllers 80–86 (assuming these are buttons on your master keyboard), but you can also use MIDI notes. I am filtering out all other MIDI data with a “suppress events” filter:

Now we make the corresponding settings in LivePrompter.ini:

MidiInKeyUniversal=CC 80
MidiInKeyUp=CC 81
MidiInKeyDown=CC 82
MidiInKeyPrevSong=CC 83
MidiInKeyNextSong=CC 84
MidiInKeyPausePlay=CC 85
MidiInKeyReset=CC 86

Now you can control LivePrompter’s screen buttons (plus the “universal key” – see manual) from your master keyboard and – if you’re also remote controlling song selection from Cantabile – don’t need to touch your LivePrompter machine at all.

Have fun!