-
-
Notifications
You must be signed in to change notification settings - Fork 111
USB MIDI interfaces
USB MIDI interfaces are commonly used to send and receive MIDI data from a modern PC. You can also use a USB MIDI interface to receive data on mt32-pi.
If you want to receive MIDI on the Pi using a USB MIDI interface, any class-compliant interface should work fine. If the interface works on Windows or Linux PCs without requiring any drivers, there's a high chance it will work with mt32-pi.
If you're shopping for a USB MIDI interface, the following devices have been confirmed as working properly (or not) by our testers. Feel free to contribute test results with your own MIDI interfaces and we can list known working ones!
Manufacturer | Device | Send* | Receiveβ | Comments |
---|---|---|---|---|
iConnectivity | mio | β | β | 1 in, 1 out; male DIN plugs. May need power-up delay. Tested by @sdstrowes. |
M-Audio | MIDISport 1x1 | β | β | 1 in, 1 out; female DIN sockets. Tested by @nswaldman. |
M-Audio | Uno | β | β/β | 1 in, 1 out; male DIN plugs. May need power-up delay. Some serial number ranges may be defective and subject to a product recall, others may simply be incompatible for receiving with the Pi. Tested by @dwhinham. |
Roland | UM-1EX | β | β | 1 in, 1 out; male DIN plugs. Tested by @Higgy69. |
Roland | UM-ONE mk2 | β | β | 1 in, 1 out; male DIN plugs. Tested by @nswaldman. |
Yamaha | UX16 | β | β | Discontinued. Not class compliant. Tested by @jake_worrell. |
- * The Send column indicates that the device has been tested for sending data to mt32-pi (i.e. the USB connection is made with a PC or other device).
- β The Receive column indicates that the device has been tested for receiving data (the USB connection is made with the Raspberry Pi).
If you are trying to use a class-compliant USB MIDI interface and it doesn't seem to work or only works in certain ports, it may need some extra time to power up.
Try editing your cmdline.txt
on the SD card to add usbpowerdelay=2000
to the end of the first line, i.e. so that it reads:
fast=true usbpowerdelay=2000
This sets the number of milliseconds to wait between powering on the device and attempting to access it. The default value used when this option isn't set is 510.
If this works, you can try lowering it in increments to optimize startup time.
If you are looking to purchase a USB MIDI interface, it is strongly recommended that you avoid no-name cheap interfaces. Don't be tempted by their cheap price. The device pictured on the right is still widely available from online sellers, and is particularly notorious for its poor quality.
These devices are well known to corrupt System Exclusive data or just not function at all because of crucial missing components [1, 2, 3]. A quick Google search for "Chinese MIDI interface" will reveal several accounts of these devices behaving unreliably.
Some of these devices will appear to work just fine for sending simple Note On/Off commands or Control Change messages, which are only two or three bytes long. The problems occur when longer messages such as SysEx are transmitted.
The reason behind this seems to be that these devices declare that they can support packet sizes of over 4 bytes, but don't actually work with large packets. Operating systems/drivers that are unaware of this (e.g. Windows) will attempt to send large packets, and they will be corrupted in transit by the MIDI interface, which results in the connected MIDI device receiving garbage.
The Linux USB MIDI driver has a list of USB Vendor/Product IDs that are known to suffer from this problem, and implements a workaround/quirk for them [4, 5].
If your only option is one of these devices, try using a Linux computer to send data using your cheap MIDI interface. A user in issue #25 reported successfully being able to send SysEx data after connecting their cheap interface to a Linux machine, confirming that the quirk works.
Otherwise, consider purchasing a MIDI interface from a trusted manufacturer.
Β© Dale Whinham 2020-2022. Released under the GNU General Public License v3.0.