You are viewing an older revision! See the latest version

USBMIDI

The USBMIDI interface can be used to send and receive MIDI messages over USB using the standard USB-MIDI protocol.

Using this library, you can do things like send MIDI messages to a computer (such as to record in a sequencer, or trigger a software synthesiser) and receive messages from a computer (such as actuate things based on MIDI events)

The USB connector should be attached to p31 (D+), p32 (D-) and GND. You can also connect the USB power to VIN to power the mbed when connected.

Hello World

USBMIDI Hello World

// Hello World example for the USBMIDI library

#include "mbed.h"
#include "USBMIDI.h"

USBMIDI midi;

int main() {             
    while (1) {    
        for(int i=48; i<83; i++) {     // send some messages!
            midi.write(MIDIMessage::NoteOn(i));
            wait(0.25);
            midi.write(MIDIMessage::NoteOff(i));
            wait(0.5);
        }
    }
}

Import programUSBMIDI_HelloWorld

USBMIDI Hello World

Currently only available in betamode!

This library is in beta, and only works with the betamode compiler and the beta version of the libraries.

To use these examples, ensure you have enabled /betamode for the compiler, and then import these examples as the basis for your experiments to ensure the beta mbed library is pulled in.

API

Import library

Public Member Functions

USBMIDI (uint16_t vendor_id=0x0700, uint16_t product_id=0x0101, uint16_t product_release=0x0001)
Constructor.
void write ( MIDIMessage m)
Send a MIDIMessage .
void attach (void(*fptr)( MIDIMessage ))
Attach a callback for when a MIDIEvent is received.

More example

In this example, you can control the MIDI message sent with buttons

USBMIDI: leds controlled by MIDI messages received

#include "mbed.h"
#include "USBMIDI.h"

//USBMIDI object
USBMIDI midi;


// Leds which will be switch on or off according to a MIDImessage
BusOut leds(LED1, LED2, LED3, LED4);

BusInOut buttons(p22, p23, p24, p25);

void show_message(MIDIMessage msg) {
    switch (msg.type()) {
        case MIDIMessage::NoteOnType:
            switch (msg.key()) {
                case 48:
                    leds = (1 << 0);
                    break;
                case 49:
                    leds = (1 << 1);
                    break;
                case 50:
                    leds = (1 << 2);
                    break;
                case 51:
                    leds = (1 << 3);
                    break;
            }
            break;
        case MIDIMessage::NoteOffType:
        default:
            leds = 0;
    }
}

int main() {
    uint8_t bus = 0;
    uint8_t p_bus = 0;

    // call back for messages received
    midi.attach(show_message);

    while (1) {

        //if buttons state changes, send a MIDI message
        bus = buttons.read();
        for (int i = 0; i < 4; i++) {
            if ( (bus & (1 << i)) != (p_bus & (1 << i))) {
                if (bus & (1 << i)) {
                    midi.write(MIDIMessage::NoteOn(48 + i));
                } else if ( !(bus & (1 << i)) ) {
                    midi.write(MIDIMessage::NoteOff(48 + i));
                }

            }
        }
        wait(0.001);
        p_bus = bus;
    }
}

Import programUSBMIDI_Receive

USBMIDI example


All wikipages