Code Monkey home page Code Monkey logo

mustang-midi-bridge's Introduction

mustang-midi-bridge

This application enables a small computer running Linux to translate MIDI messages to the proprietary USB protocol used by Fender Mustang amplifiers.

Introduction

Mustang bridge implements about 99% of the published MIDI spec for the Fender Mustang Floor pedal with extensions to support features added to the 'v2' series:

https://github.com/snhirsch/mustang-midi-bridge/blob/master/doc/MIDX20_Midi_Spec.pdf

Code is developed on a Ubuntu Precise desktop machine, but I routinely test on a Raspberry Pi 'B' and Beagelbone Green to ensure these remain viable deployment targets.

(Due to occasional issues with USB on the RPi I am recommending the BBG for live performance use - YMMV)

Special thanks to:

  • The original developer and contributors to 'PLUG' who blazed the path with reverse-engineering of Fender's communication scheme.

  • Robert Fransson (aka Codesmart) of Primova Sound for feedback and encouragement and general programming wizardry). And a special thanks for allowing me to include his nicely formatted MIDI spec (in doc subdirectory).

  • Robert Heitman of Triton Interactive, author of the Android 'Remuda' application, who provided valuable insight into the darker corners of Mustang communication protocol.

For the non-techies

I have written a Wiki page here:

https://github.com/snhirsch/mustang-midi-bridge/wiki/Install

that attempts a detailed walk-through of the installation and build process on Raspberry Pi or Beaglebone. It's hard to know what level of detail to hit and suggestions or comments would be appreciated if I've omitted or glossed over something critical.

If all this turns out to be too technical, Primova Sound offers a plug-and-play hardware appliance that will bridge to the Mustang and also provide a link to the non-MIDI-compliant Roland GP-10 pedal.

http://www.primovasound.com/

Disclaimer: I have no involvement with Primova other than cooperating with Codesmart to ensure our solutions presented the same MIDI API for Mustang amp control. And, as an owner of the older MIDX-10 product I can vouch for the quality of their hardware.

Status

The Mustang Floor MIDI spec is about 99% implemented, with only the following exceptions:

  • Amp Bypass

    It's possible to turn the amp "off" with CC#68 0, but this mutes all sound rather than acting as a bypass. It appears that the combo amps do not support the notion of straight-through routing without an amplifier modeling block.

  • Pedal Volume

    I'm not sure why this would even be needed, since all continuous controllers are directly accessible through CC messages.

  • FX Insert

    Not supported on hardware other than Mustang Floor

  • Tap Tempo

    I was not able to find the magic incantation to set tap tempo over USB (if, indeed, it's even possible). However, this function can be assigned to one of the Fender foot pedals if you need it at your feet. Haven't totally given up on this and have an idea for "faking" it over MIDI. Now I just need the time to code it...

Prerequisites

  • For Ubuntu Precise or Debian Jessie the following packages must be present. Install all but 'pyusb' with 'apt-get' (see below).

    • libasound2
    • librtmidi-dev
    • libusb-1.0-0-dev
    • libjack0 (Precise)
    • libjackQ (Jessie)
    • at
    • python2.7
    • python2.7-dev
    • python-pip
    • pyusb
    NOTE: The python-pip install may segfault at the end, but it doesn't
          seem to affect anything.
'pyusb' must be installed last using 'pip':

$ pip install pyusb
  • If you want to run the regression tests, you'll also need:

    • 'Mido' Python MIDI extension
    • Python rtmidi extension

    'mido' and rtmidi are not available as a DEB package and must be installed using 'pip':

    $ pip install --pre python-rtmidi

    $ pip install mido

Would appreciate feedback on requirements for other distributions.

Build

$ make
 or
$ make CPPFLAGS=-DRTMIDI_2_0 (for older librtmidi)

Configure

  1. Update 60-midi.rules with the USB VID (vendor id) and PID (product id) of your controller. Must be on both lines, although the attribute names are different.

  2. Edit mustang_bridge_start to set values marked as user edits. In addition to setting the VID and PID, you need to specify the index of the MIDI interface (see note below) and the MIDI channel you want the bridge to listen on.

NOTE: I'm not sure about other platforms, but on Linux the MIDI port number is equivalent to the ALSA card index. I had originally treated port as 1..n, but since ALSA (and JACK? Not sure..) starts at 0, this has now been changed. You can find the card index for your controller by connecting it to the computer and examining the pseudo-file, e.g.:

$ cat /proc/asound/cards
 0 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xf7530000 irq 30
 1 [Interface      ]: USB-Audio - USB MS1x1 MIDI Interface
                      M-Audio USB MS1x1 MIDI Interface at usb-0000:00:14.0-1, full speed

To accept MIDI messages from devices behind the M-Audio interface you would now specify '1' as the MIDI port value.

Install

Run the install.sh script as root

Run

If you have configured everything correctly, the bridge should start automatically when both the controller and the Mustang amp are connected via USB. If either or both are disconnected or shut off, the bridge will be killed automatically.

In case of difficulty

RPi and BBG are a bit fussy about enumeration of new USB devices. If you are not getting proper communication, quit the program and try replugging both the Fender amp and MIDI controller after those devices are powered up.

I've had success using a passive USB hub with the single USB on the BBG, but YMMV since most USB<->5Pin MIDI converters draw some degree of bus power. A powered hub might be necessary in some situations.

Recent Changes

Complete rewrite and restructure of code based on ever-increasing familiarity with the Mustang communication protocol and API. The bridge code is now fully mulithreaded. A persistent background thread is constantly listening to incoming traffic from the amp and updating shared data as necessary. This greatly increases stability and makes the bridge tolerant of manual adjustments on the amplifier while nominally under MIDI control. In particular, it is now possible to engage the tuner function on the amp without ill side-effects.

The command line parameter for MIDI controller port is now assumed to start at 0 rather than 1 in order to match the way Linux ALSA enumerates devices.

I have added a runtime framework that starts and stops the program automatically based on attached MIDI devices. There is a small amount of customization required to account for your specific amp model and MIDI controller interface.

Support added for amp and effects models specific to the Mustang v2 products.

Added a python script to drive regression testing. Tests require LCD display for feedback and are not going to be of much use unless you have a Mustang III, IV or V model.

mustang-midi-bridge's People

Contributors

snhirsch avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.