From 53c40f3cf3f57c5e460041eaa05d58ff2456035a Mon Sep 17 00:00:00 2001 From: Michael Deal Date: Tue, 22 Jan 2013 16:23:40 -0800 Subject: [PATCH] add demos and more code examples to README --- README.md | 73 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 58 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 570cd4f..8bc8430 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,55 @@ +CODE EXAMPLES (from the repo) + +* ./demo-Basic.html is the most basic implementation as seen here: +
+	MIDI.loadPlugin({
+		soundfontUrl: "./soundfont/", // path to soundfont directory
+		instruments: [ "acoustic_grand_piano", "synth_drum" ], // multiple instruments
+		callback: function() {
+			MIDI.programChange(0, 0); // change channel 0 to instrument 0 (acoustic_grand_piano)
+			MIDI.programChange(1, 118); // change channel 1 to instrument 118 (synth_drum)
+			for (var n = 0; n < 100; n ++) {
+				var delay = n / 4; // play one note every quarter second
+				var note = MIDI.pianoKeyOffset + n; // the MIDI note
+				var velocity = 127; // how hard the note hits
+				// play the note
+				MIDI.noteOn(0, note, velocity, delay);
+				// play the some note 3-steps up
+				MIDI.noteOn(1, note + 3, velocity, delay);
+			}		
+		}
+	});
+
+* ./demo-MIDIPlayer.html shows how to parse MIDI files, and interact with the data stream. +* ./demo-WhitneyMusicBox.html is a audio/visual experiment by Jim Bumgardner + +------------- + +DEMOS + +* Euphony 3D Piano +* Simon Says +* Brite Lite +* Color Piano + +------------- + +SOUNDFONT GENERATORS (*not* required to get started!) + +* Ruby +* Shell + +------------- + * MIDI.loadPlugin.js: Decides which framework is best to use, and sends request.
 // interface to download soundfont, then execute callback;
 MIDI.loadPlugin(callback);
 // simple example to get started;
 MIDI.loadPlugin({
-	instrument: "acoustic_grand_piano", // or 1 (default)
-	instruments: [ "acoustic_grand_piano", "acoustic_guitar_nylon" ], // or multiple instruments
-	callback: function() { }
+    instrument: "acoustic_grand_piano", // or 1 (default)
+    instruments: [ "acoustic_grand_piano", "acoustic_guitar_nylon" ], // or multiple instruments
+    callback: function() { }
 });
 
@@ -21,7 +64,7 @@ MIDI.keyToNote = object; // A0 => 21 MIDI.noteToKey = object; // 21 => A0 * MIDI.Player.js: Streams the MIDI to the browser. -
+
 MIDI.Player.currentTime = integer; // time we are at now within the song.
 MIDI.Player.endTime = integer; // time when song ends.
 MIDI.Player.playing = boolean; // are we playing? yes or no.
@@ -33,21 +76,21 @@ MIDI.Player.stop(); // stops all audio being played, and resets currentTime to 0
 Callback whenever a note is played;
 MIDI.Player.removeListener(); // removes current listener.
 MIDI.Player.addListener(function(data) { // set it to your own function!
-	var now = data.now; // where we are now
-	var end = data.end; // time when song ends
-	var channel = data.channel; // channel note is playing on
-	var message = data.message; // 128 is noteOff, 144 is noteOn
-	var note = data.note; // the note
-	var velocity = data.velocity; // the velocity of the note
-	// then do whatever you want with the information!
+    var now = data.now; // where we are now
+    var end = data.end; // time when song ends
+    var channel = data.channel; // channel note is playing on
+    var message = data.message; // 128 is noteOff, 144 is noteOn
+    var note = data.note; // the note
+    var velocity = data.velocity; // the velocity of the note
+    // then do whatever you want with the information!
 });
 Smooth animation, interpolates between onMidiEvent calls;
 MIDI.Player.clearAnimation(); // clears current animation.
 MIDI.Player.setAnimation(function(data) {
-	var now = data.now; // where we are now
-	var end = data.end; // time when song ends
-	var events = data.events; // all the notes currently being processed
-	// then do what you want with the information!
+    var now = data.now; // where we are now
+    var end = data.end; // time when song ends
+    var events = data.events; // all the notes currently being processed
+    // then do what you want with the information!
 });
* Color.js: Color conversions, music isn’t complete without!