Found under: Settings > MIDI
OpenSongApp will communicate with various MIDI devices such as MIDI keyboards, BeatBuddy, sound modules, DAWs, guitar effect processors, MIDI footswitches, etc.
These are normally connected to the device running OpenSongApp using a USB cable (often requiring an additional OTG/On-the-go cable), or by connecting to a BluetoothLE enabled MIDI device, which is obviously the neatest solution!
If you want to go wireless, but your MIDI device doesn't have built in BluetoothLE, you can often plug in a relatively cheap Bluetooth dongle to the MIDI device to let OpenSongApp communicate with it.
To search for connected USB MIDI devices, click on 'SEARCH'. To find MIDI over BluetoothLE devices, switch on the 'Connect Bluetooth devices option' (this may check for permissions and request them if required), then click on 'SEARCH'. Any devices found will be shown to you and you can select them to make the connection to the app.
You can also create MIDI commands that can be assigned to 8 customisable MIDI action controls - these can be assigned to foot pedals, page buttons or screen gesture.
OpenSongApp will send any MIDI message that can be represented as a hexadecimal string. Whilst this can be complex, the app will try to help you create this code using drop down menus. You can, however, manually enter any hexadecimal string that your MIDI device requires. These are sometimes given in device user manuals.
Predefined MIDI message helpers are as follows.
Controller change (including MSB when controller set to 0 (00 as hexadecimal) and LSB when controller is set to 32 (20 as hexadecimal)
Sending MIDI messages
Once you have connected your MIDI device, you can test the connection by clicking on the TEST button directly underneath the device name. This will send the following 3 MIDI messages to the connected device:
'Note on' on MIDI channel 1, note 60 (C4) at a velocity of 100. 1 second later it will send the 'Note off' instruction. The actual MIDI messages if you want to decipher them: 0x90 0x3C 0x64 followed by 0x80 0x3C
'Note on' on MIDI channel 10, note 42 (F#2/Closed HiHat) at a velocity of 100. 1 second later it will send the 'Note off' instruction. The actual MIDI messages if you want to decipher them: 0x99 0x2A 0x64 followed by 0x89 0x2A
'Program change' on Midi channel 1 to program 1. 1 second later it will change the instrument to instrument 0. The actual MIDI messages if you want to decipher them: 0xC0 0x01 followed by 0xC0 0x00
Once you are connected, you can build and test your custom MIDI messages using the drop down menus. The TEST button underneath this section sends the MIDI message currently chosen to connected devices.
You can also enter and test any midi code (including Sysex) by manually copying it from a device manual or text editor. The diagram above can help explain how the MIDI code is built up. Each block starts with 0x which defines it as a hexadecimal integer. Without this, the message would throw an error.
For example, the midi message 0xB1 0x07 0x7F would send a Controller change (0xB1) message on MIDI channel 2 (0xB1) with the controller number 7 (0x07), which is often the volume controller and with a value of 127 (0xFF), the highest value.
Sysex messages always start with 0xF0 and end with 0xF7 and can have any quantity of hexadecimal numbers in between. These can end up being extremely large messages and take a while to be sent/received.
Any MIDI messages that you add on this screen are saved to the current song. They can be used to set up a keyboard with the sounds required as soon as the song is loaded. You can choose to send this MIDI code automatically to connected devices as soon as the song is loaded. They will be sent in the order they are stored with a delay set by the MIDI delay value. Increasing this value sometimes helps when using MIDI over bluetooth.
Receiving MIDI messages
OpenSongApp will only listen for MIDI notes (sent using Note on/off) from another device - this is used to listen for MIDI foot pedals. The actions you can assign for different notes received are set on the foot pedal settings page.
Korg arranger midi code builder for songbook
If you use a Korg arranger, you can use the following Google Sheet to generate the MIDI code to tell the arranger which song to load when you open it in OpenSongApp.
The Google Sheet is shared with view permissions. If you want to make your own copy that you can edit, use the File > Make a copy option.
BeatBuddy code generator
Long time user and contributor Alistair has created the following Spreadsheet to help generate and keep a record of song settings for his BeatBuddy.
I've converted this to a Google Sheet so it is accessible online. You can view the file below, and if you can then make your own copy if you find it useful (use the File > Make a copy option).
There is also a BeatBuddy helper in the Settings > Utilities > BeatBuddy page
To use a MIDI device, you must first connect it. This must be done once you have started OpenSongApp. If you wish to use a MIDI Bluetooth foot pedal, you will need to connect it on this page before the app will listen for it.
I highly recommend that you use a BluetoothLE MIDI dongle. This does not rely on USB device drivers, etc. that can cause issues with USB MIDI devices. It also gives freedom of movement!
BluetoothLE MIDI dongle (usually self powers from MIDI out, but can often also be plugged into a USB power supply)
I have this exact device and it works perfectly
USB MIDI connector.
I have this exact device, but it doesn't work with Android!!!!
USB OTG cable. These often come with new Android devices and allow you to connect normal sized USB cables into your mobile device (likely using USB-C or microUSB port).
Android 6+ (Marshmallow or later) with built in MIDI hardware
BluetoothLE if requiring connection to MIDI devices over BluetoothLE.
Android Permissions required (only if using MIDI over Bluetooth):
Android Tiramasu (and above): BLUETOOTH, BLUETOOTH_SCAN (no location required), BLUETOOTH_CONNECT
Android S: BLUETOOTH, BLUETOOTH_SCAN, BLUETOOTH_CONNECT, ACCESS_FINE_LOCATION
Android R or lower: BLUETOOTH, ACCESS_FINE_LOCATION