Changes for WebMIDI compatibility on iOS
This commit is contained in:
parent
cc28afc024
commit
bc5b9ef931
|
@ -1,7 +1,8 @@
|
||||||
// prepare svg object for later use
|
// prepare svg object for later use
|
||||||
var keyboard = document.getElementById("piano");
|
var keyboard = document.getElementById("piano");
|
||||||
var svgDoc; // loaded keyboard svg
|
var svgDoc; // loaded keyboard svg
|
||||||
const keysB = [2,5,7,10,12,14,17,19,22,24,26,29,31,34,36,38,41,43,46,48,50,53,55,58,60,62,65,67,70,72,74,77,79,82,84,86]
|
var midiAccess = null;
|
||||||
|
const black_keys = [2,5,7,10,12,14,17,19,22,24,26,29,31,34,36,38,41,43,46,48,50,53,55,58,60,62,65,67,70,72,74,77,79,82,84,86]
|
||||||
|
|
||||||
window.addEventListener("load", function() {
|
window.addEventListener("load", function() {
|
||||||
svgDoc = keyboard.contentDocument;
|
svgDoc = keyboard.contentDocument;
|
||||||
|
@ -12,39 +13,72 @@ function setKeyState(note, state) {
|
||||||
let key = svgDoc.getElementById(String(note));
|
let key = svgDoc.getElementById(String(note));
|
||||||
if (state) {
|
if (state) {
|
||||||
key.style.fill = "red";
|
key.style.fill = "red";
|
||||||
} else if (keysB.includes(note)) {
|
} else if (black_keys.includes(note)) {
|
||||||
key.style.fill = "black";
|
key.style.fill = "black";
|
||||||
} else {
|
} else {
|
||||||
key.style.fill = "white";
|
key.style.fill = "white";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if browser supports MIDI
|
/**
|
||||||
if (!navigator.requestMIDIAccess) {
|
* Establishes MIDI connection
|
||||||
console.log('WebMIDI is not supported in this browser. Or Site was not opened via HTTPS');
|
*/
|
||||||
}
|
function midiSetup() {
|
||||||
|
// Check if MIDI connection is possible at all
|
||||||
// Attempt to establish a connection to the MIDI device
|
if (!navigator.requestMIDIAccess) {
|
||||||
navigator.requestMIDIAccess()
|
alert('WebMIDI is not supported in this browser. Or Site was not accessed via HTTPS');
|
||||||
.then(onMIDISuccess, onMIDIFailure);
|
return
|
||||||
|
|
||||||
function onMIDISuccess(midiAccess) {
|
|
||||||
console.log(midiAccess);
|
|
||||||
|
|
||||||
for (var input of midiAccess.inputs.values()) {
|
|
||||||
input.onmidimessage = getMIDIMessage;
|
|
||||||
}
|
}
|
||||||
|
// Attempt to establish a MIDI connection. Handle success or failure
|
||||||
|
console.log("1231234");
|
||||||
|
window.navigator.requestMIDIAccess().then(onMIDISuccess, onMIDIFailure);
|
||||||
|
console.log("4321321");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle successful MIDI connection
|
||||||
|
* @param {*} midiAccess
|
||||||
|
*/
|
||||||
|
function onMIDISuccess(access) {
|
||||||
|
midiAccess = access;
|
||||||
|
console.log("access successful");
|
||||||
|
|
||||||
|
var input_list = [];
|
||||||
|
|
||||||
|
var iter = midiAccess.inputs.values();
|
||||||
|
for (let obj = iter.next(); !obj.done; obj = iter.next()) {
|
||||||
|
input_list.push(obj.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add event listener do all devices
|
||||||
|
for (var i = 0; i < input_list.length; i++) {
|
||||||
|
input_list[i].onmidimessage = getMIDIMessage;
|
||||||
|
console.log("amogus");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle MIDI failure
|
||||||
|
*/
|
||||||
function onMIDIFailure() {
|
function onMIDIFailure() {
|
||||||
console.log('Could not access your MIDI devices.');
|
let message = "Failed to access your MIDI device";
|
||||||
|
console.log(message);
|
||||||
|
alert(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle incoming MIDI Messages
|
||||||
|
* @param {*} midiMessage
|
||||||
|
*/
|
||||||
function getMIDIMessage(midiMessage) {
|
function getMIDIMessage(midiMessage) {
|
||||||
|
console.log("sugoma");
|
||||||
var command = midiMessage.data[0];
|
var command = midiMessage.data[0];
|
||||||
var note = midiMessage.data[1] - 20; // sorry midi standard
|
var note = midiMessage.data[1] - 20; // sorry midi standard
|
||||||
var velocity = (midiMessage.data.length > 2) ? midiMessage.data[2] : 0;
|
var velocity = (midiMessage.data.length > 2) ? midiMessage.data[2] : 0;
|
||||||
|
|
||||||
|
console.log(`MIDI{ command : ${command}, note : ${note}, velocity : ${velocity}}`);
|
||||||
|
|
||||||
if (command == 144){
|
if (command == 144){
|
||||||
console.log(note);
|
console.log(note);
|
||||||
if (velocity == 0) {
|
if (velocity == 0) {
|
||||||
|
@ -55,4 +89,7 @@ function getMIDIMessage(midiMessage) {
|
||||||
task.changeKeyState(note,true);
|
task.changeKeyState(note,true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// code executed on include
|
||||||
|
window.onload = (x) => { midiSetup(); }
|
||||||
|
|
Loading…
Reference in a new issue