Cantabile Network Connection

What is Cantabile and why a network connection?

Cantabile is my favorite VST plugin host for live performance. It allows you to use VST instruments as you would use hardware synths or effects – and better! You get ultimate flexibility while picking and choosing the best instruments and effects the plugin ecosystem has to offer, and use them in a pre-configured setup that feels like playing the ultimate workstation. If you haven’t, head over to www.cantabilesoftware.com and take a look!

I use Cantabile on stage and in the rehearsal room on a daily basis, and I really needed to connect it to LivePrompter, so that

  • I can automatically load a Cantabile song whenever I load a song in LivePrompter
  • I can control LivePrompter scrolling and song changing via buttons on my live keyboards, controlled by Cantabile
  • I can get feedback from my Cantabile PC on my LivePrompter tablet

In the “classic” version of LivePrompter, I addressed this using MIDI connectivity – simple, robust and does the job. But with the mobile version, this created a bit of a challenge, since most Android tablets only have one USB port – and I generally use that to keep the device powered on-stage. So a wireless solution is more desirable for Android devices.

Unfortunately, Android doesn’t offer an rtpMIDI connection like iOS does, so just piping MIDI through a network connection wasn’t an immediate option. Fortunately, Cantabile provides a pretty powerful network API, so LivePrompter mobile can take advantage of that to connect to Cantabile.

What can I do with Cantabile Networking?

You can do a number of things, that can all come in handy in a LivePrompter / Cantabile setup:

  1. Get information whenever Cantabile changes its song or song state and display a friendly pop-up message when this happens. I like having this, so I get visual confirmation that Cantabile has registered my “change” command and I’m in the right place. Nothing worse than starting a song on a completely wrong sound…
  2. Automatically make Cantabile load the correct song file when LivePrompter loads a song. With this, I don’t need to manage setlists in Cantabile AND LivePrompter: I have a “master setlist” with all my songs open in Cantabile and use LivePrompter to step through my setlists and change Cantabile songs accordingly.
  3. Alternatively, you can have Cantabile control LivePrompter, if you’d rather manage your setlists in Cantabile and want to “slave” LivePrompter. Whatever works best for you. When you set LivePrompter to follow Cantabile song changes, it will also automatically open the song screen – unless it is currently in Search mode.
    I’d just recommend that you decide on one or the other method – if both programs try to control the other, there’s the potential for things to get messy, so best make one the clear master and the other the slave when it comes to changing songs
  4. Control LivePrompter scrolling (play/pause, up, down, previous, next, …) via MIDI CC commands from Cantabile. That allows you to use physical buttons on your MIDI controllers to control LivePrompter – or even use bindings to automate LivePrompter operation.
  5. Lastly, you can also trigger (pre-defined) alert messages from Cantabile that pop up on LivePrompter’s screen. Helpful to send out some status information – I use it to quickly flash the status of my VoiceLive bypass switch. Another useful application: give a visual indication of the Leslie speed of a Hammond clone. These messages just pop up for a short time, so they don’t get in the way.

Of course, to do all this, you need your Cantabile PC and your LivePrompter tablet (or phone) on the same network, so that LivePrompter can “see” your Cantabile PC. This means, you’ll need a wireless router in your live or rehearsal room setup – I guess if you are nerdy enough to use Cantabile live, setting up a router will not really scare you 😉…

Setting up Cantabile Networking

The first thing you need to do to connect Cantabile and LivePrompter is activate Cantabile’s network Server in Cantabile settings:

Now you need the IP address of your Cantabile PC to be able to connect your LivePrompter tablet or phone to this PC. For this, it makes sense to set your PC to a fixed IP address, either by configuring your network router to always assign it the same address, or by directly configuring your Cantabile PC with a fixed IP address. If you don’t know how to do this – Google is your friend (e.g. this article).

Now open the settings page in LivePrompter and tap the “Cantabile Network Address” setting to enter the correct IP address and port for your Cantabile machine:

(fixed in version 1.1.2) Note: there is a bug in the Flutter settings package I use that causes the edit dialog to open empty when you first tap the network address setting. Simply tap “cancel” and open it again – now it should be filled with the current value.

Now make the other settings (I’ll explain them in a minute) according to your needs and activate “Use Cantabile Networking” at the top. Now when you leave the settings page, LivePrompter should try to connect to Cantabile and show the result in its title bar with a Cantabile icon on the right. If that icon is crossed out, LivePrompter isn’t connected.

Generally, when the connection is separated for any reason (Cantabile not running or the audio engine turned off, which will also stop the network server), LivePrompter will keep trying to connect to Cantabile for 2 minutes; then it will quietly give up and stop trying. You can manually try to re-connect by tapping the crossed-out Cantabile icon.

Cantabile Network Settings

Note: all Cantabile networking settings are saved with your settings profile and are specific to that profile. So you can have profiles with different networking settings, e.g. one with and another without networking, or one that controls Cantabile and another that is “slaved” to Cantabile.

  • Use Cantabile Networking – this is the “on/off” switch; set it to “on” to enable networking. Note: network connection will only be made once you leave the settings page.
  • Cantabile Network Address – enter the IP address of your Cantabile PC with the port specified in Cantabile settings (default is 35007)
  • Show Network Alerts – this will display small grey popup messages when Cantabile connectivity changes, e.g. “Connected to Cantabile” or “Giving up trying to connect”. This may be helpful while you are configuring your network connection; once everything runs smoothly, you can de-activate this and just rely on the “wifi” icon.
  • Show Song/State Changes – pops up a friendly green alert whenever a song or song state changes. The alert will disappear automatically – no need to swipe it away.
  • Change Cantabile Songs – Whenever LivePrompter loads a song, it will try to load the corresponding song in Cantabile. To enable this, you need to have a setlist loaded in Cantabile, with individual program changes set for each song. Also, you’ll need to set up MidiSend.txt in your LivePrompter MIDI folder (see below) to correspond to these program changes. LivePrompter will then ask Cantabile to load the song in the setlist by its (banked) program number.
  • Change LivePrompter Songs – When the current song changes in Cantabile, LivePrompter will try to load the LivePrompter song that corresponds to this Cantabile song. To identify the correct song, it will use the song’s (banked) program number in the current Cantabile setlist and match it against the program changes set up in MidiReceive.txt (see below).
    If LivePrompter is currently showing the Home Screen, it will automatically open the Song Screen with the selected song. This is de-activated when LivePrompter is in “Search” mode – I assume you don’t want to be rudely interrupted by Cantabile while searching 😉.
  • Change Setlist to “All Songs” if needed – when “Change LivePrompter Songs” is active and LivePrompter receives a program change from Cantabile that doesn’t have a corresponding song in the current LivePrompter setlist, it will check if there is such a song in “All Songs”. If there is and this setting is active, LivePrompter will automatically change the setlist to “All Songs” and jump to that song.
  • Control LivePrompter buttons – LivePrompter will watch a specific MIDI output port in Cantabile for CC 6 commands. The CC 6 values will be translated to LivePrompter’s button functions (as in keyboard operation) as follows
    • 1: play/pause
    • 2: up
    • 3: down
    • 4: previous song
    • 5: next song
    • 6: reset song
    • 7: universal key
  • CC Midi Port – the name of the Cantabile MIDI output port that LivePrompter should watch for CC 6 commands. Default is “LivePrompter”, but you can set it to any legitimate Cantabile port name. Note: the port doesn’t need to be connected to a physical output for this to work
  • Custom Messages – here you can set five alert messages that can be triggered by sending cc 6 values 11 to 15 to the CC Midi Port. These alert messages are displayed for a short time on an orange background:

Addendum (version 1.3.x): custom message commands

To make custom messages a bit more flexible, I’ve added the ability to keep messages on screen and explicitly dismiss them. To do this, you can prefix your custom messages with commands:

  • [S] show the message and keep it open
  • [H] hide any open message (the actual text of this message is ignored)
  • [T] toggle – if a custom message is currently open, it will be closed, otherwise a new message with this text will be shown

So just launch a custom message with “[S]My fancy message” and later dismiss it again with “[H]”, or use “[T]My toggle message” to alternately show and dismiss a message.

Cantabile Network Status

LivePrompter will display the network connection status in its title bar; there are three possible states:

  • connected: LivePrompter is successfully connected with Cantabile
  • disconnected: LivePrompter has not been able to connect or re-connect with Cantabile for more than 2 minutes; tap the icon to try again
  • connecting: LivePrompter is currently trying to connect to Cantabile, but hasn’t succeeded yet

Mapping songs between LivePrompter and Cantabile

In order for Cantabile to know which song to switch to when LivePrompter loads a song (or vice versa), they need to agree on how to identify songs between them. Fortunately, the answer is pretty simple: MIDI program changes!

LivePrompter needs to know which program change will activate which song or which program change to send when a song is loaded. I considered building this into the song files themselves, but found it easier to manage with a separate file that keeps all the information organized in one place.

So this mapping is defined in two files that reside in a subdirectory of your song folder called MIDI which contains two text files, called “MidiReceive.txt” and “MidiSend.txt”.

Note: To avoid issues with international characters, be sure that they are coded as UTF-8 (same as your song files). Also upper/lower case are relevant on Android, so be careful with that!

Also note: a nasty issue that pops up frequently is editors automatically replacing straight apostrophes with “smart” apostrophes in your text files. This will break the connection between filenames and songs, so look for that if things don’t quite work…

Each of these two files has the same layout: one line for each mapping that looks like this:

{Bank}.{Program},{SongName}

or simply

{Program},{SongName}

Since MIDI program changes are restricted to 128 different programs, LivePrompter also allows multiple banks of programs to break this limit. MIDI-wise, this means that a program change is preceded by two bank select commands, namely “bank select MSB” (CC 0) and “bank select LSB” (CC 32), which together tell the recipient of the messages that it should call up the respective program in the addressed bank.

To keep things simple, I’ve avoided the mess with MSB and LSB and simply put in a combined “bank” number.

So this is what a MidiSend.txt file could look like:

0.1,Addicted To Love 
0.3,Angels 
0.4,Another Brick In The Wall 
0.5,Behind Blue Eyes 
0.7,Brown Sugar

Or alternatively:

1,Addicted To Love 
3,Angels 
4,Another Brick In The Wall 
5,Behind Blue Eyes 
7,Brown Sugar

if you only have 128 or less songs in your list.

Changing Cantabile Songs

When loading a song, LivePrompter will scan through the list of program changes defined in “MidiSend.txt” and try to find a song name that is identical to the file name of the song being loaded. If it finds one, it will send a command to Cantabile, asking it to load the song with this program number in its current setlist.

This will even work for “divider” or “instruction” setlist entries that don’t reference a “real” song file – entries like “— Set 1 —”. If you enter this as a song name in “MidiSend.txt”, Live Prompter will also send the respective program change when you get to this point in your setlist. Nifty, huh?

Receiving Song Changes from Cantabile

When LivePrompter is informed by Cantabile that a song has changed, it will use the program number of this song and scan through the list of program changes defined in “MidiReceive.txt”.

Once it finds a correct program change / bank combination, it will look if its current setlist contains the name referenced. If yes, it will load the corresponding song. It will even automatically open the song window if it isn’t open yet.

OK, that’s all – have fun networking LivePrompter!