Connect and bridge MIDI ports

Connect virtual, USB, Bluetooth, or RTP-MIDI ports. Route data from any port to multiple other ports of any kind.

Host RTP-MIDI ports

Host up to 6 custom MIDI RTP-MIDI in and output ports. Connect to RTP-MIDI devices or allow them to connect to you.

Bonjour service compatible

Easily discover and connect to other MIDI devices and apps on your network using Bonjour service.

Conditional Message Modification

Set rules to conditionally modify MIDI messages based on various conditions and parameters.

Virtual ports

Host 6 virtual in and output ports, allowing MIDI message exchange between apps on your Android device.

MIDI BLE device

Act as a BLE server, enabling Bluetooth Low Energy (BLE) connections from other MIDI devices.

Log MIDI and system messages

Keep track of MIDI data you receive and send. Monitor and analyze messages to improve your setup.

Connection recovery

Automatic reconnection of virtual, USB, and RTP-MIDI connections after network or cable issues.

Save configurations

Save and quickly restore MIDI setups. Set a default preset to load on app start.

Background activity

MidiHub keeps running in the background, allowing you to switch between apps while staying connected.

User Manual

Get started with MidiHub by following our comprehensive user guide.

1. Installation

Download MidiHub from the Google Play Store and install it on your Android device.

2. Setting Up Connections

Learn how to establish MIDI connections with various devices and apps.

3. Advanced Features

Learn how to filter and alter MIDI messages passing through a port using rulesets.

4. Troubleshooting

Find solutions to common issues and learn how to optimize your MIDI setup.

1. Installation

Installing MidiHub is quick and easy. Follow these simple steps to get started:

  1. Visit the MidiHub page on Google Play Store
  2. Tap the "Install" button
  3. Wait for the download and installation to complete
  4. Once installed, tap "Open" to launch MidiHub
  5. Accept the requested permissions
System Requirements:
  • Android 6.0 (Marshmallow) or higher
  • Android device should support Google's MIDI API. Almost all devices do, but some manufacturers may not support it.

After installation, you're ready to start connecting your MIDI devices and setting up your first MIDI routes.

2. Setting Up Connections

MidiHub makes it easy to connect MIDI devices and create routes between them. Here's how to get started:

Basic Connection Setup

To create a connection between MIDI devices, simply swipe from an input port to an output port:

Swipe to Connect Demonstration

Swipe from input to output to create a MIDI bridge between ports

Advanced Connection Types

RTP MIDI Connections

Learn how to set up network MIDI connections using RTP MIDI:

BLE MIDI Server Mode

Transform your Android device into a Bluetooth Low Energy MIDI server:

3. Advanced Features: Filtering and Altering MIDI Messages

MidiHub can filter and/or alter MIDI messages passing through a port using rules combined in rulesets. This section explains the general concept of this feature.

Rulesets

In MidiHub, one or more rulesets can be applied to every MIDI port. These rulesets act on the data coming into the port and allow you to filter and/or change MIDI messages. The processed messages are then sent to the output of that port.

  • Rulesets consist of chained rules applied in the order in which they appear.
  • By default, there is one empty ruleset called 'Main Chain', but you can add additional rulesets.
  • Rulesets are independent and are applied in parallel.
  • Every ruleset will take the raw data coming into the port and process it according to the rules in that set before passing it on.
  • The result of all rulesets in a port is then combined and sent out of that port.
  • An empty ruleset will pass all messages unaltered (the default state for the 'Main Chain').
Input Flow Diagram

Example of input ruleset, showing how multiple chains and rules process incoming MIDI data in parallel before combining the results.

Output Flow Diagram

Output flow demonstrating how the combined results from rulesets are sent to the output port.

Examples

Example 1: Channel Remapping

Suppose ruleset1 filters channel 1 and changes the channel to 2. If a second ruleset, ruleset2, exists and is empty it will pass all messages. The combined output would be:

  • Ruleset1: channel 2 after channel 1 is changed to channel 2
  • Ruleset2: channels 1-16

This in effect doubles messages from channel 1. Any message on that channel is also sent out as a message on channel 2. This would allow for layering instruments.

Note: The above result could be achieved with one simple rule 'Re-map/filter:Channel' explained later.

Example 2: Keyboard Splitting

To split a keyboard sending on channel 1 at middle C:

  • Ruleset1 would discard all notes below C4 and subtract one octave from the remaining notes.
  • Ruleset2 would discard all notes above B3, add two octaves to the notes and change the channel from 1 to 2.

Where to Apply a Ruleset

Rulesets can be applied to both incoming and outgoing ports. The best port to apply the ruleset is dependent on your MIDI setup and routing in MidiHub. As a rule of thumb, you should choose a solution that sends out the least amount of MIDI messages. It's up to you to decide.

Rules

The rules are divided into three categories:

  1. Filters: Allow to filter the type of MIDI event. You could choose to pass only a specific type of event, like a note-on or block an event type like system-exclusive commands.
  2. Remap/Filters: Allow to remap or discard events. You could e.g. discard all messages from a channel or remap that channel onto another channel.
  3. Custom Rules: Act on a byte-level. They do require byte-level knowledge of the MIDI protocol. An example would be to set all note-on velocity messages to a fixed value.

Filter

There is currently one filter that allows to select what events should be passed or blocked. A list of events with tickmarks is presented. Ticked events are discarded.

Remap/Filter

There are several types of messages you can remap. If you remap to an empty value that message is discarded, forming a filter. You can input more than one value separated by a comma. If for instance you would remap channel 1 to '1,2' the message would be sent to channel 1 and to channel 2.

Types available are the following control messages:

  • Channel
  • Note
  • Velocity
  • Polyphonic aftertouch
  • Control change
  • Program change
  • Channel aftertouch

Custom Rules

These allow for a more complex way to change messages. You can select criteria for the status byte and value bytes 1 and 2. You can chain multiple criteria. If all conditions are met you can change one or more of these values, create a new control message with your own values or discard the message.

The rule can be read as:

IF (condition1 [AND condition2][AND condition ..]) THEN (action1 [action2][action ..])

Values are written in decimal. The status byte Note On, 0x9n, would be written as 144 + n where n is the channel number 0-15.

Re-arranging Rules

The order of rules can be changed. Hold down a rule and drag it up/down.

Testing Rules

After selecting a port in the UI you can send MIDI messages to that port and the result of your ruleset will be shown. A test option is also provided to send random notes to the port, showing the output after applying the ruleset.

4. Troubleshooting

If you encounter issues with MIDI communication, try these common troubleshooting steps:

  • Reboot all connected MIDI devices, including your Android device and any MIDI interfaces
  • Ensure you have bridged the ports by swiping (see Chapter 2)
  • Check that all MIDI cables are properly connected and not damaged
  • Verify that your MIDI devices are powered on and set to the correct channels
  • Make sure your Android devicerecognizes all MIDI devices in your system settings
  • Try disconnecting and reconnecting USB MIDI interfaces
  • Check if other MIDI apps do work with your hardware
  • For RTP MIDI connections: Check if no other app is using the default rtp port (5004)

If you continue experiencing problems after trying these steps, please email me at contact@trueblueinteractive.com and I'll be happy to help.