Overview

Using http://code.google.com/p/hiduino/wiki/UsingHiduinoISP for the MIDI interface

short the RESET/ GND pins on the ISP connector (two closest to USB jack)
Board goes in to dfu programming mode

Run this script to flash usb serial firmware. (to get back to a working Arduino board, from a MIDI controller for example)
#!/bin/sh
sudo dfu-programmer at90usb82 erase
sudo dfu-programmer at90usb82 flash /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/firmwares/arduino-usbserial/Arduino-usbserial-uno.hex 
sudo dfu-programmer at90usb82 reset

Run this script to flash MIDI interface

#!/bin/sh
sudo dfu-programmer at90usb82 erase
sudo dfu-programmer at90usb82 flash HIDUINO_MIDI.hex
sudo dfu-programmer at90usb82 reset

MIDI control sketch example, send MIDI commands via Serial, with the MIDI interface flashed, sends as MIDI commands to system.


/*
MIDI note player
This sketch shows how to use the serial transmit pin (pin 1) to send MIDI note data.
If this circuit is connected to a MIDI synth, it will play
the notes F#-0 (0x1E) to F#-5 (0x5A) in sequence.

The circuit:
* digital in 1 connected to MIDI jack pin 5
* MIDI jack pin 2 connected to ground
* MIDI jack pin 4 connected to +5V through 220-ohm resistor
Attach a MIDI cable to the jack, then to a MIDI synth, and play music.

created 13 Jun 2006
modified 2 Jul 2009
by Tom Igoe

This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/MIDI
*/

void setup() {
  // Set MIDI baud rate:
  Serial.begin(31250);
}

void loop() {
  // play notes from F#-0 (0x1E) to F#-5 (0x5A):
  for (int note = 0x1E; note < 0x5A; note ++) {
    //Note on channel 1 (0x90), some note value (note), middle velocity (0x45):
    noteOn(0x90, note, 0x45);
    delay(100);
    //Note on channel 1 (0x90), some note value (note), silent velocity (0x00):
    noteOn(0x90, note, 0x00);
    delay(100);
  }
}

// plays a MIDI note. Doesn't check to see that
// cmd is greater than 127, or that data values are less than 127:
void noteOn(int cmd, int pitch, int velocity) {
  Serial.write(cmd);
  Serial.write(pitch);
  Serial.write(velocity);
}