From 492819fc5fc5d0aea1d60a84a3226f04d3783f00 Mon Sep 17 00:00:00 2001 From: Michael Deal Date: Wed, 23 Jan 2013 00:39:05 -0800 Subject: [PATCH] remove midi bridge from repo --- README.md | 1 - inc/midibridge/README | 39 --- inc/midibridge/index.html | 83 ----- inc/midibridge/java/midiapplet.jar | Bin 14830 -> 0 bytes inc/midibridge/lib/MidiBridge.js | 502 ----------------------------- js/MIDI/Plugin.js | 92 ------ js/MIDI/loadPlugin.js | 6 - 7 files changed, 723 deletions(-) delete mode 100644 inc/midibridge/README delete mode 100644 inc/midibridge/index.html delete mode 100644 inc/midibridge/java/midiapplet.jar delete mode 100644 inc/midibridge/lib/MidiBridge.js diff --git a/README.md b/README.md index 766be1b..b31633b 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,6 @@ MIDI.Player.setAnimation(function(data) {

Many thanks to the authors of these libraries;

* <audio>: HTML5 specs * WebAudioAPI: W3C proposal by Google -* Java package: MIDIBridge by Daniel van der Meer. Supports MIDI keyboard, and 128 General MIDI instruments. * Flash package: SoundManager2 by Scott Schiller * jasmid: Reads MIDI file byte-code, and translats into a Javascript array. * base642binary.js: Cleans up XML base64-requests for Web Audio API. \ No newline at end of file diff --git a/inc/midibridge/README b/inc/midibridge/README deleted file mode 100644 index 7a71651..0000000 --- a/inc/midibridge/README +++ /dev/null @@ -1,39 +0,0 @@ -The midibridge is a Javascript API for interacting with the midi devices on your computer. - -It provides methods for detecting the midi devices and for connecting these devices with each other. - -The midibridge itself is considered a midi device as well, so it can be connected to the detected devices. - -The midibridge can generate and send midi events to midi output devices, and receive midi events from midi input devices. - -The midibridge can also filter and alter midi events. - -Recording and playing back midi events with a sequencer will be added in later versions. - -A midi output device is a physical output port on your computer, a virtual output port or a software synthesizer. It can also be a sequencer, a file or a function. - -A midi input device is a physical or virtual input port, a sequencer, a file or a function. - -A midi device can be both in- and output. The midibridge itself for instance is both in- and output because it can send and receive midi events. - -The actual interaction with the midi devices on your computer is done by a Java applet. The midibridge automatically adds the applet to your webpage. - -The midibridge has no visual parts, it is 'headless' code. You could say the midibridge enables you to write a 'front-end' on top of the applet. - -Midi Devices -> Java Applet -> Javascript Midibridge API -> a GUI in Javascript, Flash, SVG, C# (Silverlight) - -Because the midibridge is written in native Javascript, you can use it conflict-free with any Javascript framework. - - -The only files you need to get started are: - -/lib/midibridge-0.5.1.min.js -/java/midiapplet.jar - - -/lib/MidiBridge.js is the non-minified version of /lib/midibridge-0.5.1.min.js - -The other files and notably the files in the /js folder are code snippets that i have used in the quick start guide and the documentation on my blogpost, see: - -http://www.abumarkub.net/abublog/?p=399 - diff --git a/inc/midibridge/index.html b/inc/midibridge/index.html deleted file mode 100644 index 0808ae1..0000000 --- a/inc/midibridge/index.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/inc/midibridge/java/midiapplet.jar b/inc/midibridge/java/midiapplet.jar deleted file mode 100644 index ea4e6e971b51dd6b76d313cecc81a747b6fd07d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14830 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 diff --git a/inc/midibridge/lib/MidiBridge.js b/inc/midibridge/lib/MidiBridge.js deleted file mode 100644 index fe9f8e2..0000000 --- a/inc/midibridge/lib/MidiBridge.js +++ /dev/null @@ -1,502 +0,0 @@ -/** - * This version is supported by all browsers that support native JSON parsing: - * - Firefox 3.5+ - * - Chrome 4.0+ - * - Safari 4.0+ - * - Opera 10.5+ - * - Internet Explorer 8.0+ - * - * If you want this version to work with other browsers, you can use the JSON parsing methods of your favorite Javascript - * framework (e.g. jQuery, Dojo, YUI, Mootools, etc.) - * - * Note for IE8 users: if you include MidiBridge.js (or preferably the minified version of it: midibridge-0.5.min.js) in your html, - * the method addEventListener will be added to the window object. In fact this method is just a wrapper around the attachEvent method, - * see code at the bottom of this file. - */ - -(function() { - var midiBridge = { - NOTE_OFF : 0x80, //128 - NOTE_ON : 0x90, //144 - POLY_PRESSURE : 0xA0, //160 - CONTROL_CHANGE : 0xB0, //176 - PROGRAM_CHANGE : 0xC0, //192 - CHANNEL_PRESSURE : 0xD0, //208 - PITCH_BEND : 0xE0, //224 - SYSTEM_EXCLUSIVE : 0xF0, //240 - NOTE_NAMES_SHARP : "sharp", - NOTE_NAMES_FLAT : "flat", - NOTE_NAMES_SOUNDFONT : "soundfont", - NOTE_NAMES_ENHARMONIC_SHARP : "enh-sharp", - NOTE_NAMES_ENHARMONIC_FLAT : "enh-flat" - - }; - //human readable representation of status byte midi data - var status = []; - status[0x80] = "NOTE OFF"; - status[0x90] = "NOTE ON"; - status[0xA0] = "POLY PRESSURE"; - status[0xB0] = "CONTROL CHANGE"; - status[0xC0] = "PROGRAM CHANGE"; - status[0xD0] = "CHANNEL PRESSURE"; - status[0xE0] = "PITCH BEND"; - status[0xF0] = "SYSTEM EXCLUSIVE"; - //notenames in different modi - var noteNames = { - "sharp" : ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"], - "flat" : ["C", "Dâ™­", "D", "Eâ™­", "E", "F", "Gâ™­", "G", "Aâ™­", "A", "Bâ™­", "B"], - "soundfont" : ["C", "Db", "D", "Eb", "E", "F", "Gb", "G", "Ab", "A", "Bb", "B"], - "enh-sharp" : ["B#", "C#", "C##", "D#", "D##", "E#", "F#", "F##", "G#", "G##", "A#", "A##"], - "enh-flat" : ["Dâ™­â™­", "Dâ™­", "Eâ™­â™­", "Eâ™­", "Fâ™­", "Gâ™­â™­", "Gâ™­", "Aâ™­â™­", "Aâ™­", "Bâ™­", "Bâ™­", "Câ™­"] - } - //variable that holds a reference to the JSON parser method of your liking, defaults to native JSON parsing - var parseJSON = JSON.parse; - //method that gets called when midi note events arrive from the applet - var ondata = null; - var onerror = null; - var onready = null; - //the applet object - var applet = null; - var connectAllInputs = false; - var connectFirstInput = false; - var connectFirstOutput = false; - var connectAllInputsToFirstOutput = true; - var javaDir = "java"; - var devices = {}; - midiBridge.version = "0.5.1"; - midiBridge.ready = false; - midiBridge.noteNameModus = midiBridge.NOTE_NAMES_SHARP; - - /** - * static method called to initialize the MidiBridge - * possible arguments: - * 1) callback [function] callback when midi data has arrived - * 2) config object - * - ready : [function] callback when midibridge is ready/initialized - * - error : [function] callback in case of an error - * - data : [function] callback when midi data has arrived - * - connectAllInputs : [true,false] all found midi input devices get connected automatically - * - connectFirstInput : [true,false] the first found midi input device gets connected automatically - * - connectFirstOutput : [true,false] the first found midi output device gets connected automatically - * - connectAllInputsToFirstOutput : [true,false] all found midi input devices will be automatically connected to the first found midi output device - * - javaDir : [string] the folder where you store the midiapplet.jar on your webserver, defaults to "java" - */ - midiBridge.init = function(arg) { - - //var args = Array.prototype.slice.call(arguments); - if( typeof arg === "function") { - ondata = arg; - } else if( typeof arg === "object") { - var config = arg; - connectAllInputs = config.connectAllInputs; - connectFirstInput = config.connectFirstInput; - connectFirstOutput = config.connectFirstOutput; - connectAllInputsToFirstOutput = config.connectAllInputsToFirstOutput; - ondata = config.data; - onready = config.ready; - onerror = config.error; - switch(true) { - case connectAllInputs && connectFirstOutput: - connectAllInputs = false; - connectFirstInput = false; - connectFirstOutput = false; - connectAllInputsToFirstOutput = true; - break; - case connectAllInputsToFirstOutput: - connectAllInputs = false; - connectFirstInput = false; - connectFirstInput = false; - connectFirstOutput = false; - break; - case connectFirstInput: - connectAllInputs = false; - connectAllInputsToFirstOutput = false; - break; - case connectFirstOutput: - connectAllInputs = false; - connectAllInputsToFirstOutput = false; - break; - case connectAllInputs: - connectFirstInput = false; - connectFirstOutput = false; - connectAllInputsToFirstOutput = false; - break; - } - } - - /** - * Very simple java plugin detection - */ - if(!navigator.javaEnabled()) { - if(onerror) { - onerror("no java plugin found; install or enable the java plugin") - } else { - console.log("no java plugin found; install or enable the java plugin"); - } - return; - } - - /** - * If you are using the JSON parse method of your favorite Javascript framework replace the followingn lines by onlu: - * - * loadJava(); - */ - - loadJava(); - - }; - - /** - * static method called by the applet - */ - midiBridge.msgFromJava = function(jsonString) { - var data = parseJSON(jsonString); - var msgId = data.msgId; - //console.log(jsonString); - //console.log(msgId); - switch(msgId) { - case "upgrade-java": - if(onerror) { - onerror("please upgrade your java plugin!") - } else { - console.log("please upgrade your java plugin!"); - } - break; - case "midi-started": - getApplet(); - if(applet) { - devices = data.devices; - midiBridge.ready = true; - if(connectAllInputs) { - midiBridge.connectAllInputs(); - } - if(connectFirstInput) { - midiBridge.connectFirstInput(); - } - if(connectFirstOutput) { - midiBridge.connectFirstOutput(); - } - if(connectAllInputsToFirstOutput) { - midiBridge.connectAllInputsToFirstOutput(); - } - if(onready) { - onready("midibridge started"); - } - } - //console.log("applet:",applet); - break; - case "midi-data": - if(ondata) { - ondata(new MidiMessage(data)); - } - break; - case "error": - if(onerror) { - onerror(data.code); - } - break; - } - }; - - /** - * Send a midi event from javascript to java - * @param status : the midi status byte, e.g. NOTE ON, NOTE OFF, PITCH BEND and so on - * @param channel : the midi channel that this event will be sent to 0 - 15 - * @param data1 : the midi note number - * @param data2 : the second data byte, when the status byte is NOTE ON or NOTE OFF, data2 is the velocity - */ - midiBridge.sendMidiEvent = function(status, channel, data1, data2) { - if(checkIfReady()) { - return parseJSON(applet.processMidiEvent(status, channel, data1, data2)); - } - }; - - /** - * Get the list of all currently connected midi devices - */ - midiBridge.getDevices = function() { - return devices; - }; - - /** - * Refresh the list of all currently connected midi devices - */ - midiBridge.refreshDevices = function() { - if(checkIfReady()) { - return parseJSON(applet.getDevices()); - } - }; - - /** - * Connect all found midi inputs to the midibridge right after the midibridge has been initialized - */ - midiBridge.connectAllInputs = function() { - if(checkIfReady()) { - return parseJSON(applet.connectAllInputs()); - } - }; - - /** - * Connect the first found midi input to the midibridge right after the midibridge has been initialized - */ - midiBridge.connectFirstInput = function() { - if(checkIfReady()) { - return parseJSON(applet.connectFirstInput()); - } - }; - - /** - * Connect the first found midi output to the midibridge right after the midibridge has been initialized - */ - midiBridge.connectFirstOutput = function() { - if(checkIfReady()) { - return parseJSON(applet.connectFirstOutput()); - } - }; - - /** - * Connect the first found midi output to all connected midi inputs right after the midibridge has been initialized - */ - midiBridge.connectAllInputsToFirstOutput = function() { - if(checkIfReady()) { - return parseJSON(applet.connectAllInputsToFirstOutput()); - } - }; - - /** - * Connect midi a midi input to the bridge, and/or a midi input to a midi output - * @param midiInId : [int] id of the midi input that will be connected to the bridge, use the ids as retrieved by getDevices() - * @param midiOutId : [int] optional, the id of the midi output that will be connected to the chosen midi input - * @param filter : [array] an array containing status codes that will *not* be sent from the chosen midi input to the chosen midi output - * e.g. if you supply the array [midiBridge.PITCH_BEND, midiBridge.POLY_PRESSURE], pitch bend and poly pressure midi messages will not be forwarded to the output - */ - midiBridge.addConnection = function(midiInId, midiOutId, filter) { - if(checkIfReady()) { - midiOutId = midiOutId == undefined ? -1 : midiOutId; - filter = filter == undefined ? [] : filter; - return parseJSON(applet.addConnection(midiInId, midiOutId, filter)); - } - }; - - /** - * Remove a midi connection between between an input and the midibridge, and/or the given in- and output - * @param midiIdIn : [int] the midi input - * @param midiIdOut : [int] optional, the midi output - */ - midiBridge.removeConnection = function(midiInId, midiOutId) { - if(checkIfReady()) { - return parseJSON(applet.removeConnection(midiInId, midiOutId)); - } - }; - - /** - * All previously setup midi connections will be disconnected - */ - midiBridge.disconnectAll = function() { - if(checkIfReady()) { - return parseJSON(applet.disconnectAll()); - } - }; - - midiBridge.loadBase64String = function(data){ - return parseJSON(applet.loadBase64String(data)); - } - - midiBridge.playBase64String = function(data){ - return parseJSON(applet.playBase64String(data)); - } - - midiBridge.loadMidiFile = function(url){ - return parseJSON(applet.loadMidiFile(url)); - } - - midiBridge.playMidiFile = function(url){ - return parseJSON(applet.playMidiFile(url)); - } - - midiBridge.startSequencer = function(){ - applet.startSequencer(); - } - - midiBridge.pauseSequencer = function(){ - applet.pauseSequencer(); - } - - midiBridge.stopSequencer = function(){ - applet.stopSequencer(); - } - - midiBridge.closeSequencer = function(){ - applet.closeSequencer(); - } - - midiBridge.getSequencerPosition = function(){ - return applet.getSequencerPosition(); - } - - midiBridge.setSequencerPosition = function(pos){ - applet.setSequencerPosition(pos); - } - - /** - * Check if a midiBridge function is called before initialization - */ - function checkIfReady() { - if(!midiBridge.ready) { - if(onerror) { - onerror("midibridge not ready!"); - } - return "midibridge not ready!"; - } - return true; - } - - /** - * A div with the applet object is added to the body of your html document - */ - function loadJava() { - //console.log("loadJava"); - var javaDiv = document.createElement("div"); - javaDiv.setAttribute("id", "midibridge-java"); - var html = ""; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; - //html += 'Your browser needs the Java plugin to use the midibridge. You can download it here'; - html += ''; - javaDiv.innerHTML = html; - document.body.appendChild(javaDiv); - } - - /** - * class MidiMessage is used to wrap the midi note data that arrives from the applet - */ - var MidiMessage = (function()//constructor - { - var _constructor = function(data) { - this.data1 = data.data1; - this.data2 = data.data2; - this.status = data.status; - this.status = this.data2 == 0 && this.status == midiBridge.NOTE_ON ? midiBridge.NOTE_OFF : this.status; - this.channel = data.channel; - this.noteName = midiBridge.getNoteName(this.data1, midiBridge.noteNameModus); - this.statusCode = midiBridge.getStatus(this.status); - this.microsecond = data.microsecond; - this.time = midiBridge.getNiceTime(this.microsecond); - }; - - _constructor.prototype = { - toString : function() { - var s = ""; - s += this.noteName + " " + this.statusCode + " " + this.data1 + " " + this.data2 + " " + this.status; - s += this.microsecond ? this.microsecond + " " + this.time : ""; - //console.log(s); - return s; - }, - toJSONString : function() { - var s; - if(this.microsecond){ - s= "{'notename':" + this.noteName + ", 'status':" + this.status + ", 'data1':" + this.data1 + ", 'data2':" + this.data2 + ", 'microsecond':" + this.microsecond + ", 'time':" + this.time + "}"; - }else{ - s= "{'notename':" + this.noteName + ", 'status':" + this.status + ", 'data1':" + this.data1 + ", 'data2':" + this.data2 + "}"; - } - //console.log(s); - return s; - } - } - - return _constructor; - })(); - - - midiBridge.getNoteName = function(noteNumber, mode) { - - var octave = Math.floor(((noteNumber) / 12) - 1); - var noteName = noteNames[mode][noteNumber % 12]; - return noteName + "" + octave; - }; - - - midiBridge.getNoteNumber = function(noteName, octave) { - var index = -1; - noteName = noteName.toUpperCase(); - for(var key in noteNames) { - var modus = noteNames[key]; - for(var i = 0, max = modus.length; i < max; i++) { - if(modus[i] === noteName) { - index = i; - break; - } - } - } - if(index === -1) { - return "invalid note name"; - } - noteNumber = (12 + index) + (octave * 12); - return noteNumber; - } - - - midiBridge.getStatus = function($statusCode) { - return status[$statusCode]; - }; - - midiBridge.getNiceTime = function(microseconds) - { - //console.log(microseconds); - var r = ""; - - var t = (microseconds / 1000 / 1000) >> 0; - var h = (t / (60 * 60)) >> 0; - var m = ((t % (60 * 60)) / 60) >> 0; - var s = t % (60); - var ms = (((microseconds /1000) - (h * 3600000) - (m * 60000) - (s * 1000)) + 0.5) >> 0; - - //console.log(t,h,m,s,ms); - - r += h > 0 ? h + ":" : ""; - r += h > 0 ? m < 10 ? "0" + m : m : m; - r += ":"; - r += s < 10 ? "0" + s : s; - r += ":"; - r += ms == 0 ? "000" : ms < 10 ? "00" + ms : ms < 100 ? "0" + ms : ms; - - return r; - } - - - function getApplet() { - try { - applet = midiBridge.getObject("midibridge-applet"); - } catch(e) { - //console.log(e) - //Firefox needs more time to initialize the Applet - setTimeout(getApplet, 25); - return; - } - } - - midiBridge.getObject = function(objectName) { - var ua = navigator.userAgent.toLowerCase(); - //console.log(ua); - if(ua.indexOf("msie") !== -1 || ua.indexOf("webkit") !== -1) { - return window[objectName]; - } else { - return document[objectName]; - } - } - - //add addEventListener to IE8 - if(!window.addEventListener) { - window.addEventListener = function($id, $callback, $bubble) { - window.attachEvent('onload', $callback); - } - - } - - window.midiBridge = midiBridge; - -})(window); \ No newline at end of file diff --git a/js/MIDI/Plugin.js b/js/MIDI/Plugin.js index 76a9f92..f44db87 100644 --- a/js/MIDI/Plugin.js +++ b/js/MIDI/Plugin.js @@ -371,98 +371,6 @@ if (window.Audio) (function () { }; })(); -/* - -------------------------------------------- - Java - Native Soundbank - -------------------------------------------- - https://github.com/abudaan/midibridge-js - http://java.sun.com/products/java-media/sound/soundbanks.html - -------------------------------------------- -*/ - -(function () { - var root = MIDI.Java = {}; - root.connect = function (callback) { - // deferred loading of - MIDI.Plugin = false; - if (!window.navigator.javaEnabled()) { - MIDI.Flash.connect(callback); - return; - } - MIDI.Java.callback = callback; - var iframe = document.createElement('iframe'); - iframe.name = 'MIDIFrame'; - iframe.src = 'inc/midibridge/index.html'; - iframe.width = 1; - iframe.height = 1; - document.body.appendChild(iframe); - }; - - root.confirm = function (plugin) { - - MIDI.programChange = function (channel, program) { - plugin.sendMidiEvent(0xC0, channel, program, 0); - }; - - MIDI.setVolume = function (n) { - - }; - - MIDI.noteOn = function (channel, note, velocity, delay) { - if (delay) { - var interval = window.setTimeout(function() { - plugin.sendMidiEvent(0x90, channel, note, velocity); - }, delay * 1000); - return interval; - } else { - plugin.sendMidiEvent(0x90, channel, note, velocity); - } - }; - - MIDI.noteOff = function (channel, note, delay) { - if (delay) { - var interval = window.setTimeout(function() { - plugin.sendMidiEvent(0x80, channel, note, 0); - }, delay * 1000); - return interval; - } else { - plugin.sendMidiEvent(0x80, channel, note, 0); - } - }; - - MIDI.chordOn = function (channel, chord, velocity, delay) { - for (var key in chord) { - var n = chord[key]; - plugin.sendMidiEvent(0x90, channel, n, 100); - } - }; - - MIDI.chordOff = function (channel, chord, delay) { - for (var key in chord) { - var n = chord[key]; - plugin.sendMidiEvent(0x80, channel, n, 100); - } - }; - - MIDI.stopAllNotes = function () { - - }; - - MIDI.getInstruments = function() { - return []; - }; - - if (plugin.ready) { - MIDI.lang = "Java"; - if (MIDI.Java.callback) { - MIDI.Java.callback(); - } - } else { - MIDI.Flash.connect(MIDI.Java.callback); - } - }; -})(); - /* helper functions */ diff --git a/js/MIDI/loadPlugin.js b/js/MIDI/loadPlugin.js index 9dc05ed..8c6194f 100644 --- a/js/MIDI/loadPlugin.js +++ b/js/MIDI/loadPlugin.js @@ -62,12 +62,6 @@ MIDI.loadPlugin = function(conf) { var connect = {}; -connect.java = function(filetype, instruments, callback) { - // works well cross-browser, and fully featured, but has delay when Java machine starts. - if (MIDI.loader) MIDI.loader.message("Java API..."); - MIDI.Java.connect(callback); -}; - connect.flash = function(filetype, instruments, callback) { // fairly quick, but requires loading of individual MP3s (more http requests). if (MIDI.loader) MIDI.loader.message("Flash API...");