Tutorial.Midi History

Show minor edits - Show changes to markup

December 10, 2015, at 12:02 PM by Simone Maiocchi -
Changed lines 88-89 from:
 Last revision 2015/07/29 by SM 
to:
 Last revision 2015/12/10 by AG 
December 10, 2015, at 12:00 PM by Simone Maiocchi -
Changed line 43 from:
  • Digital pin 1 connected to MIDI jack pin 5 through a 220 ohm resistor
to:
  • MIDI jack pin 5 connected to Digital pin 1 through a 220 ohm resistor
December 10, 2015, at 11:51 AM by Simone Maiocchi -
Changed line 34 from:
  • 220 ohm resistor
to:
  • 2 220 ohm resistors
Changed line 43 from:
  • Digital pin 1 connected to MIDI jack pin 5
to:
  • Digital pin 1 connected to MIDI jack pin 5 through a 220 ohm resistor
August 28, 2015, at 10:00 AM by Simone Maiocchi -
Changed lines 73-75 from:
to:
August 28, 2015, at 09:58 AM by Simone Maiocchi -
Changed lines 1-6 from:
to:
Added line 31:
Changed lines 37-38 from:
to:
Changed line 40 from:
to:
Changed lines 60-61 from:
to:
Changed lines 76-78 from:
  • Serial Call Response - Send multiple variables using a call and response (handshaking) method.
  • For Loop: - Controlling multiple LEDs with a for loop.
  • ASCII Table: - Generates a table of characters and their ASCII, hexadecimal, octal, and binary equivalents.
to:
  • ASCIITable - Demonstrates Arduino's advanced serial output functions.
  • Dimmer - Move the mouse to change the brightness of an LED.
  • Graph - Send data to the computer and graph it in Processing.
  • MultiSerialMega - Use two of the serial ports available on the Arduino and Genuino Mega.
  • PhysicalPixel - Turn a LED on and off by sending data to your board from Processing or Max/MSP.
  • ReadASCIIString - Parse a comma-separated string of integers to fade an LED.
  • SerialCallResponse - Send multiple variables using a call-and-response (handshaking) method.
  • SerialCallResponseASCII - Send multiple variables using a call-and-response (handshaking) method, and ASCII-encode the values before sending.
  • SerialEvent - Demonstrates the use of SerialEvent().
  • VirtualColorMixer - Send multiple variables from Arduino to your computer and read them in Processing or Max/MSP.
July 29, 2015, at 07:20 PM by Simone Maiocchi -
Changed line 22 from:
  • Arduino UNO
to:
  • Arduino or Genuino Uno
Changed line 53 from:

If you're using a board with 32u4 like DUE or Leonardo, please replace Serial with Serial1 in the sketch below.

to:

If you're using a board with ATmega32U4 like DUE or Leonardo, please replace Serial with Serial1 in the sketch below.

Changed lines 67-70 from:
  • ASCII Table: - Generates a table of characters and their ASCII, hexadecimal, octal, and binary equivalents.
to:
  • ASCII Table: - Generates a table of characters and their ASCII, hexadecimal, octal, and binary equivalents.


Last revision 2015/07/29 by SM

July 14, 2015, at 03:33 PM by Simone Maiocchi -
Changed line 53 from:

Since Serial object is used to use this tutorial with 32u4 based boards like Leonardo, replace Serial with Serial1

to:

If you're using a board with 32u4 like DUE or Leonardo, please replace Serial with Serial1 in the sketch below.

July 09, 2015, at 03:20 PM by Simone Maiocchi -
Changed line 2 from:

Tutorials > Examples? > USB > Communication >Midi

to:

Tutorials > Examples? > Communication >Midi

July 09, 2015, at 01:55 PM by Simone Maiocchi -
Deleted lines 27-29:

Attention Since Serial object is used to use this tutorial with 32u4 based boards like Leonardo, replace Serial with Serial1

Added lines 52-53:

Attention Since Serial object is used to use this tutorial with 32u4 based boards like Leonardo, replace Serial with Serial1

July 09, 2015, at 01:54 PM by Simone Maiocchi -
Changed lines 1-6 from:

Examples > Communication

MIDI Note Player

This tutorial shows how to play MIDI notes from an Arduino.

to:
Changed lines 13-16 from:

MIDI is a serial protocol that operates at 31,250 bits per second. The Arduino's built-in serial port (all of them on the Mega as well) can send data at that rate.

MIDI bytes are divided into two types: command bytes and data bytes. Command bytes are always 128 or greater, or 0x80 to 0xFF in hexadecimal. Data bytes are always less than 127, or 0x00 to 0x7F in hex. Commands include things such as note on, note off, pitch bend, and so forth. Data bytes include things like the pitch of the note to play, the velocity, or loudness of the note, and amount of pitch bend, and so forth. For more details, see the MIDI specification, or one of the many MIDI Protocol Guides on the Web.

to:

MIDI is a serial protocol that operates at 31,250 bits per second. The board built-in serial port (all of them on the Mega as well) can send data at that rate.

MIDI bytes are divided into two types: command bytes and data bytes. Command bytes are always 128 or greater, or 0x80 to 0xFF in hexadecimal. Data bytes are always less than 127, or 0x00 to 0x7F in hex. Commands include things such as note on, note off, pitch bend, and so forth. Data bytes include things like the pitch of the note to play, the velocity, or loudness of the note, amount of pitch bend and so forth. For more details, see the MIDI specification or one of the many MIDI Protocol Guides on the Web.

Changed line 21 from:

Hardware Required

to:

Hardware Required

Changed lines 23-25 from:
  • (1) MIDI jack
  • (1) 220 ohm resistor
  • hook-up wire
to:
  • Female MIDI jack
  • 220 ohm resistor
  • hook-up wires
Changed line 28 from:

Attention

to:

Attention

Changed lines 33-35 from:

All MIDI connectors are female, by definition of the MIDI spec. Here's how to wire the connector to the Arduino:

  • Arduino digital pin 1 connected to MIDI jack pin 5
to:

All MIDI connectors are female, by definition of the MIDI spec. Here's how to wire the connector to the board:

  • Digital pin 1 connected to MIDI jack pin 5
Changed lines 37-39 from:
  • MIDI jack pin 4 connected to +5V through 220-ohm resistor

to:
  • MIDI jack pin 4 connected to +5V through a 220 ohm resistor

Changed lines 47-48 from:

Schematic

to:

Schematic

Changed lines 61-68 from:

See Also:

to:

See Also

July 09, 2015, at 01:45 PM by Simone Maiocchi -
Changed line 53 from:
to:
May 02, 2012, at 04:08 PM by Scott Fitzgerald -
Changed line 50 from:
to:
November 16, 2011, at 04:15 AM by Scott Fitzgerald -
Changed line 50 from:
to:
September 30, 2011, at 03:16 AM by Scott Fitzgerald -
Changed line 50 from:
to:
September 24, 2011, at 01:14 AM by Tom Igoe -
Changed lines 1-34 from:
to:
September 24, 2011, at 01:11 AM by Tom Igoe -
Changed lines 1-61 from:
to:
September 24, 2011, at 01:05 AM by Tom Igoe -
August 02, 2011, at 09:18 AM by Davide Gomba -
Changed line 50 from:
to:
September 23, 2010, at 10:36 PM by Christian Cerrito -
Changed lines 3-4 from:

MIDI Note Player

to:

MIDI Note Player

September 16, 2010, at 10:15 PM by Tom Igoe -
Changed line 50 from:
to:
September 16, 2010, at 10:15 PM by Tom Igoe -
Changed line 50 from:
to:
September 16, 2010, at 02:25 AM by Christian Cerrito -
Changed lines 57-61 from:
to:
Deleted lines 59-60:
  • Serial Call and Response ASCII - send multiple vairables using a call-and-response (handshaking) method, and ASCII-encoding the values before sending.
  • If Statement - how to use an if statement to change output conditions based on changing input conditions.
Deleted lines 60-70:
  • Array: a variation on the For Loop example that demonstrates how to use an array.
  • While Loop: how to use a while loop to calibrate a sensor while a button is being read.
  • Switch Case: how to choose between a discrete number of values. Equivalent to multiple If statements. This example shows how to divide a sensor's range into a set of four bands and to take four different actions depending on which band the result is in.

See Also:

September 16, 2010, at 02:24 AM by Christian Cerrito -
Changed lines 52-77 from:
to:
September 16, 2010, at 02:06 AM by Christian Cerrito -
Changed line 19 from:
  • MIDI Connector
to:
  • (1) MIDI jack
Changed line 28 from:
  • digital in 1 connected to MIDI jack pin 5
to:
  • Arduino digital pin 1 connected to MIDI jack pin 5
September 16, 2010, at 02:05 AM by Christian Cerrito -
Changed lines 22-23 from:
  • MIDI enabled device "(optional, for testing)"
to:
  • MIDI enabled device (optional, for testing)
September 16, 2010, at 02:04 AM by Christian Cerrito -
Deleted line 8:
Deleted line 14:
Added lines 17-23:

Hardware Required

  • Arduino Board
  • MIDI Connector
  • (1) 220 ohm resistor
  • hook-up wire
  • MIDI enabled device "(optional, for testing)"
September 16, 2010, at 01:58 AM by Christian Cerrito -
Changed lines 17-18 from:

For more see this introduction to MIDI or this example.

to:

For more see this introduction to MIDI or this example.

September 16, 2010, at 01:56 AM by Christian Cerrito -
Changed line 45 from:
to:
February 23, 2010, at 08:14 PM by Tom Igoe -
Changed line 45 from:
to:
February 23, 2010, at 08:13 PM by Tom Igoe -
February 23, 2010, at 08:13 PM by Tom Igoe -
Changed line 45 from:
to:
February 23, 2010, at 08:12 PM by Tom Igoe -
Changed lines 45-50 from:
 /*
  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.
to:
Deleted lines 46-85:
  
  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 
  
  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 (intnote = 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.print(cmd, BYTE);
   Serial.print(pitch, BYTE);
   Serial.print(velocity, BYTE);
 }
August 27, 2009, at 08:57 PM by Tom Igoe -
Changed lines 32-34 from:
to:

image developed using Fritzing. For more circuit examples, see the Fritzing project page

July 05, 2009, at 07:44 PM by Tom Igoe -
Changed lines 41-44 from:

[@ /*

 MIDI note player
to:
Changed lines 50-53 from:
 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.
to:
  
  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.
Changed lines 57-65 from:
 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 
to:
  created 13 Jun 2006
  modified 2 Jul 2009
  by Tom Igoe 
  
  http://www.arduino.cc/en/Tutorial/MIDI
  
  */
Changed lines 65-68 from:
 http://www.arduino.cc/en/Tutorial/MIDI
to:
 void setup() {
   //  Set MIDI baud rate:
   Serial.begin(31250);
 }
Changed lines 70-98 from:
 */

void setup() {

  //  Set MIDI baud rate:
  Serial.begin(31250);

}

void loop() {

  // play notes from F#-0 (0x1E) to F#-5 (0x5A):
  for (intnote = 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.print(cmd, BYTE);
  Serial.print(pitch, BYTE);
  Serial.print(velocity, BYTE);

}

@]

to:
July 03, 2009, at 12:51 AM by Tom Igoe -
Added lines 5-6:

This tutorial shows how to play MIDI notes from an Arduino.

Changed lines 17-18 from:

For more see this introduction to MIDI or this example

to:

For more see this introduction to MIDI or this example.

Changed lines 27-29 from:

Attach a MIDI cable to the jack, then to a MIDI synth, and play music.

to:
July 03, 2009, at 12:50 AM by Tom Igoe -
Changed lines 5-16 from:

This tutorial on MIDI is still in progress. For more see http://itp.nyu.edu/physcomp/Labs/MIDIOutput

to:

MIDI, the Musical Instrument Digital Interface, is a useful protocol for controlling synthesizers, sequencers, and other musical devices. MIDI devices are generally grouped in to two broad classes: controllers (i.e. devices that generate MIDI signals based on human actions) and synthesizers (including samplers, sequencers, and so forth). The latter take MIDI data in and make sound, light, or some other effect.

MIDI is a serial protocol that operates at 31,250 bits per second. The Arduino's built-in serial port (all of them on the Mega as well) can send data at that rate.

MIDI bytes are divided into two types: command bytes and data bytes. Command bytes are always 128 or greater, or 0x80 to 0xFF in hexadecimal. Data bytes are always less than 127, or 0x00 to 0x7F in hex. Commands include things such as note on, note off, pitch bend, and so forth. Data bytes include things like the pitch of the note to play, the velocity, or loudness of the note, and amount of pitch bend, and so forth. For more details, see the MIDI specification, or one of the many MIDI Protocol Guides on the Web.

MIDI data is usually notated in hexadecimal because MIDI banks and instruments are grouped in groups of 16.

For more see this introduction to MIDI or this example

Changed lines 18-19 from:

An LED connected to pin 9. use appropriate resistor as needed. For most common LEDs, you can usually do without the resistor, as the current output of the digital I/O pins is limited.

to:

All MIDI connectors are female, by definition of the MIDI spec. Here's how to wire the connector to the Arduino:

  • 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.

July 03, 2009, at 12:30 AM by Tom Igoe -
Changed lines 5-6 from:

MIDI

to:

This tutorial on MIDI is still in progress. For more see http://itp.nyu.edu/physcomp/Labs/MIDIOutput

Changed line 42 from:
 http://www.arduino.cc/en/Tutorial/PIRSensor
to:
 http://www.arduino.cc/en/Tutorial/MIDI
July 03, 2009, at 12:29 AM by Tom Igoe -
Changed lines 25-26 from:
to:

/*

 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 

 http://www.arduino.cc/en/Tutorial/PIRSensor

 */

void setup() {

  //  Set MIDI baud rate:
  Serial.begin(31250);

}

void loop() {

  // play notes from F#-0 (0x1E) to F#-5 (0x5A):
  for (intnote = 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.print(cmd, BYTE);
  Serial.print(pitch, BYTE);
  Serial.print(velocity, BYTE);

}

Deleted lines 73-74:

Max code

July 03, 2009, at 12:15 AM by Tom Igoe -
Added lines 1-29:

Examples > Communication

MIDI Note Player

MIDI

Circuit

An LED connected to pin 9. use appropriate resistor as needed. For most common LEDs, you can usually do without the resistor, as the current output of the digital I/O pins is limited.

click the image to enlarge

Schematic

click the image to enlarge

Code




Max code

Share