<!DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>Music Note or Scale Player and Composer - RJM Programming - May, 2015</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style>
sub {
padding-left: 3px;
padding-right: 3px;
color: blue;
text-decoration: underline overline;
background-color: #f0f0f0;
}
.crotchet {
opacity: 0.5;
}
.singleright {
text-decoration: underline;
cursor: crosshair;
}
.cmeter {
-ms-transform: rotate(0deg); /* IE 9 */
-webkit-transform: rotate(0deg); /* Chrome, Safari, Opera */
transform: rotate(0deg);
}
#myxtbody {
position: absolute;
left: 0px;
top: 0px;
z-index: 2;
align: top;
-ms-transform: rotate(-90deg); /* IE 9 */
-webkit-transform: rotate(-90deg); /* Chrome, Safari, Opera */
transform: rotate(-90deg);
margin-top: -800px;
margin-left: 850px;
opacity: 1.0;
background-color: white;
}
#myxtd2 {
float: right;
}
#myxh1right {
margin-top: 200px;
}
</style>
<script type='text/javascript'>
var hit=1;
var azzgoon=true;
try {
if (parent.document.title != document.title) {
azzgoon=false;
hit=0;
}
} catch (awzerrr) {
}
var lhdone=false;
var lh='';
var kqueue=[], ikqueue=-1;
var eioisaltKey=false;
var eioisctrlKey=false;
var okn='';
var songmode=0;
var askmode=0;
var nonred=-1;
var composingform='';
var lastsong='';
var globvar=0;
var startnote;
var stuff="";
var showr=false;
var allhis="";
var thism=1;
var prevtr=-1;
var pinnote=-1;
var delay=0;
var lastn=-1;
var sm="";
var maxfactor=1.0;
var nextc=[];
var inextc=0;
var lastpar3=0;
var barr=['piano/A0.mp3','piano/Bb0.mp3','piano/B0.mp3',
'piano/C1.mp3','piano/Db1.mp3','piano/D1.mp3','piano/Eb1.mp3','piano/E1.mp3','piano/F1.mp3','piano/Gb1.mp3','piano/G1.mp3','piano/Ab1.mp3','piano/A1.mp3','piano/Bb1.mp3','piano/B1.mp3',
'piano/C2.mp3','piano/Db2.mp3','piano/D2.mp3','piano/Eb2.mp3','piano/E2.mp3','piano/F2.mp3','piano/Gb2.mp3','piano/G2.mp3','piano/Ab2.mp3','piano/A2.mp3','piano/Bb2.mp3','piano/B2.mp3',
'piano/C3.mp3','piano/Db3.mp3','piano/D3.mp3','piano/Eb3.mp3','piano/E3.mp3','piano/F3.mp3','piano/Gb3.mp3','piano/G3.mp3','piano/Ab3.mp3','piano/A3.mp3','piano/Bb3.mp3','piano/B3.mp3',
'piano/C4.mp3','piano/Db4.mp3','piano/D4.mp3','piano/Eb4.mp3','piano/E4.mp3','piano/F4.mp3','piano/Gb4.mp3','piano/G4.mp3','piano/Ab4.mp3','piano/A4.mp3','piano/Bb4.mp3','piano/B4.mp3',
'piano/C5.mp3','piano/Db5.mp3','piano/D5.mp3','piano/Eb5.mp3','piano/E5.mp3','piano/F5.mp3','piano/Gb5.mp3','piano/G5.mp3','piano/Ab5.mp3','piano/A5.mp3','piano/Bb5.mp3','piano/B5.mp3',
'piano/C6.mp3','piano/Db6.mp3','piano/D6.mp3','piano/Eb6.mp3','piano/E6.mp3','piano/F6.mp3','piano/Gb6.mp3','piano/G6.mp3','piano/Ab6.mp3','piano/A6.mp3','piano/Bb6.mp3','piano/B6.mp3',
'piano/C7.mp3','piano/Db7.mp3','piano/D7.mp3','piano/Eb7.mp3','piano/E7.mp3','piano/F7.mp3','piano/Gb7.mp3','piano/G7.mp3','piano/Ab7.mp3','piano/A7.mp3','piano/Bb7.mp3','piano/B7.mp3',
'piano/C8.mp3','piano/Db8.mp3'];
var nsuffix='';
var pchosen='';
var fifty="50";
var one_twenty_seven="127";
var nlength="0.75";
var tasimh='';
function noteworth(notenum) {
factor = eval((document.getElementById('speed').value * Math.abs(notenum)) / maxfactor);
return factor;
}
function abscissacheck(whatsm) {
// slowby4,51,-0.5,53,-0.5,51,-0.5,46,-0.5,51,-3.0,51,-0.5,53,-0.5,51,-0.5,53,-0.5,56,-0.5,53,-0.5,51,-0.5,53,-0.5,51,-0.5,46,-0.5,49,-3.0,61,-1.0,60,-0.5,56,-0.5,53,-1.0,51,-0.5,53,-0.5,51,-0.5,46,-0.5,51,-3.0,51,-0.5,53,-0.5,51,-0.5,53,-0.5,56,-0.5,53,-0.5,51,-0.5,53,-0.5,51,-0.5,46,-0.5,49,-3.0
var iout="", zdelim="", jou=0, jout="", kout="", newchordnote=0, xz="";
var xmididata=whatsm.split(',');
var atend=eval(-2 + xmididata.length);
var usual=true;
var ioffs=0;
var xzsuff='';
var xzpref='';
var subhuhs=[];
var isubj=0;
var jusubj=0;
var numc='';
showr=false;
if (xmididata[0].substring(0,1) >= 'A') {
ioffs=1;
kout=xmididata[0] + ",";
}
for (var iu=atend; iu>=ioffs; iu-=2) {
jout=iout;
if (jout != "") { zdelim=","; }
usual=true;
if (("" + xmididata[iu]).indexOf('.') != -1) { // an abscissa chord scenario
for (jou=0; jou<xmididata[iu].split('.')[1].length; jou+=3) {
if (xmididata[iu].indexOf(';') != -1) {
xzsuff=';' + xmididata[iu].split(';')[1].split('.')[0];
xmididata[iu]=xmididata[iu].replace(xzsuff,'');
subhuhs=xzsuff.substring(1).split(' ');
if (eval('' + subhuhs.length) == 1) { subhuhs=xzsuff.substring(1).split(','); }
if (eval('' + subhuhs.length) == 1) { subhuhs=xzsuff.substring(1).split('.'); }
for (isubj=0; isubj<subhuhs.length; isubj++) {
numc='';
for (jsubj = ('A').charCodeAt(0); jsubj <= ('Z').charCodeAt(0); jsubj++) {
while (subhuhs[isubj].indexOf(String.fromCharCode(jsubj)) != -1) {
if (('' + numc) == '') { numc=0; }
subhuhs[isubj]=subhuhs[isubj].replace(String.fromCharCode(jsubj), '' + eval(10 + eval(jsubj - ('A').charCodeAt(0)))); //numc+=eval(10 + eval(jsubj - ('A').charAt(0)));
}
}
for (jsubj = ('a').charCodeAt(0); jsubj <= ('z').charCodeAt(0); jsubj++) {
while (subhuhs[isubj].indexOf(String.fromCharCode(jsubj)) != -1) {
if (('' + numc) == '') { numc=0; }
subhuhs[isubj]=subhuhs[isubj].replace(String.fromCharCode(jsubj), '' + eval(10 + eval(jsubj - ('a').charCodeAt(0)))); //numc+=eval(10 + eval(jsubj - ('A').charAt(0)));
}
}
if (('' + numc) != '') { numc='' + subhuhs[isubj]; subhuhs[isubj]='' + numc; }
xzpref+='' + eval(eval('' + subhuhs[isubj]) + eval('' + xmididata[iu])) + ',-0.01,';
console.log('xzpref=' + xzpref);
}
xzsuff='';
}
xz=xmididata[iu].split('.')[1].substring(jou, eval(3 + jou))
if (xz.substring(0,1) == "0") {
newchordnote=eval('' + xz.substring(1));
if (usual) { iout=xmididata[iu].split('.')[0] + "," + xmididata[eval(1 + eval('' + iu))] + zdelim + jout; zdelim=","; jout=iout; }
usual=false;
} else {
newchordnote=eval('' + xz);
if (usual) { iout=xmididata[iu].split('.')[0] + "," + xmididata[eval(1 + eval('' + iu))] + zdelim + jout; zdelim=","; jout=iout; }
usual=false;
}
showr=true;
iout=xzpref + newchordnote + xzsuff + "," + "-0.1" + zdelim + jout;
jout=iout;
xzsuff='';
xzpref='';
zdelim=",";
//alert('' + newchordnote);
}
if (usual) { iout=xmididata[iu].split('.')[0] + "," + xmididata[eval(1 + eval('' + iu))] + zdelim + jout; }
} else {
if (xmididata[iu].indexOf(';') != -1) {
xzsuff=';' + xmididata[iu].split(';')[1].split('.')[0];
xmididata[iu]=xmididata[iu].replace(xzsuff,'');
subhuhs=xzsuff.substring(1).split(' ');
if (eval('' + subhuhs.length) == 1) { subhuhs=xzsuff.substring(1).split(','); }
if (eval('' + subhuhs.length) == 1) { subhuhs=xzsuff.substring(1).split('.'); }
for (isubj=0; isubj<subhuhs.length; isubj++) {
numc='';
for (jsubj = ('A').charCodeAt(0); jsubj <= ('Z').charCodeAt(0); jsubj++) {
while (subhuhs[isubj].indexOf(String.fromCharCode(jsubj)) != -1) {
if (('' + numc) == '') { numc=0; }
subhuhs[isubj]=subhuhs[isubj].replace(String.fromCharCode(jsubj), '' + eval(10 + eval(jsubj - ('A').charCodeAt(0)))); //numc+=eval(10 + eval(jsubj - ('A').charAt(0)));
}
}
for (jsubj = ('a').charCodeAt(0); jsubj <= ('z').charCodeAt(0); jsubj++) {
while (subhuhs[isubj].indexOf(String.fromCharCode(jsubj)) != -1) {
if (('' + numc) == '') { numc=0; }
subhuhs[isubj]=subhuhs[isubj].replace(String.fromCharCode(jsubj), '' + eval(10 + eval(jsubj - ('a').charCodeAt(0)))); //numc+=eval(10 + eval(jsubj - ('A').charAt(0)));
}
}
if (('' + numc) != '') { numc='' + subhuhs[isubj]; subhuhs[isubj]='' + numc; }
xzpref+='' + eval(eval('' + subhuhs[isubj]) + eval('' + xmididata[iu])) + ',-0.01,';
console.log('xzpref=' + xzpref);
}
xzsuff='';
}
iout=xzpref + xmididata[iu] + xzsuff + "," + xmididata[eval(1 + eval('' + iu))] + zdelim + jout;
xzsuff='';
xzpref='';
}
}
jout=iout;
if (kout != "") { iout=kout + jout; }
showr=false;
if (showr) { alert(iout.slice(-100)); }
return iout;
}
function insong(sheetmusic) { // assumes comma separators
if (sheetmusic != "") {
// add a suffix of + if two hands are playing together
// normal word is a speed descriptor
// normal number is a note (and abscissa sets of 3 characters (zero left padded) play notes close behind, like chords)
// -1 is crotchet, -2 is minum, -0.5 is quaver, -0.25 is semi-quaver etcetera
// 0 (alone) is for a rest of the duration above
// 0127 is normal loudness, etcetera
var done="", offset=0.0, offset2=0.0, planbit="", isrest=false, delaydelim='', notedelim='', curnote=-1, curvelocity=127, curdelay=-1, jk, ijk, prevvelocity=-1, prefix="", curval=1, kji=0, allhhh, bitshhbefore, notes, curnotes="", delays, curdelays="";
var plan=" MIDI.loadPlugin({ \n";
plan += "soundfontUrl: './soundfont/', \n";
plan += "instrument: document.getElementById('instrument').value.toLowerCase(), \n";
plan += "onprogress: function(state, progress) { \n";
plan += " console.log(state, progress); \n";
plan += "}, \n";
plan += "onsuccess: function() { \n";
plan += " delay = 0.0; \n";
plan += " var note = 21; \n";
plan += " var velocity = 127; \n";
plan += " thism=1; \n";
plan += " setTimeout(cleartd, 1000); \n";
plan += "}}); \n\n";
console.log('pre abscissacheck ' + sheetmusic);
var sheetdata=abscissacheck(sheetmusic);
var mididata=sheetdata.split(',');
console.log('post abscissacheck ' + sheetdata);
if (mididata[0].substring(0,1) >= 'A') {
kji = 1;
if (mididata[0].toLowerCase().indexOf("slowx") != -1) maxfactor=eval(mididata[0].toLowerCase().replace("slowx", ""));
if (mididata[0].toLowerCase().indexOf("fastx") != -1) maxfactor=eval(mididata[0].toLowerCase().replace("fastx", ""));
if (mididata[0].toLowerCase().indexOf("slowby") != -1) maxfactor=eval(1.0 / mididata[0].toLowerCase().replace("slowby", ""));
if (mididata[0].toLowerCase().indexOf("fastby") != -1) maxfactor=eval(1.0 / mididata[0].toLowerCase().replace("fastby", ""));
if (mididata[0].toLowerCase() == "largo") document.getElementById('speed').value='0.30';
if (mididata[0].toLowerCase() == "larghetto") document.getElementById('speed').value='0.25';
if (mididata[0].toLowerCase() == "adagio") document.getElementById('speed').value='0.20';
if (mididata[0].toLowerCase() == "andante") document.getElementById('speed').value='0.15';
if (mididata[0].toLowerCase() == "moderato") document.getElementById('speed').value='0.10';
if (mididata[0].toLowerCase() == "allegro") document.getElementById('speed').value='0.05';
if (mididata[0].toLowerCase() == "presto") document.getElementById('speed').value='0.025';
}
if (mididata[1].substring(0,1) >= 'A') {
kji = 2;
if (mididata[1].toLowerCase().indexOf("slowx") != -1) maxfactor=eval(mididata[1].toLowerCase().replace("slowx", ""));
if (mididata[1].toLowerCase().indexOf("fastx") != -1) maxfactor=eval(mididata[1].toLowerCase().replace("fastx", ""));
if (mididata[1].toLowerCase().indexOf("slowby") != -1) maxfactor=eval(1.0 / mididata[1].toLowerCase().replace("slowby", ""));
if (mididata[1].toLowerCase().indexOf("fastby") != -1) maxfactor=eval(1.0 / mididata[1].toLowerCase().replace("fastby", ""));
if (mididata[1].toLowerCase() == "largo") document.getElementById('speed').value='0.30';
if (mididata[1].toLowerCase() == "larghetto") document.getElementById('speed').value='0.25';
if (mididata[1].toLowerCase() == "adagio") document.getElementById('speed').value='0.20';
if (mididata[1].toLowerCase() == "andante") document.getElementById('speed').value='0.15';
if (mididata[1].toLowerCase() == "moderato") document.getElementById('speed').value='0.10';
if (mididata[1].toLowerCase() == "allegro") document.getElementById('speed').value='0.05';
if (mididata[1].toLowerCase() == "presto") document.getElementById('speed').value='0.025';
}
for (ijk=kji; ijk<mididata.length; ijk++) {
if (mididata[ijk].indexOf("+") == -1 && curnotes.indexOf(",") != -1) {
if (curnote >= 0 && curvelocity >= 0 && curdelay >= 0) { // is valid data here
if (prevvelocity == curvelocity) {
prefix="";
} else {
prefix=" MIDI.setVolume(0, " + eval(hit * curvelocity) + "); ";
hit=1;
prevvelocity = curvelocity;
}
if (curnote == 0) { // rest
plan=plan.replace("}});", prefix + "delay+=" + curdelay + "; \n }}); \n");
prefix = "";
} else if (curnotes.indexOf(",") != -1) {
notes=curnotes.split(',');
delays=curdelays.split(',');
//alert(notes.length);
offset=0.0;
offset2=0.0;
done="";
for (jk=0; jk<notes.length; jk++) {
planbit=prefix + "\n";
planbit += " MIDI.noteOn(0, " + notes[jk] + ", " + curvelocity + ", delay + " + offset + "); \n";
if (jk != 0) {
offset2=0.0;
offset2+=eval(offset);
offset2+=eval(delays[jk]);
planbit += " MIDI.noteOff(0, " + notes[jk] + ", delay + " + offset2 + "); \n";
offset+=eval(delays[jk]);
if (offset >= delays[0]) {
planbit += done;
done="";
delays[0]=-1.0;
}
} else {
done = " MIDI.noteOff(0, " + notes[0] + ", delay + " + delays[0] + "); \n";
}
planbit += " }}); \n";
plan=plan.replace("}});", planbit);
prefix = "";
}
planbit += done;
//alert("0:" + notes[0]);
planbit = "setmeter(" + notes[0] + "); \n";
planbit += "thism++; lastn=" + notes[0] + "; \n";
planbit += "delay+=" + Math.max(delays[0], offset2) + "; \n";
planbit += " }}); \n";
plan=plan.replace("}});", planbit);
} else if (isrest) { // rest
plan=plan.replace("}});", prefix + "delay+=" + curdelay + "; \n }}); \n");
prefix = "";
} else {
planbit=prefix + "\n";
planbit += " MIDI.noteOn(0, " + curnote + ", " + curvelocity + ", delay); \n";
planbit += " MIDI.noteOff(0, " + curnote + ", delay + " + curdelay + "); \n";
//alert("curnote=" + curnote);
planbit += "setmeter(" + curnote + "); \n";
planbit += "thism++; lastn=" + curnote + "; \n";
planbit += "delay+=" + curdelay + "; \n";
planbit += " }}); \n";
plan=plan.replace("}});", planbit);
prefix = "";
}
curnote = -1;
curnotes = "";
curdelays = "";
curdelay = -1;
prefix = "";
delaydelim='';
notedelim='';
isrest = false;
}
}
//}
if (mididata[ijk].substring(0,1) == "-") {
curval=mididata[ijk].replace("+","");
curdelay = noteworth(curval);
curdelays = curdelays + delaydelim + curdelay;
delaydelim = ',';
} else if (mididata[ijk].replace("+","") == "0") {
isrest = true;
if (curnote < 0) curnote=0;
} else if (mididata[ijk].substring(0,1) == "0") {
curvelocity = mididata[ijk].substring(1).replace("+","");
} else if (mididata[ijk].indexOf(".") != -1) {
if (allhis == "") allhis = document.body.innerHTML;
allhhh=allhis.split(">" + mididata[ijk].replace("+","")); // + "<");
bitshhbefore=allhhh[0].split(">");
curnote = bitshhbefore[bitshhbefore.length - 4].replace("</td", "");
curnotes = curnotes + notedelim + curnote;
notedelim = ',';
} else {
curnote = mididata[ijk].replace("+","");
curnotes = curnotes + notedelim + curnote;
notedelim = ',';
}
if (curnote >= 0 && curvelocity >= 0 && curdelay >= 0 && mididata[ijk].indexOf("+") == -1) { // is valid data here
if (prevvelocity == curvelocity) {
prefix="";
} else {
prefix=" MIDI.setVolume(0, " + eval(hit * curvelocity) + "); ";
hit=1;
prevvelocity = curvelocity;
}
if (curnote == 0) { // rest
plan=plan.replace("}});", prefix + "delay+=" + curdelay + "; \n }}); \n");
prefix = "";
} else if (curnotes.indexOf(",") != -1) {
notes=curnotes.split(',');
delays=curdelays.split(',');
done="";
offset=0.0;
offset2=0.0;
for (jk=0; jk<notes.length; jk++) {
planbit=prefix + "\n";
planbit += " MIDI.noteOn(0, " + notes[jk] + ", " + curvelocity + ", delay + " + offset + "); \n";
if (jk != 0) {
offset2=0.0;
offset2+=eval(offset);
offset2+=eval(delays[jk]);
planbit += " MIDI.noteOff(0, " + notes[jk] + ", delay + " + offset2 + "); \n";
offset+=eval(delays[jk]);
if (offset >= delays[0]) {
planbit += done;
done="";
delays[0]=-1.0;
}
} else {
done = " MIDI.noteOff(0, " + notes[0] + ", delay + " + delays[0] + "); \n";
}
planbit += " }}); \n";
plan=plan.replace("}});", planbit);
prefix = "";
}
planbit += done;
//alert("2:" + notes[0]);
planbit = "setmeter(" + notes[0] + "); \n";
planbit += "thism++; lastn=" + notes[0] + "; \n";
planbit += "delay+=" + Math.max(delays[0], offset2) + "; \n";
planbit += " }}); \n";
plan=plan.replace("}});", planbit);
} else if (isrest) { // rest
plan=plan.replace("}});", prefix + "delay+=" + curdelay + "; \n }}); \n");
prefix = "";
} else {
planbit=prefix + "\n";
planbit += " MIDI.noteOn(0, " + curnote + ", " + curvelocity + ", delay); \n";
planbit += " MIDI.noteOff(0, " + curnote + ", delay + " + curdelay + "); \n";
//alert("2:" + curnote);
planbit += "setmeter(" + curnote + "); \n";
planbit += "thism++; lastn=" + curnote + "; \n";
planbit += "delay+=" + curdelay + "; \n";
planbit += " }}); \n";
plan=plan.replace("}});", planbit);
prefix = "";
}
curnote = -1;
curnotes = "";
curdelays = "";
curdelay = -1;
prefix = "";
delaydelim='';
notedelim='';
isrest = false;
}
}
if (document.getElementById('conduit').value != '') { // if (document.URL.indexOf('webaudio=') != -1) {
//alert(plan.split('onsuccess: function() {')[1].split('}')[0].replace(/MIDI\./g, 'MIDI'));
//alert(plan.split('onsuccess: function() {')[1].split('}')[0].replace(/ MIDI\.noteO/g, ' preMIDInoteO').replace(/ MIDI\./g, ' MIDI')); // play music
if (azzgoon) { if (showr) { showr=false; alert(plan.split('onsuccess: function() {')[1].split('}')[0].replace(/ MIDI\.noteO/g, ' preMIDInoteO').replace(/ MIDI\./g, ' MIDI').slice(-300)); } eval(plan.split('onsuccess: function() {')[1].split('}')[0].replace(/ MIDI\.noteO/g, ' preMIDInoteO').replace(/ MIDI\./g, ' MIDI')); } // play music
} else {
//alert('' + thism + ' ... ' + plan.split('onsuccess: function() {')[1].split('}')[0].replace(/MIDI\./g, 'MIDI')); // play music
azzgoon=true;
hit=1;
try {
if (parent.document.title != document.title) {
azzgoon=false;
hit=0;
}
} catch (sawzerrr) {
}
if (azzgoon) { if (showr) { showr=false; alert(plan.slice(-300)); } eval(plan); } // play music
}
}
}
function MIDIsetVolume(par1, par2) {
//alert('' + par1 + ',' + par2);
}
function playnext() {
if (eval(-1 + inextc) < nextc.length) {
if (inextc == 1) { delay=0; }
if (eval('' + nextc.length) > inextc) {
eval(nextc[eval(-1 + inextc)]);
setTimeout(playnext, Math.round(eval(eval('' + nextc[eval(-1 + inextc)].split('delay+=')[1].split(';')[0]) * 1000)));
}
inextc++;
} else {
nextc=[];
inextc=0;
lastpar3=0;
}
}
function preMIDInoteOn(par1, par2, par3, par4) {
//if (('' + par2) == '49') { alert('' + par2); }
par2=eval(-2 + eval('' + par2));
if (inextc == 0 && nextc.length > 0) {
inextc=1;
setTimeout(playnext, 300);
}
if (eval(eval('' + par2) - 21) >= 0 && eval(eval('' + par2) - 21) < barr.length) {
nextc.push(" MIDInoteOn(" + par1 + "," + par2 + "," + par3 + "," + par4 + "); setmeter(" + par2 + "); thism++; lastn=" + par2 + "; "); //MIDInoteOff(" + par1 + "," + par2 + "," + par3 + " + 0.3); setmeter(" + par2 + "); thism++; lastn=" + par2 + "; delay+=0.3; ");
}
}
function preMIDInoteOff(par1, par2, par3) {
par2=eval(-2 + eval('' + par2));
var dlastp=eval(eval('' + par3) - eval('' + lastpar3));
nextc[eval(-1 + nextc.length)]=nextc[eval(-1 + nextc.length)].replace(" setmeter(", " MIDInoteOff(" + par1 + "," + par2 + "," + par3 + "); setmeter(") + " delay+=" + ('' + dlastp).split(' ')[eval(-1 + ('' + dlastp).split(' ').length)];
lastpar3=eval('' + par3);
//alert('dlastp=' + dlastp);
}
function MIDInoteOn(par1, par2, par3, par4) {
//alert('' + par1 + ',' + par2 + ',' + par3 + ',' + par4);
//alert(barr[eval(eval('' + par2) - 21)]);
//var i=0;
//while (document.getElementById('cmdconduit').value.indexOf(' parent.setmeter(-1);') != -1) {
// i=document.getElementById('cmdconduit').value.length;
// document.title='waiting';
//}
//document.title='playing';
//alert('note is ' + eval(eval('' + par2) - 23) + ' and par2=' + par2);
//document.title+=' ' + barr[eval(eval('' + par2) - 21)].replace('/','').replace('.','');
document.getElementById('conduit').value+=barr[eval(eval('' + par2) - 21)].replace('/','').replace('.',''); // + '#' + par4 + ' ';
document.getElementById('cmdconduit').value+='parent.setmeter(' + par2 + ');' + ' ';
}
function MIDInoteOff(par1, par2, par3) {
//alert('' + par1 + ',' + par2 + ',' + par3);
}
function rotatemaybe(isel) {
var jj=21;
if (isel.id == 'instrument') {
var iv=document.getElementById('instrument').value;
if (iv == document.getElementById('instrument').value.toLowerCase()) {
if (1 == 2) location.href='./MyScale.html?instrument=' + document.getElementById('instrument').value + "&myselpos=left&mode=" + document.getElementById('mode').value + "&speed=" + document.getElementById('speed').value;
} else {
//alert(99);
document.body.innerHTML = document.body.innerHTML.replace('"mytbody"', '"myxtbody"').replace('"mytd2"', '"myxtd2"').replace('"myh1right"', '"myxh1right"');
document.getElementById('myselpos').value='top';
while (jj < 109) {
document.getElementById('tr' + jj).style.backgroundColor='white';
jj = eval(1 + jj);
}
}
} else if (isel.value.toLowerCase() == "top") {
document.body.innerHTML = document.body.innerHTML.replace('"mytbody"', '"myxtbody"').replace('"mytd2"', '"myxtd2"').replace('"myh1right"', '"myxh1right"');
document.getElementById('myselpos').value=isel.value;
document.getElementById('vspacer').innerHTML='<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>';
while (jj < 109) {
document.getElementById('tr' + jj).style.backgroundColor='white';
jj = eval(1 + jj);
}
if (isel.value == 'Top') {
rejig(isel.value,'');
document.getElementById('mode').innerHTML='<option value="Composing">Composing</option>';
//location.href='./MyScale.html?instrument=' + document.getElementById('instrument').value + "&myselpos=Top&mode=" + document.getElementById('mode').value + "&speed=" + document.getElementById('speed').value + '#tabr';
//location.href='#sheetmusic'; // tabr
//alert(1);
//if (window.scrollY) {
window.scrollTo(0, 240); // reset the scroll position to the top left of the document.
//alert(11);
//}
} else if (isel.value == 'top') {
//if (window.scrollY) {
window.scrollTo(0, 240); // reset the scroll position to the top left of the document.
//alert(11);
//}
}
} else if (isel.value.toLowerCase() == "left") {
location.href='./MyScale.html?instrument=' + document.getElementById('instrument').value + "&myselpos=" + isel.value + "&mode=" + document.getElementById('mode').value + "&speed=" + document.getElementById('speed').value;
} else if (isel.value != '') {
location.href='./MyScale.html?instrument=' + document.getElementById('instrument').value + "&myselpos=Left&mode=" + document.getElementById('mode').value + "&speed=" + document.getElementById('speed').value + "&playthis=" + encodeURIComponent(isel.value);
}
}
function cleartd() {
var jj=0;
var ourinnerHTML="";
var oi = document.getElementById('mytbody');
if (oi == null) jj=21;
if (oi == null) oi = document.getElementById('myxtbody');
ourinnerHTML=oi.innerHTML.replace(/style="background-color: rgb(255, 192, 203);"/g, '').replace(/style="background-color: pink;"/g, '').replace(/style="background-color:pink;"/g, '').replace(/style="background-color: yellow;"/g, '').replace(/style="background-color:yellow;"/g, '').replace(/style=.background-color:/g, '');
while (ourinnerHTML.indexOf("rgb(255") != -1) {
ourinnerHTML = ourinnerHTML.replace("rgb(255,","");
ourinnerHTML = ourinnerHTML.replace("192,","");
ourinnerHTML = ourinnerHTML.replace('203);"','');
}
oi.innerHTML = ourinnerHTML;
if (jj > 0) {
while (jj < 109) {
document.getElementById('tr' + jj).style.backgroundColor='white';
jj = eval(1 + jj);
}
}
}
function settd() {
if (prevtr >= 0 && 1 == 2) {
//alert(prevtr);
document.getElementById('tr' + prevtr).innerHTML = document.getElementById('tr' + prevtr).innerHTML.replace('style="background-color:pink;"', "");
}
prevtr = pinnote;
document.getElementById('tr' + prevtr).innerHTML = document.getElementById('tr' + prevtr).innerHTML.replace('class="singleright"', ' style="background-color:pink;" class="singleright"');
}
function sett() {
analyzerequest("-1");
globvar=eval(1 + globvar);
}
function setmeter(innote) {
//pinnote=innote;
//setTimeout(settd, eval(delay * 1000));
//alert(' ... ' + innote);
document.getElementById('tr' + innote).style.backgroundColor='pink';
if (allhis == "") allhis = document.body.innerHTML;
var alln=allhis.split(">" + innote); // + "<");
var allns=alln[1].split(">");
if (allns.length > 4) {
var freqs=allns[4].split("<");
//alert(freqs[0]);
var mism=document.getElementById('mymeter' + thism);
if (mism == null) {
//document.getElementById('dmeter').innerHTML = document.getElementById('dmeter').innerHTML.replace("</tr>", "<td><meter class='cmeter' id='mymeter" + thism + "' min='0.0' max='5000.0' value='0.0' style='width:180px;'></meter></td></tr>");
document.getElementById('dmeter').innerHTML = document.getElementById('dmeter').innerHTML.replace("</tbody>", "<tr><td><meter class='cmeter' id='mymeter" + thism + "' min='0.0' max='5000.0' value='0.0' style='width:480px;'></meter></td></tr></tbody>");
mism=document.getElementById('mymeter' + thism);
}
mism.value = freqs[0];
}
}
function ask() {
askmode=0;
var maxis=0, def='', delim='', thisblurb='', thiscontent='', thismidi, thisansi, jg, cells, incells, rds=document.body.innerHTML.split('r' + 'ed;');
if (rds.length == 1) {
var restlength=prompt("Enter (negative) length of rest ... (loosely, -1.0 = crotchet)?", "-1.0");
delim=',';
if (document.getElementById('sheetmusic').value == "") delim = '';
document.getElementById('sheetmusic').value+=(delim + "0," + restlength);
delim=',';
} else {
for (jg=1; jg<rds.length; jg++) {
cells=rds[jg].split(">");
incells=cells[1].split("<");
thismidi=incells[0];
incells=cells[3].split("<");
thisansi=incells[0];
thisblurb=thisblurb + delim + thisansi.split('&')[0];
thiscontent=thiscontent + delim + thismidi.split('&')[0];
def=def + delim + "-1.0";
delim=',';
}
var notelength=prompt("Enter (negative) length(s) of note(s) ... " + thisblurb + " ... (loosely, -1.0 = crotchet ... please comma separate)?", def);
var midibits=thiscontent.split(',');
if (notelength != null) {
var notebits=notelength.split(',');
delim=',';
if (document.getElementById('sheetmusic').value == "") delim = '';
if (notebits.length == 1) {
document.getElementById('sheetmusic').value+=(delim + thiscontent + "," + notelength);
delim=',';
} else {
maxis=0;
for (jg=1; jg<notebits.length; jg++) {
if (eval((notebits[jg]) - (notebits[maxis])) < 0.0) {
maxis=jg;
}
}
document.getElementById('sheetmusic').value+=(delim + "+" + midibits[maxis] + "," + notebits[maxis] + "+");
delim=',';
for (jg=0; jg<notebits.length; jg++) {
if (jg != maxis) {
document.getElementById('sheetmusic').value+=(delim + "+" + midibits[jg] + "," + notebits[jg] + "+");
}
}
}
}
for (jg=0; jg<midibits.length; jg++) {
document.getElementById('tr' + midibits[jg]).style.backgroundColor='white';
}
}
document.getElementById('savemusic').value=document.getElementById('sheetmusic').value;
if (document.getElementById('savemusic').value != "") {
document.getElementById('myform').style.display='inline';
} else {
document.getElementById('myform').style.display='none';
}
}
function analyzerequest(whatis,inwhatyouaskedfor) {
var crval="-1.0";
var whatyouaskedfor=(inwhatyouaskedfor.split('&')[0]) + nsuffix;
nsuffix='';
if (whatyouaskedfor.indexOf('!') != -1) { crval= whatyouaskedfor.split('!')[1]; whatyouaskedfor=whatyouaskedfor.split('!')[0]; }
if (songmode == 1) {
if (whatyouaskedfor.indexOf(".") == -1 && whatyouaskedfor.substring(0,1) >= "0" && whatyouaskedfor.substring(0,1) <= "9") {
whatis.style.backgroundColor='r' + 'ed';
if (askmode == 0) {
askmode=1;
setTimeout(ask, 5000);
}
} else if (whatyouaskedfor.indexOf(".") != -1) {
if (allhis == "") allhis = document.body.innerHTML;
var xallhh=allhis.split(">" + whatyouaskedfor); // + "<");
var xbitshbefore=xallhh[0].split(">");
var m5=6;
if (xbitshbefore[xbitshbefore.length - m5].indexOf('</span') != -1) { m5+=2; }
if (xbitshbefore[xbitshbefore.length - m5].indexOf('<img ') != -1 || xbitshbefore[xbitshbefore.length - m5].indexOf('<td ') != -1) { m5++; }
if (xbitshbefore[xbitshbefore.length - m5].indexOf('</span') != -1) { m5+=2; }
if (xbitshbefore[xbitshbefore.length - m5].indexOf('<img ') != -1 || xbitshbefore[xbitshbefore.length - m5].indexOf('<td ') != -1) { m5++; }
//alert('startnote=' + xbitshbefore[xbitshbefore.length - m5]);
startnote=xbitshbefore[xbitshbefore.length - m5].replace("</td", "").split('&')[0];
document.getElementById('tr' + startnote).style.backgroundColor='r' + 'ed';
if (document.getElementById('sheetmusic').value == "") {
document.getElementById('sheetmusic').value=startnote + "," + crval;
askmode=0;
nonred=startnote;
} else {
document.getElementById('sheetmusic').value+=("," + startnote + "," + crval);
askmode=0;
nonred=startnote;
}
if (nonred < 0) document.getElementById('tr' + startnote).style.backgroundColor='white';
document.getElementById('savemusic').value=document.getElementById('sheetmusic').value;
if (document.getElementById('savemusic').value != "") {
document.getElementById('myform').style.display='inline';
} else {
document.getElementById('myform').style.display='none';
}
} else {
if (allhis == "") allhis = document.body.innerHTML;
var xxallhh=allhis.split(">" + whatyouaskedfor); // + "<");
var xxbitshbefore=xxallhh[0].split(">");
var zm5=2;
if (xxbitshbefore[xxbitshbefore.length - zm5].indexOf('</span') != -1) { zm5+=2; }
if (xxbitshbefore[xxbitshbefore.length - zm5].indexOf('<img ') != -1 || xxbitshbefore[xxbitshbefore.length - zm5].indexOf('<td ') != -1) { zm5++; }
if (xxbitshbefore[xxbitshbefore.length - zm5].indexOf('</span') != -1) { zm5+=2; }
if (xxbitshbefore[xxbitshbefore.length - zm5].indexOf('<img ') != -1 || xxbitshbefore[xxbitshbefore.length - zm5].indexOf('<td ') != -1) { zm5++; }
//alert('Startnote=' + xbitshbefore[xbitshbefore.length - zm5]);
startnote=xxbitshbefore[xxbitshbefore.length - zm5].replace("</td", "").split('&')[0];
document.getElementById('tr' + startnote).style.backgroundColor='r' + 'ed';
if (askmode == 0) {
askmode=1;
setTimeout(ask, 5000);
}
}
} else {
whatis.style.backgroundColor='yellow';
if (whatyouaskedfor != "") {
//alert(whatyouaskedfor);
if (whatyouaskedfor.substring(0,1) == "-") whatyouaskedfor=globvar;
if (whatyouaskedfor.indexOf(".") == -1 && whatyouaskedfor.substring(0,1) >= "0" && whatyouaskedfor.substring(0,1) <= "9") {
if (document.getElementById('conduit').value != '') { // if (document.URL.indexOf('webgg=') != -1) {
plan="delay = 0.0; // play one note every quarter second " + String.fromCharCode(10);
plan+="var note = " + whatyouaskedfor + "; // the MIDI note " + String.fromCharCode(10);
plan+="var velocity = 127; // how hard the note hits " + String.fromCharCode(10);
plan+="var huh = document.URL.split('?'); " + String.fromCharCode(10);
plan+="thism=1; " + String.fromCharCode(10);
plan+="setTimeout(cleartd, 1000); " + String.fromCharCode(10);
plan+="// play the note " + String.fromCharCode(10);
plan+="MIDIsetVolume(0, 127); " + String.fromCharCode(10);
plan+="MIDInoteOn(0,note,velocity,delay); " + String.fromCharCode(10);
plan+="MIDInoteOff(0,note,delay + 0.75); " + String.fromCharCode(10);
plan+="setmeter(note); " + String.fromCharCode(10);
plan+="lastn=note; " + String.fromCharCode(10);
//alert(plan.replace(/MIDI\./g, 'MIDI'));
eval(plan.replace(/ MIDI\.noteO/g, ' preMIDInoteO').replace(/ MIDI\./g, ' MIDI')); // play music
} else {
MIDI.loadPlugin({
soundfontUrl: "./soundfont/",
instrument: document.getElementById('instrument').value.toLowerCase(),
onprogress: function(state, progress) {
console.log(state, progress);
},
onsuccess: function() {
delay = 0.0; // play one note every quarter second
var note = whatyouaskedfor; // the MIDI note
var velocity = 127; // how hard the note hits
var huh = document.URL.split("?");
thism=1;
setTimeout(cleartd, 1000);
// play the note
MIDI.setVolume(0, eval(hit * 127));
hit=1;
MIDI.noteOn(0, note, velocity, delay);
MIDI.noteOff(0, note, delay + 0.75);
//alert("a:" + note);
setmeter(note);
lastn=note;
}
});
}
} else if (whatyouaskedfor.indexOf(".") != -1) {
//alert(99);
setTimeout(cleartd, 1000);
document.getElementById('mymeter1').value = whatyouaskedfor.replace(/ /g, "");
if (allhis == "") allhis = document.body.innerHTML;
var allhh=allhis.split(">" + whatyouaskedfor); // + "<");
//alert(allhh.length);
var bitshbefore=allhh[0].split(">");
var xm5=4;
//alert('pre startNote=' + bitshbefore[bitshbefore.length - xm5]);
if (bitshbefore[bitshbefore.length - xm5].indexOf('</span') != -1) { xm5+=2; }
if (bitshbefore[bitshbefore.length - xm5].indexOf('<sup') != -1) { xm5+=2; }
if (bitshbefore[bitshbefore.length - xm5].indexOf('<br') != -1) { xm5+=1; xm5+=1; }
//alert('pre2 startNote=' + bitshbefore[bitshbefore.length - xm5]);
if (bitshbefore[bitshbefore.length - xm5].indexOf('#') != -1 || bitshbefore[bitshbefore.length - xm5].indexOf('<img ') != -1 || bitshbefore[bitshbefore.length - xm5].indexOf('<td ') != -1 || bitshbefore[bitshbefore.length - xm5].indexOf('<sup') != -1) { xm5++; }
//alert('pre002 startNote=' + bitshbefore[bitshbefore.length - xm5]);
if (bitshbefore[bitshbefore.length - xm5].indexOf('<span') != -1 || bitshbefore[bitshbefore.length - xm5].indexOf('</span') != -1) { xm5+=2; }
//alert('pre0002 startNote=' + bitshbefore[bitshbefore.length - xm5]);
if (bitshbefore[bitshbefore.length - xm5].indexOf('<img ') != -1 || bitshbefore[bitshbefore.length - xm5].indexOf('<td ') != -1 || bitshbefore[bitshbefore.length - xm5].indexOf('<sup') != -1) { xm5++; }
//alert('pre00002 startNote=' + bitshbefore[bitshbefore.length - xm5]);
if (bitshbefore[bitshbefore.length - xm5].indexOf('<span') != -1 || bitshbefore[bitshbefore.length - xm5].indexOf('</span') != -1) { xm5+=1; }
if (bitshbefore[bitshbefore.length - xm5].indexOf('#') != -1 || bitshbefore[bitshbefore.length - xm5].indexOf('<img ') != -1 || bitshbefore[bitshbefore.length - xm5].indexOf('<td ') != -1 || bitshbefore[bitshbefore.length - xm5].indexOf('<sup') != -1) { xm5++; }
//alert('pre002 startNote=' + bitshbefore[bitshbefore.length - xm5]);
if (bitshbefore[bitshbefore.length - xm5].indexOf('<span') != -1 || bitshbefore[bitshbefore.length - xm5].indexOf('</span') != -1) { xm5+=2; }
//alert('pre0002 startNote=' + bitshbefore[bitshbefore.length - xm5]);
if (bitshbefore[bitshbefore.length - xm5].indexOf('<img ') != -1 || bitshbefore[bitshbefore.length - xm5].indexOf('<td ') != -1 || bitshbefore[bitshbefore.length - xm5].indexOf('<sup') != -1) { xm5++; }
//alert('pre00002 startNote=' + bitshbefore[bitshbefore.length - xm5]);
if (bitshbefore[bitshbefore.length - xm5].indexOf('<span') != -1 || bitshbefore[bitshbefore.length - xm5].indexOf('</span') != -1) { xm5+=1; }
//alert('startNote=' + bitshbefore[bitshbefore.length - xm5]);
startnote=bitshbefore[bitshbefore.length - xm5].replace("</td", "").split('&')[0];
lastn=startnote;
if (document.getElementById('conduit').value != '') { // if (document.URL.indexOf('webaudio=') != -1) {
plan="delay = 0.0; // play one note every quarter second " + String.fromCharCode(10);
plan+="var note = " + startnote + "; // the MIDI note " + String.fromCharCode(10);
plan+="var velocity = 127; // how hard the note hits " + String.fromCharCode(10);
plan+="var huh = document.URL.split('?'); " + String.fromCharCode(10);
plan+="thism=1; " + String.fromCharCode(10);
plan+="setTimeout(cleartd, 1000); " + String.fromCharCode(10);
plan+="// play the note " + String.fromCharCode(10);
plan+="MIDIsetVolume(0, 127); " + String.fromCharCode(10);
plan+="MIDInoteOn(0,note,velocity,delay); " + String.fromCharCode(10);
plan+="MIDInoteOff(0,note,delay + 0.75); " + String.fromCharCode(10);
plan+="setmeter(note); " + String.fromCharCode(10);
//alert(plan.replace(/MIDI\./g, 'MIDI'));
eval(plan.replace(/ MIDI\.noteO/g, ' preMIDInoteO').replace(/ MIDI\./g, ' MIDI')); // play music
} else {
MIDI.loadPlugin({
soundfontUrl: "./soundfont/",
instrument: document.getElementById('instrument').value.toLowerCase(),
onprogress: function(state, progress) {
console.log(state, progress);
},
onsuccess: function() {
delay = 0.0; // play one note every quarter second
var note = startnote; // the MIDI note
var velocity = 127; // how hard the note hits
var huh = document.URL.split("?");
thism=1;
// play the note
MIDI.setVolume(0, eval(hit * 127));
hit=1;
MIDI.noteOn(0, note, velocity, delay);
MIDI.noteOff(0, note, delay + 0.75);
//alert("b:" + note);
setmeter(note);
}
});
}
} else { // try scale
setTimeout(cleartd, 8000);
if (allhis == "") allhis = document.body.innerHTML;
var allh=allhis.split(">" + whatyouaskedfor); // + "<");
var bitsbefore=allh[0].split(">");
var ym5=2;
//alert(whatyouaskedfor + 'pre pre startNotE=' + bitsbefore[bitsbefore.length - ym5]);
if (bitsbefore[bitsbefore.length - ym5].indexOf('</span') != -1) { ym5+=2; }
if (bitsbefore[bitsbefore.length - ym5].indexOf('<sup') != -1) { ym5+=2; }
//alert('pre startNotE=' + bitsbefore[bitsbefore.length - ym5]);
if (bitsbefore[bitsbefore.length - ym5].indexOf('<br') != -1) { ym5+=1; alert('pre02 startNotE=' + bitsbefore[bitsbefore.length - ym5]); ym5+=1; }
if (bitsbefore[bitsbefore.length - ym5].indexOf('<img ') != -1 || bitsbefore[bitsbefore.length - ym5].indexOf('<td ') != -1) { ym5++; }
if (bitsbefore[bitsbefore.length - ym5].indexOf('</span') != -1) { ym5+=2; }
if (bitsbefore[bitsbefore.length - ym5].indexOf('<img ') != -1 || bitsbefore[bitsbefore.length - ym5].indexOf('<td ') != -1) { ym5++; }
//alert('startNotE=' + bitsbefore[bitsbefore.length - ym5]);
startnote=bitsbefore[bitsbefore.length - ym5].replace("</td", "").split('&')[0];
lastn=startnote;
if (document.getElementById('conduit').value != '') { // if (document.URL.indexOf('webaudio=') != -1) {
plan="var ournumo=document.getElementById('mode').value.length; " + String.fromCharCode(10);
plan+="var mode=document.getElementById('mode').value; " + String.fromCharCode(10);
plan+="var i, numo; " + String.fromCharCode(10);
plan+="delay = 0.0; // play one note every quarter second " + String.fromCharCode(10);
plan+="var note = " + startnote + "; // the MIDI note " + String.fromCharCode(10);
plan+="var velocity = 127; // how hard the note hits " + String.fromCharCode(10);
plan+="var factor = eval(document.getElementById('speed').value); //0.15; //0.75; " + String.fromCharCode(10);
plan+="var huh = document.URL.split('?'); " + String.fromCharCode(10);
plan+=" // play the major scale " + String.fromCharCode(10);
plan+=" globvar = " + startnote + "; " + String.fromCharCode(10);
plan+=" thism=1; " + String.fromCharCode(10);
plan+=" MIDI.setVolume(0, eval(hit * 127)); " + String.fromCharCode(10);
plan+=" hit=1; " + String.fromCharCode(10);
plan+=" MIDI.noteOn(0, note, velocity, delay); " + String.fromCharCode(10);
plan+=" setmeter(note); " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOff(0, note, delay); // + factor); " + String.fromCharCode(10);
plan+=" for (numo=1; numo<=ournumo; numo++) { " + String.fromCharCode(10);
plan+=" note++; " + String.fromCharCode(10);
plan+=" note++; // tone major and minor " + String.fromCharCode(10);
plan+=" if (mode < 2) { " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOn(0, note, velocity, delay); // + factor * 2); " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOff(0, note, delay); // + factor * 3); " + String.fromCharCode(10);
plan+=" thism++; " + String.fromCharCode(10);
plan+=" setmeter(note); " + String.fromCharCode(10);
plan+=" } " + String.fromCharCode(10);
plan+=" note++; " + String.fromCharCode(10);
plan+=" if (eval(mode % 2) != 1) note++; // tone " + String.fromCharCode(10);
plan+=" if (mode >= 0) { " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOn(0, note, velocity, delay); // + 3.0); " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOff(0, note, delay); // + 3.75); " + String.fromCharCode(10);
plan+=" thism++; " + String.fromCharCode(10);
plan+=" setmeter(note); " + String.fromCharCode(10);
plan+=" } " + String.fromCharCode(10);
plan+=" note++; // semitone " + String.fromCharCode(10);
plan+=" if (eval(mode % 2) == 1) note++; // tone " + String.fromCharCode(10);
plan+=" if (mode < 2) { " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOn(0, note, velocity, delay); // + 4.5); " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOff(0, note, delay); // + 5.25); " + String.fromCharCode(10);
plan+=" thism++; " + String.fromCharCode(10);
plan+=" setmeter(note); " + String.fromCharCode(10);
plan+=" } " + String.fromCharCode(10);
plan+=" note++; " + String.fromCharCode(10);
plan+=" note++; // tone major and minor " + String.fromCharCode(10);
plan+=" if (mode >= 0) { " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOn(0, note, velocity, delay); // + 6.0); " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOff(0, note, delay); // + 6.75); " + String.fromCharCode(10);
plan+=" thism++; " + String.fromCharCode(10);
plan+=" setmeter(note); " + String.fromCharCode(10);
plan+=" } " + String.fromCharCode(10);
plan+=" note++; " + String.fromCharCode(10);
plan+=" if (eval(mode % 2) != 1) note++; // tone " + String.fromCharCode(10);
plan+=" if (mode < 2) { " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOn(0, note, velocity, delay); // + 7.5); " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOff(0, note, delay); // + 8.25); " + String.fromCharCode(10);
plan+=" thism++; " + String.fromCharCode(10);
plan+=" setmeter(note); " + String.fromCharCode(10);
plan+="} " + String.fromCharCode(10);
plan+="note++; " + String.fromCharCode(10);
plan+="note++; // tone " + String.fromCharCode(10);
plan+="if (eval(mode % 2) == 1) note++; // minor raised " + String.fromCharCode(10);
plan+="if (mode < 2) { " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOn(0, note, velocity, delay); // + 9.0); " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOff(0, note, delay); // + 9.75); " + String.fromCharCode(10);
plan+=" thism++; " + String.fromCharCode(10);
plan+=" setmeter(note); " + String.fromCharCode(10);
plan+="} " + String.fromCharCode(10);
plan+="note++; // semitone " + String.fromCharCode(10);
plan+="if (mode >= 0) { " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOn(0, note, velocity, delay); // + 10.5); " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOff(0, note, delay); // + 11.25); " + String.fromCharCode(10);
plan+=" thism++; " + String.fromCharCode(10);
plan+=" setmeter(note); " + String.fromCharCode(10);
plan+="} " + String.fromCharCode(10);
plan+="} " + String.fromCharCode(10);
plan+=" " + String.fromCharCode(10);
plan+="for (numo=1; numo<=ournumo; numo++) { " + String.fromCharCode(10);
plan+="note--; // semitone " + String.fromCharCode(10);
plan+="if (mode < 2) { " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOn(0, note, velocity, delay); // + 12.0); " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOff(0, note, delay); // + 12.75); " + String.fromCharCode(10);
plan+=" thism--; " + String.fromCharCode(10);
plan+=" setmeter(note); " + String.fromCharCode(10);
plan+="} " + String.fromCharCode(10);
plan+="note--; " + String.fromCharCode(10);
plan+="note--; // tone " + String.fromCharCode(10);
plan+="if (eval(mode % 2) == 1) note--; // minor raised " + String.fromCharCode(10);
plan+="if (mode < 2) { " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOn(0, note, velocity, delay); // + 13.5); " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOff(0, note, delay); // + 14.25); " + String.fromCharCode(10);
plan+=" thism--; " + String.fromCharCode(10);
plan+=" setmeter(note); " + String.fromCharCode(10);
plan+="} " + String.fromCharCode(10);
plan+="note--; " + String.fromCharCode(10);
plan+="if (eval(mode % 2) != 1) note--; // tone " + String.fromCharCode(10);
plan+="if (mode >= 0) { " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOn(0, note, velocity, delay); // + 15.0); " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOff(0, note, delay); // + 15.75); " + String.fromCharCode(10);
plan+=" thism--; " + String.fromCharCode(10);
plan+=" setmeter(note); " + String.fromCharCode(10);
plan+="} " + String.fromCharCode(10);
plan+="note--; " + String.fromCharCode(10);
plan+="note--; // tone major and minor " + String.fromCharCode(10);
plan+="if (mode < 2) { " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOn(0, note, velocity, delay); // + 16.5); " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOff(0, note, delay); // + 17.25); " + String.fromCharCode(10);
plan+=" thism--; " + String.fromCharCode(10);
plan+=" setmeter(note); " + String.fromCharCode(10);
plan+="} " + String.fromCharCode(10);
plan+="note--; // semitone " + String.fromCharCode(10);
plan+="if (eval(mode % 2) == 1) note--; // tone " + String.fromCharCode(10);
plan+="if (mode >= 0) { " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOn(0, note, velocity, delay); // + 18.0); " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOff(0, note, delay); // + 18.75); " + String.fromCharCode(10);
plan+=" thism--; " + String.fromCharCode(10);
plan+=" setmeter(note); " + String.fromCharCode(10);
plan+="} " + String.fromCharCode(10);
plan+="note--; " + String.fromCharCode(10);
plan+="if (eval(mode % 2) != 1) note--; // tone " + String.fromCharCode(10);
plan+="if (mode < 2) { " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOn(0, note, velocity, delay); // + 19.5); " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOff(0, note, delay); // + 20.25); " + String.fromCharCode(10);
plan+=" thism--; " + String.fromCharCode(10);
plan+=" setmeter(note); " + String.fromCharCode(10);
plan+="} " + String.fromCharCode(10);
plan+="note--; " + String.fromCharCode(10);
plan+="note--; // tone major and minor " + String.fromCharCode(10);
plan+="if (mode >= 0) { " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOn(0, note, velocity, delay); // + 21.0); " + String.fromCharCode(10);
plan+=" delay += factor; " + String.fromCharCode(10);
plan+=" MIDI.noteOff(0, note, delay); // + 21.75); " + String.fromCharCode(10);
plan+=" thism--; " + String.fromCharCode(10);
plan+=" setmeter(note); " + String.fromCharCode(10);
plan+="} " + String.fromCharCode(10);
plan+="} " + String.fromCharCode(10);
//alert(plan.replace(/MIDI\./g, 'MIDI'));
if (azzgoon) { eval(plan.replace(/ MIDI\.noteO/g, ' preMIDInoteO').replace(/ MIDI\./g, ' MIDI')); } // play music
} else if (azzgoon) {
MIDI.loadPlugin({
soundfontUrl: "./soundfont/",
instrument: document.getElementById('instrument').value.toLowerCase(),
onprogress: function(state, progress) {
console.log(state, progress);
},
onsuccess: function() {
var ournumo=document.getElementById('mode').value.length;
var mode=document.getElementById('mode').value;
var i, numo;
delay = 0.0; // play one note every quarter second
var note = startnote; // the MIDI note
var velocity = 127; // how hard the note hits
var factor = eval(document.getElementById('speed').value); //0.15; //0.75;
var huh = document.URL.split("?");
// play the major scale
globvar = startnote;
//for (i=startnote; i=(startnote + 12); i++) {
//setTimeout(sett, delay);
//delay = eval(250 + delay);
//}
//alert(note);
thism=1;
MIDI.setVolume(0, eval(hit * 127));
hit=1;
MIDI.noteOn(0, note, velocity, delay);
//alert("c:" + note);
setmeter(note);
delay += factor;
MIDI.noteOff(0, note, delay); // + factor);
for (numo=1; numo<=ournumo; numo++) {
note++;
note++; // tone major and minor
if (mode < 2) {
delay += factor;
MIDI.noteOn(0, note, velocity, delay); // + factor * 2);
delay += factor;
MIDI.noteOff(0, note, delay); // + factor * 3);
thism++;
//alert("d:" + note);
setmeter(note);
}
note++;
if (eval(mode % 2) != 1) note++; // tone
if (mode >= 0) {
delay += factor;
MIDI.noteOn(0, note, velocity, delay); // + 3.0);
delay += factor;
MIDI.noteOff(0, note, delay); // + 3.75);
thism++;
//alert("e:" + note);
setmeter(note);
}
note++; // semitone
if (eval(mode % 2) == 1) note++; // tone
if (mode < 2) {
delay += factor;
MIDI.noteOn(0, note, velocity, delay); // + 4.5);
delay += factor;
MIDI.noteOff(0, note, delay); // + 5.25);
thism++;
//alert("f:" + note);
setmeter(note);
}
note++;
note++; // tone major and minor
if (mode >= 0) {
delay += factor;
MIDI.noteOn(0, note, velocity, delay); // + 6.0);
delay += factor;
MIDI.noteOff(0, note, delay); // + 6.75);
thism++;
//alert("g:" + note);
setmeter(note);
}
note++;
if (eval(mode % 2) != 1) note++; // tone
if (mode < 2) {
delay += factor;
MIDI.noteOn(0, note, velocity, delay); // + 7.5);
delay += factor;
MIDI.noteOff(0, note, delay); // + 8.25);
thism++;
//alert("h:" + note);
setmeter(note);
}
note++;
note++; // tone
if (eval(mode % 2) == 1) note++; // minor raised
if (mode < 2) {
delay += factor;
MIDI.noteOn(0, note, velocity, delay); // + 9.0);
delay += factor;
MIDI.noteOff(0, note, delay); // + 9.75);
thism++;
//alert("i:" + note);
setmeter(note);
}
note++; // semitone
if (mode >= 0) {
delay += factor;
MIDI.noteOn(0, note, velocity, delay); // + 10.5);
delay += factor;
MIDI.noteOff(0, note, delay); // + 11.25);
thism++;
//alert("j:" + note);
setmeter(note);
}
}
for (numo=1; numo<=ournumo; numo++) {
// Going back
note--; // semitone
if (mode < 2) {
delay += factor;
MIDI.noteOn(0, note, velocity, delay); // + 12.0);
delay += factor;
MIDI.noteOff(0, note, delay); // + 12.75);
thism--;
//alert("k:" + note);
setmeter(note);
}
note--;
note--; // tone
if (eval(mode % 2) == 1) note--; // minor raised
if (mode < 2) {
delay += factor;
MIDI.noteOn(0, note, velocity, delay); // + 13.5);
delay += factor;
MIDI.noteOff(0, note, delay); // + 14.25);
thism--;
//alert("l:" + note);
setmeter(note);
}
note--;
if (eval(mode % 2) != 1) note--; // tone
if (mode >= 0) {
delay += factor;
MIDI.noteOn(0, note, velocity, delay); // + 15.0);
delay += factor;
MIDI.noteOff(0, note, delay); // + 15.75);
thism--;
//alert("m:" + note);
setmeter(note);
}
note--;
note--; // tone major and minor
if (mode < 2) {
delay += factor;
MIDI.noteOn(0, note, velocity, delay); // + 16.5);
delay += factor;
MIDI.noteOff(0, note, delay); // + 17.25);
thism--;
//alert("n:" + note);
setmeter(note);
}
note--; // semitone
if (eval(mode % 2) == 1) note--; // tone
if (mode >= 0) {
delay += factor;
MIDI.noteOn(0, note, velocity, delay); // + 18.0);
delay += factor;
MIDI.noteOff(0, note, delay); // + 18.75);
thism--;
//alert("o:" + note);
setmeter(note);
}
note--;
if (eval(mode % 2) != 1) note--; // tone
if (mode < 2) {
delay += factor;
MIDI.noteOn(0, note, velocity, delay); // + 19.5);
delay += factor;
MIDI.noteOff(0, note, delay); // + 20.25);
thism--;
//alert("p:" + note);
setmeter(note);
}
note--;
note--; // tone major and minor
if (mode >= 0) {
delay += factor;
MIDI.noteOn(0, note, velocity, delay); // + 21.0);
delay += factor;
MIDI.noteOff(0, note, delay); // + 21.75);
thism--;
//alert("q:" + note);
setmeter(note);
}
}
}
});
}
//setTimeout(cleartd, 8000);
}
}
}
}
function populatesel() {
document.getElementById('instrument').value=location.search.split('instrument=')[1] ? location.search.split('instrument=')[1].split('&')[0] : 'acoustic_grand_piano';
document.getElementById('mode').value=location.search.split('mode=')[1] ? location.search.split('mode=')[1].split('&')[0] : '0';
document.getElementById('speed').value=(location.search.split('speed=')[1] ? location.search.split('speed=')[1].split('&')[0] : 'Andante').replace('Andante','0.15');
document.getElementById('myselpos').value=location.search.split('myselpos=')[1] ? location.search.split('myselpos=')[1].split('&')[0] : 'left';
if (document.getElementById('myselpos').value.substring(0,1) == document.getElementById('myselpos').value.substring(0,1).toUpperCase()) { // in composer mode
pchosen=location.search.split('playthis=')[1] ? decodeURIComponent(location.search.split('playthis=')[1].split('&')[0]) : '';
if (pchosen != '') { setTimeout(playthisone, 3000); }
}
sm=location.search.split('sheetmusic=')[1] ? location.search.split('sheetmusic=')[1].split('&')[0] : '';
if (sm != '') {
insong(sm);
}
if (document.getElementById('myselpos').value.substring(0,1) == 'L') {
if (sm == "") sm=" ";
rejig(document.getElementById('myselpos').value,'');
document.getElementById('mode').innerHTML='<option value="Composing">Composing</option>';
} else if (document.getElementById('myselpos').value.substring(0,1) == 'T') {
if (sm == "") sm=" ";
rejig(document.getElementById('myselpos').value,'');
rotatemaybe('Top');
document.getElementById('mode').innerHTML='<option value="Composing">Composing</option>';
}
// Name those Notes game
nlength=location.search.split('nlength=')[1] ? location.search.split('nlength=')[1].split('&')[0] : '0.75';
one_twenty_seven=location.search.split('volume=')[1] ? location.search.split('volume=')[1].split('&')[0] : '127';
fifty=location.search.split('note=')[1] ? location.search.split('note=')[1].split('&')[0] : '50';
tasimh=location.search.split('song=')[1] ? location.search.split('song=')[1].split('&')[0] : '';
//alert(564);
if (!lhdone) {
lhdone=true;
setTimeout(checkmore, 50);
}
}
function checkmore() {
var locationhash=('' + location.hash);
if (parent.document.getElementById('myifr')) {
if (parent.document.getElementById('myifr').title.indexOf('#') != -1) {
locationhash='#' + parent.document.getElementById('myifr').title.split('#')[1];
}
}
if (locationhash.indexOf('=') != -1 && lh != locationhash) {
lh=locationhash;
var xnlength=('' + locationhash + '&' + location.search).split('nlength=')[1] ? ('' + locationhash + '&' + location.search).split('nlength=')[1].split('&')[0] : '0.75';
var xone_twenty_seven=('' + locationhash + '&' + location.search).split('volume=')[1] ? ('' + locationhash + '&' + location.search).split('volume=')[1].split('&')[0] : '127';
var xfifty=('' + locationhash + '&' + location.search).split('note=')[1] ? ('' + locationhash + '&' + location.search).split('note=')[1].split('&')[0] : '50';
var xtasimh=('' + locationhash + '&' + location.search).split('song=')[1] ? ('' + locationhash + '&' + location.search).split('song=')[1].split('&')[0] : '';
if (xnlength != nlength || xone_twenty_seven != one_twenty_seven || xfifty != fifty || xtasimh != tasimh) {
nlength = xnlength;
one_twenty_seven = xone_twenty_seven;
fifty = xfifty;
tasimh = xtasimh;
andthen();
}
}
setTimeout(checkmore, 50);
}
function playthisone() {
document.getElementById('playlist').value=pchosen;
document.getElementById('myciframe').src='./MyScale.php?retrieve=' + encodeURIComponent(pchosen);
}
function rejig(topvsleft, csong) {
songmode=1;
document.getElementById('ac').style.textDecoration='none';
//composingform='<iframe style="display:none;" id="myciframe" src="./MyScale.php"></iframe><input type="hidden" name="hsheetmusic" id="hsheetmusic" value="" /><form target="myciframe" id="myform" action="./MyScale.php" method="POST"><br><select id='playlist' onchange="document.getElementById('myciframe').src='./MyScale.php?retrieve=' + this.value;"><option value="">MIDI code</option></select>: <input type="text" name="sheetmusic" id="sheetmusic" value="' + csong + '" /><br<br><input onclick="thism=1;" type="submit" value="Play" /></form>';
//document.getElementById('eqd').innerHTML = composingform;
document.getElementById('scales').style.display='none';
document.getElementById('composition').style.display='block';
document.getElementById('th1').title='Click to add this note to composition ... will wait for 5 seconds before asking about length of note(s)';
document.getElementById('th2').title='Click to add this note to composition ... will wait for 5 seconds before asking about length of note(s)';
document.getElementById('th3').title='Click to add this note to composition as a crotchet (which you can change manually as you require)';
setInterval(lookoutforit, 1000);
}
function badnews() {
alert(stuff);
}
function lookoutforit() {
if (document.title.indexOf("Illegal MIDI") != -1) {
stuff=document.title;
document.title="Music Note/Scale Player and Composer - RJM Programming - May, 2015";
setTimeout(badnews, 700);
}
if (nonred >= 0) document.getElementById('tr' + nonred).style.backgroundColor='white';
nonred=-1;
var thissong=document.getElementById('hsheetmusic').value.replace(/~/g, '+');
if (thissong != '') {
//alert(thissong);
lastsong=thissong;
document.getElementById('hsheetmusic').value='';
//alert(98);
insong(thissong);
//alert(99);
}
}
function preask(tval) {
if (tval != "") {
var things=document.getElementById('sheetmusic').value.split(",");
if (tval == 'rest') {
ask();
} else if (tval == 'clear') {
document.getElementById('sheetmusic').value='';
} else if (tval == '0') {
var vhowmuch=prompt("What volume level?", "127");
if (vhowmuch != null) {
if (vhowmuch != "") {
if (document.getElementById('sheetmusic').value != "") document.getElementById('sheetmusic').value+=',';
document.getElementById('sheetmusic').value+=(tval + vhowmuch);
}
}
} else if (tval != '') {
if (" largo larghetto adagio andante moderato allegro presto ".indexOf(" " + tval + " ") != -1 && things.length > 1) {
if (document.getElementById('sheetmusic').value != "") {
if (things[1].substring(0,1) >= 'A') {
document.getElementById('sheetmusic').value=document.getElementById('sheetmusic').value.replace("," + things[1], "," + tval);
} else if (things[0].substring(0,1) >= 'A') {
document.getElementById('sheetmusic').value=document.getElementById('sheetmusic').value.replace(things[0] + ",", tval + ",");
} else {
document.getElementById('sheetmusic').value=tval + ',' + document.getElementById('sheetmusic').value;
}
} else {
document.getElementById('sheetmusic').value=tval;
}
} else if (" largo larghetto adagio andante moderato allegro presto ".indexOf(" " + tval + " ") != -1) {
if (document.getElementById('sheetmusic').value != "") {
if (things[0].substring(0,1) >= 'A') {
document.getElementById('sheetmusic').value=document.getElementById('sheetmusic').value.replace(things[0] + ",", tval + ",");
} else {
document.getElementById('sheetmusic').value=tval + ',' + document.getElementById('sheetmusic').value;
}
} else {
document.getElementById('sheetmusic').value=tval;
}
} else if (things.length > 1) {
var zhowmuch=prompt("By how much to " + tval + "?", "1");
if (zhowmuch != null) {
if (zhowmuch != "") {
if (document.getElementById('sheetmusic').value != "") {
if (things[1].substring(0,1) >= 'A') {
document.getElementById('sheetmusic').value=document.getElementById('sheetmusic').value.replace("," + things[1], "," + tval + zhowmuch);
} else if (things[0].substring(0,1) >= 'A') {
document.getElementById('sheetmusic').value=document.getElementById('sheetmusic').value.replace(things[0] + ",", tval + zhowmuch + ",");
} else {
document.getElementById('sheetmusic').value=tval + zhowmuch + ',' + document.getElementById('sheetmusic').value;
}
} else {
document.getElementById('sheetmusic').value+=(tval + zhowmuch);
}
}
}
} else {
var howmuch=prompt("By how much to " + tval + "?", "1");
if (howmuch != null) {
if (howmuch != "") {
if (document.getElementById('sheetmusic').value != "") {
if (things[0].substring(0,1) >= 'A') {
document.getElementById('sheetmusic').value=document.getElementById('sheetmusic').value.replace(things[0] + ",", tval + howmuch + ",");
} else {
document.getElementById('sheetmusic').value=tval + howmuch + ',' + document.getElementById('sheetmusic').value;
}
} else {
document.getElementById('sheetmusic').value+=(tval + howmuch);
}
}
}
}
}
if (document.getElementById('sheetmusic').value != "") {
document.getElementById('myform').style.display='inline';
document.getElementById('savemusic').value=document.getElementById('sheetmusic').value;
document.getElementById('hsheetmusic').value=document.getElementById('sheetmusic').value;
} else {
document.getElementById('myform').style.display='none';
document.getElementById('savemusic').value=document.getElementById('sheetmusic').value;
document.getElementById('hsheetmusic').value=document.getElementById('sheetmusic').value;
document.getElementById('playlist').value = '';
}
document.getElementById('oselt').value = '';
}
}
function andthenmode() {
var phuhis=document.getElementById('playlist').innerHTML.replace(document.getElementById('playlist').innerHTML.split('</option>')[0] + '</option>','');
if (phuhis != '') {
document.getElementById('myselpos').innerHTML+=phuhis;
}
if (!lhdone) {
lhdone=true;
if ((document.URL + '!').indexOf('?note=500!') != -1) {
//alert(1564);
setTimeout(checkmore, 50);
} //else {
//alert('2:' + document.URL);
//}
}
}
function onck() {
if (1 == 2) {
if('webkitAudioContext' in window) {
//alert(9);
//var xctx;
ctx = new(window.AudioContext || window.webkitAudioContext || false);
//alert(189);
if(ctx.state === 'suspended') {
//alert(19);
ctx.resume().then(function() {
//susresBtn.textContent = 'Suspend context';
if (document.getElementById('conduit').value != '') { // if (document.URL.indexOf('webaudio=') != -1) {
plan="var delay = 0; // play one note every quarter second " + String.fromCharCode(10);
plan+="var note = 50; // the MIDI note " + String.fromCharCode(10);
plan+="var velocity = 127; // how hard the note hits " + String.fromCharCode(10);
plan+="MIDIsetVolume(0, 127); " + String.fromCharCode(10);
plan+="MIDInoteOn(0,note,velocity,delay); " + String.fromCharCode(10);
plan+="MIDInoteOff(0,note,delay + 0.75); " + String.fromCharCode(10);
//alert(plan.replace(/MIDI\./g, 'MIDI'));
eval(plan.replace(/ MIDI\.noteO/g, ' preMIDInoteO').replace(/ MIDI\./g, ' MIDI')); // play music
} else {
MIDI.loadPlugin({
soundfontUrl: "./soundfont/",
instrument: "acoustic_grand_piano",
onprogress: function(state, progress) {
console.log(state, progress);
},
onsuccess: function() {
var delay = 0; // play one note every quarter second
var note = 50; //fifty; // the MIDI note
var velocity = 127; //one_twenty_seven; // how hard the note hits
// play the note
MIDI.setVolume(0, eval(hit * 127));
hit=1;
MIDI.noteOn(0, note, velocity, delay);
MIDI.noteOff(0, note, delay + 0.75);
}
});
}
});
} else if(ctx.state === 'running') {
if (document.getElementById('conduit').value != '') { // if (document.URL.indexOf('webaudio=') != -1) {
plan="var delay = 0; // play one note every quarter second " + String.fromCharCode(10);
plan+="var note = 50; // the MIDI note " + String.fromCharCode(10);
plan+="var velocity = 127; // how hard the note hits " + String.fromCharCode(10);
plan+="MIDIsetVolume(0, 127); " + String.fromCharCode(10);
plan+="MIDInoteOn(0,note,velocity,delay); " + String.fromCharCode(10);
plan+="MIDInoteOff(0,note,delay + 0.75); " + String.fromCharCode(10);
//alert(plan.replace(/MIDI\./g, 'MIDI'));
eval(plan.replace(/ MIDI\.noteO/g, ' preMIDInoteO').replace(/ MIDI\./g, ' MIDI')); // play music
} else {
MIDI.loadPlugin({
soundfontUrl: "./soundfont/",
instrument: "acoustic_grand_piano",
onprogress: function(state, progress) {
console.log(state, progress);
},
onsuccess: function() {
var delay = 0; // play one note every quarter second
var note = 50; //fifty; // the MIDI note
var velocity = 127; //one_twenty_seven; // how hard the note hits
// play the note
MIDI.setVolume(0, eval(hit * 127));
hit=1;
MIDI.noteOn(0, note, velocity, delay);
MIDI.noteOff(0, note, delay + 0.75);
}
});
}
}
} else {
alert(39);
(function(root) { 'use strict';
var plugin = null;
var output = null;
var channels = [];
var midi = root.WebMIDI = {api: 'webmidi'};
midi.send = function(data, delay) { // set channel volume
output.send(data, delay * 1000);
};
midi.setController = function(channel, type, value, delay) {
output.send([channel, type, value], delay * 1000);
};
midi.setVolume = function(channel, volume, delay) { // set channel volume
output.send([0xB0 + channel, 0x07, volume], delay * 1000);
};
midi.programChange = function(channel, program, delay) { // change patch (instrument)
output.send([0xC0 + channel, program], delay * 1000);
};
midi.pitchBend = function(channel, program, delay) { // pitch bend
output.send([0xE0 + channel, program], delay * 1000);
};
midi.noteOn = function(channel, note, velocity, delay) {
output.send([0x90 + channel, note, velocity], delay * 1000);
};
midi.noteOff = function(channel, note, delay) {
output.send([0x80 + channel, note, 0], delay * 1000);
};
midi.chordOn = function(channel, chord, velocity, delay) {
for (var n = 0; n < chord.length; n ++) {
var note = chord[n];
output.send([0x90 + channel, note, velocity], delay * 1000);
}
};
midi.chordOff = function(channel, chord, delay) {
for (var n = 0; n < chord.length; n ++) {
var note = chord[n];
output.send([0x80 + channel, note, 0], delay * 1000);
}
};
midi.stopAllNotes = function() {
output.cancel();
for (var channel = 0; channel < 16; channel ++) {
output.send([0xB0 + channel, 0x7B, 0]);
}
};
midi.connect = function(opts) {
root.setDefaultPlugin(midi);
///
navigator.requestMIDIAccess().then(function(access) {
plugin = access;
output = plugin.outputs()[0];
opts.onsuccess && opts.onsuccess();
}, function(err) { // well at least we tried!
if (window.AudioContext) { // Chrome
opts.api = 'webaudio';
} else if (window.Audio) { // Firefox
opts.api = 'audiotag';
} else { // no support
return;
}
root.loadPlugin(opts);
});
};
})(MIDI);
if (document.getElementById('conduit').value != '') { // if (document.URL.indexOf('webaudio=') != -1) {
plan="var delay = 0; // play one note every quarter second " + String.fromCharCode(10);
plan+="var note = 50; // the MIDI note " + String.fromCharCode(10);
plan+="var velocity = 127; // how hard the note hits " + String.fromCharCode(10);
plan+="MIDIsetVolume(0, 127); " + String.fromCharCode(10);
plan+="MIDInoteOn(0,note,velocity,delay); " + String.fromCharCode(10);
plan+="MIDInoteOff(0,note,delay + 0.75); " + String.fromCharCode(10);
//alert(plan.replace(/MIDI\./g, 'MIDI'));
eval(plan.replace(/ MIDI\.noteO/g, ' preMIDInoteO').replace(/ MIDI\./g, ' MIDI')); // play music
} else {
MIDI.loadPlugin({
soundfontUrl: "./soundfont/",
instrument: "acoustic_grand_piano",
onprogress: function(state, progress) {
console.log(state, progress);
},
onsuccess: function() {
var delay = 0; // play one note every quarter second
var note = 50; //fifty; // the MIDI note
var velocity = 127; //one_twenty_seven; // how hard the note hits
// play the note
MIDI.setVolume(0, eval(hit * 127));
hit=1;
MIDI.noteOn(0, note, velocity, delay);
MIDI.noteOff(0, note, delay + 0.75);
}
});
}
if (7 == 7) {
if('AudioContext' in window) {
ctx = new(window.AudioContext || window.webkitAudioContext || false);
if(ctx.state === 'suspended') {
//alert(19);
ctx.resume().then(function() {
//susresBtn.textContent = 'Suspend context';
if (document.getElementById('conduit').value != '') { // if (document.URL.indexOf('webaudio=') != -1) {
plan="var delay = 0; // play one note every quarter second " + String.fromCharCode(10);
plan+="var note = 50; // the MIDI note " + String.fromCharCode(10);
plan+="var velocity = 127; // how hard the note hits " + String.fromCharCode(10);
plan+="MIDIsetVolume(0, 127); " + String.fromCharCode(10);
plan+="MIDInoteOn(0,note,velocity,delay); " + String.fromCharCode(10);
plan+="MIDInoteOff(0,note,delay + 0.75); " + String.fromCharCode(10);
//alert(plan.replace(/MIDI\./g, 'MIDI'));
eval(plan.replace(/ MIDI\.noteO/g, ' preMIDInoteO').replace(/ MIDI\./g, ' MIDI')); // play music
} else {
MIDI.loadPlugin({
soundfontUrl: "./soundfont/",
instrument: "acoustic_grand_piano",
onprogress: function(state, progress) {
console.log(state, progress);
},
onsuccess: function() {
var delay = 0; // play one note every quarter second
var note = 50; //fifty; // the MIDI note
var velocity = 127; //one_twenty_seven; // how hard the note hits
// play the note
MIDI.setVolume(0, eval(hit * 127));
hit=1;
MIDI.noteOn(0, note, velocity, delay);
MIDI.noteOff(0, note, delay + 0.75);
}
});
}
});
} else if(ctx.state === 'running') {
if (document.getElementById('conduit').value != '') { // if (document.URL.indexOf('webaudio=') != -1) {
plan="var delay = 0; // play one note every quarter second " + String.fromCharCode(10);
plan+="var note = 50; // the MIDI note " + String.fromCharCode(10);
plan+="var velocity = 127; // how hard the note hits " + String.fromCharCode(10);
plan+="MIDIsetVolume(0, 127); " + String.fromCharCode(10);
plan+="MIDInoteOn(0,note,velocity,delay); " + String.fromCharCode(10);
plan+="MIDInoteOff(0,note,delay + 0.75); " + String.fromCharCode(10);
//alert(plan.replace(/MIDI\./g, 'MIDI'));
eval(plan.replace(/ MIDI\.noteO/g, ' preMIDInoteO').replace(/ MIDI\./g, ' MIDI')); // play music
} else {
MIDI.loadPlugin({
soundfontUrl: "./soundfont/",
instrument: "acoustic_grand_piano",
onprogress: function(state, progress) {
console.log(state, progress);
},
onsuccess: function() {
var delay = 0; // play one note every quarter second
var note = 50; //fifty; // the MIDI note
var velocity = 127; //one_twenty_seven; // how hard the note hits
// play the note
MIDI.setVolume(0, eval(hit * 127));
hit=1;
MIDI.noteOn(0, note, velocity, delay);
MIDI.noteOff(0, note, delay + 0.75);
}
});
}
}
}
}
}
}
}
function prekeyb(eiois) {
if (eiois.ctrlKey) {
eioisctrlKey=true;
} else if (eiois.altKey) {
eioisaltKey=true;
} else if (eiois.keyCode == 17) {
eioisctrlKey=true;
} else if ((eiois.which || eiois.keyCode) == 8) {
if (okn.length > 0) {
okn=okn.substring(0, eval(-1 + okn.length));
} else {
okn='';
}
if (eioisctrlKey) {
eioisctrlKey=false;
} else if (eioisaltKey) {
eioisaltKey=false;
}
}
}
function keyb(eiois) {
if (eiois.ctrlKey) {
eioisctrlKey=true;
} else if (eiois.altKey) {
eioisaltKey=true;
} else if (eiois.keyCode == 17) {
eioisctrlKey=true;
} else if ((eiois.which || eiois.keyCode) == 8) {
if (okn.length > 0) {
okn=okn.substring(0, eval(-1 + okn.length));
} else {
okn='';
}
if (eioisctrlKey) {
eioisctrlKey=false;
} else if (eioisaltKey) {
eioisaltKey=false;
}
} else if (eioisctrlKey) {
if (String.fromCharCode(eiois.which || eiois.keyCode) >= 'A' && String.fromCharCode(eiois.which || eiois.keyCode) <= 'G') {
kqueue.push("document.getElementById('N" + String.fromCharCode(eiois.which || eiois.keyCode) + "').click();");
} else if (String.fromCharCode(eiois.which || eiois.keyCode) >= 'a' && String.fromCharCode(eiois.which || eiois.keyCode) <= 'g') {
kqueue.push("document.getElementById('o" + String.fromCharCode(eiois.which || eiois.keyCode) + "').click();");
} else if (String.fromCharCode(eiois.which || eiois.keyCode) >= 'H' && String.fromCharCode(eiois.which || eiois.keyCode) <= 'N') {
kqueue.push("document.getElementById('N" + String.fromCharCode(eiois.which || eiois.keyCode) + "').click();");
} else if (String.fromCharCode(eiois.which || eiois.keyCode) >= 'h' && String.fromCharCode(eiois.which || eiois.keyCode) <= 'n') {
kqueue.push("document.getElementById('o" + String.fromCharCode(eiois.which || eiois.keyCode) + "').click();");
} else if (String.fromCharCode(eiois.which || eiois.keyCode) >= 'O' && String.fromCharCode(eiois.which || eiois.keyCode) <= 'U') {
kqueue.push("document.getElementById('N" + String.fromCharCode(eiois.which || eiois.keyCode) + "').click();");
} else if (String.fromCharCode(eiois.which || eiois.keyCode) >= 'o' && String.fromCharCode(eiois.which || eiois.keyCode) <= 'u') {
kqueue.push("document.getElementById('o" + String.fromCharCode(eiois.which || eiois.keyCode) + "').click();");
} else if (String.fromCharCode(eiois.which || eiois.keyCode) >= '1' && String.fromCharCode(eiois.which || eiois.keyCode) <= '7') {
kqueue.push("document.getElementById('N" + String.fromCharCode(eiois.which || eiois.keyCode) + "').click();");
} else if (String.fromCharCode(eiois.which || eiois.keyCode) >= 'V' && String.fromCharCode(eiois.which || eiois.keyCode) <= 'X') {
kqueue.push("document.getElementById('N" + String.fromCharCode(eiois.which || eiois.keyCode) + "').click();");
}
okn+=String.fromCharCode(eiois.which || eiois.keyCode) + '#';
if (eioisctrlKey) {
eioisctrlKey=false;
} else if (eioisaltKey) {
eioisaltKey=false;
}
} else {
if (String.fromCharCode(eiois.which || eiois.keyCode) >= 'A' && String.fromCharCode(eiois.which || eiois.keyCode) <= 'G') {
kqueue.push("document.getElementById('P" + String.fromCharCode(eiois.which || eiois.keyCode) + "').click();");
} else if (String.fromCharCode(eiois.which || eiois.keyCode) >= 'a' && String.fromCharCode(eiois.which || eiois.keyCode) <= 'g') {
kqueue.push("document.getElementById('q" + String.fromCharCode(eiois.which || eiois.keyCode) + "').click();");
} else if (String.fromCharCode(eiois.which || eiois.keyCode) >= 'H' && String.fromCharCode(eiois.which || eiois.keyCode) <= 'N') {
kqueue.push("document.getElementById('P" + String.fromCharCode(eiois.which || eiois.keyCode) + "').click();");
} else if (String.fromCharCode(eiois.which || eiois.keyCode) >= 'h' && String.fromCharCode(eiois.which || eiois.keyCode) <= 'n') {
kqueue.push("document.getElementById('q" + String.fromCharCode(eiois.which || eiois.keyCode) + "').click();");
} else if (String.fromCharCode(eiois.which || eiois.keyCode) >= 'O' && String.fromCharCode(eiois.which || eiois.keyCode) <= 'U') {
kqueue.push("document.getElementById('P" + String.fromCharCode(eiois.which || eiois.keyCode) + "').click();");
} else if (String.fromCharCode(eiois.which || eiois.keyCode) >= 'o' && String.fromCharCode(eiois.which || eiois.keyCode) <= 'u') {
kqueue.push("document.getElementById('q" + String.fromCharCode(eiois.which || eiois.keyCode) + "').click();");
} else if (String.fromCharCode(eiois.which || eiois.keyCode) >= '1' && String.fromCharCode(eiois.which || eiois.keyCode) <= '7') {
kqueue.push("document.getElementById('P" + String.fromCharCode(eiois.which || eiois.keyCode) + "').click();");
} else if (String.fromCharCode(eiois.which || eiois.keyCode) >= 'V' && String.fromCharCode(eiois.which || eiois.keyCode) <= 'X') {
kqueue.push("document.getElementById('P" + String.fromCharCode(eiois.which || eiois.keyCode) + "').click();");
}
okn+=String.fromCharCode(eiois.which || eiois.keyCode);
if (eioisctrlKey) {
eioisctrlKey=false;
} else if (eioisaltKey) {
eioisaltKey=false;
}
}
//document.title+=' ' + okn;
//alert('here okn=' + okn);
if (ikqueue == -1 && kqueue.length > 0) {
ikqueue=0;
setTimeout(keychecking, 20);
}
}
function keychecking() {
var iok=-1, cok='';
if (kqueue.length > 0) {
for (var jkl=0; jkl<kqueue.length; jkl++) {
if (iok == -1 && kqueue[jkl] != '') {
iok=jkl;
}
}
if (iok != -1) {
cok=kqueue[iok];
kqueue[iok]='';
eval(cok);
setTimeout(keychecking, 20);
} else {
kqueue=[];
ikqueue=0;
setTimeout(keychecking, 20);
}
} else {
setTimeout(keychecking, 20);
}
}
setTimeout(andthenmode, 2000);
</script>
</head>
<body style='background-color: yellow;' onkeydown='prekeyb(event);' onkeypress='keyb(event);'>
<!--h1 align='center'>Music Note or Scale Player and Composer</h1>
<h2 align='center'>Thanks to <a target=_blank href='https://github.com/mudcube/MIDI.js' title='wow!'>mudcube</a> and <a target=_blank href='http://www.glassarmonica.com/science/frequency_midi.php' title='great table!'>The Glass Armonica</a></h2>
<h3 align='center'>RJM Programming - May, 2015</h3>
<h4 align='center'>Click on links in table for music</h4-->
<!--div align='center'-->
<table align='center'>
<tbody>
<tr>
<td id='mytd1' style='vertical-align:top;'>
<table id='mytable' class="single" style='background-color: white; border: 5px solid brown;'>
<thead>
<tr>
<th id='th1' title='Click to hear this note'>MIDI Note <select onchange'rotatemaybe(this);' id='instrument'>
<option value="acoustic_grand_piano">Acoustic Grand Piano</option>
<option value="synth_drum">Synthesised Drum</option>
<!--option value="ACOUSTIC_GRAND_PIANO">Acoustic Grand Piano (rotated -90 degrees)</option>
<option value="SYNCH_DRUM">Synthesised Drum (rotated -90 degrees)</option-->
</select></th>
<th id='th2' title='Click to hear scale or arpeggio for this note'>ANSI Note <select id='mode'>
<option value="0">Major Scale</option><option value="1">Minor Scale</option><option value="2">Major Arpeggio</option><option value="3">Minor Arpeggio</option>
<option value="00">Major Scale (2 octaves)</option><option value="01">Minor Scale (2 octaves)</option><option value="02">Major Arpeggio (2 octaves)</option><option value="03">Minor Arpeggio (2 octaves)</option>
<option value="000">Major Scale (3 octaves)</option><option value="001">Minor Scale (3 octaves)</option><option value="002">Major Arpeggio (3 octaves)</option><option value="003">Minor Arpeggio (3 octaves)</option>
<option value="0000">Major Scale (4 octaves)</option><option value="0001">Minor Scale (4 octaves)</option><option value="0002">Major Arpeggio (4 octaves)</option><option value="0003">Minor Arpeggio (4 octaves)</option>
</select></th>
<th id='th3' title='Click to hear this frequency'>Frequency (hz) <select id='speed'>
<option value="0.30">Largo</option>
<option value="0.25">Larghetto</option>
<option value="0.20">Adagio</option>
<option value="0.15" selected>Andante</option>
<option value="0.10">Moderato</option>
<option value="0.05">Allegro</option>
<option value="0.025">Presto</option>
</select></th></tr>
</thead><tbody id='mytbody'>
<tr><td id='tr21' class="singleright" onclick="analyzerequest(this, this.innerHTML);">21</td>
<td style="border-left:4px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">A0 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 27.5 <sub title="For any sharp below preceed by ctrl or control key">V</sub><input id="PV" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr22' class="singleright" onclick="analyzerequest(this, this.innerHTML);">22</td>
<td style="border-left:4px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">A#0 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:3px solid transparent;font-size:8px;' class=crotchet>♯</sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 29.1 <input id="NV" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr23' class="singleright" onclick="analyzerequest(this, this.innerHTML);">23</td>
<td style="border-left:4px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">B0 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:4.3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 30.9 <sub title="For any sharp below preceed by ctrl or control key">W</sub><input id="PW" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr24' class="singleright" onclick="analyzerequest(this, this.innerHTML);">24</td>
<td style="border-left:3px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">C1 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:9px;margin-left:-6px;border-bottom:3.7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 32.7 <sub title="For any sharp below preceed by ctrl or control key">3</sub><input id="P3" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr25' class="singleright" onclick="analyzerequest(this, this.innerHTML);">25</td>
<td style="border-left:3px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">C#1 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:9px;margin-left:-6px;border-bottom:3.7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯<br></sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 34.6 <input id="N3" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr26' class="singleright" onclick="analyzerequest(this, this.innerHTML);">26</td>
<td style="border-left:3px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">D1 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:10px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 36.7 <sub title="For any sharp below preceed by ctrl or control key">4</sub><input id="P4" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr27' class="singleright" onclick="analyzerequest(this, this.innerHTML);">27</td>
<td style="border-left:3px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">D#1 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:10px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯<br></sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 38.9 <input id="N4" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr28' class="singleright" onclick="analyzerequest(this, this.innerHTML);">28</td>
<td style="border-left:3px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">E1 <span class=crotchet>🎼</span><img style='transform: scaleX(-0.75) scaleY(-0.75);display:inline-block;width:11px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 41.2 <sub title="For any sharp below preceed by ctrl or control key">5</sub><input id="P5" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr29' class="singleright" onclick="analyzerequest(this, this.innerHTML);">29</td>
<td style="border-left:3px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">F1 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:1.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 43.7 <sub title="For any sharp below preceed by ctrl or control key">6</sub><input id="P6" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr30' class="singleright" onclick="analyzerequest(this, this.innerHTML);">30</td>
<td style="border-left:3px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">F#1 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:1.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><span style='margin-left:-2.5px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯</span></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 46.2 <input id="N6" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr31' class="singleright" onclick="analyzerequest(this, this.innerHTML);">31</td>
<td style="border-left:3px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">G1 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:2.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 49.0 <sub title="For any sharp below preceed by ctrl or control key">7</sub><input id="P7" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr32' class="singleright" onclick="analyzerequest(this, this.innerHTML);">32</td>
<td style="border-left:3px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">G#1 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:2.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><span style='margin-left:-2.5px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯</span></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 51.9 <input id="N7" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr33' class="singleright" onclick="analyzerequest(this, this.innerHTML);">33</td>
<td style="border-left:3px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">A1 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 55.0 <sub title="For any sharp below preceed by ctrl or control key">1</sub><input id="P1" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr34' class="singleright" onclick="analyzerequest(this, this.innerHTML);">34</td>
<td style="border-left:3px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">A#1 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:3px solid transparent;font-size:8px;' class=crotchet>♯</sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 58.3 <input id="N1" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr35' class="singleright" onclick="analyzerequest(this, this.innerHTML);">35</td>
<td style="border-left:3px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">B1 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:4.3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 61.7 <sub title="For any sharp below preceed by ctrl or control key"><sub title="For any sharp below preceed by ctrl or control key">2</sub><input id="P2" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr36' class="singleright" onclick="analyzerequest(this, this.innerHTML);">36</td>
<td style="border-left:2px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">C2 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:9px;margin-left:-6px;border-bottom:3.7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 65.4 <sub title="For any sharp below preceed by ctrl or control key">q</sub><input id="qq" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr37' class="singleright" onclick="analyzerequest(this, this.innerHTML);">37</td>
<td style="border-left:2px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">C#2 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:9px;margin-left:-6px;border-bottom:3.7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯<br></sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 69.3 <input id="oq" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr38' class="singleright" onclick="analyzerequest(this, this.innerHTML);">38</td>
<td style="border-left:2px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">D2 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:10px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 73.4 <sub title="For any sharp below preceed by ctrl or control key">r</sub><input id="qr" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr39' class="singleright" onclick="analyzerequest(this, this.innerHTML);">39</td>
<td style="border-left:2px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">D#2 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:10px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯<br></sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 77.8 <input id="or" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr40' class="singleright" onclick="analyzerequest(this, this.innerHTML);">40</td>
<td style="border-left:2px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">E2 <span class=crotchet>🎼</span><img style='transform: scaleX(-0.75) scaleY(-0.75);display:inline-block;width:11px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 82.4 <sub title="For any sharp below preceed by ctrl or control key">s</sub><input id="qs" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr41' class="singleright" onclick="analyzerequest(this, this.innerHTML);">41</td>
<td style="border-left:2px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">F2 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:1.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 87.3 <sub title="For any sharp below preceed by ctrl or control key">t</sub><input id="qt" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr42' class="singleright" onclick="analyzerequest(this, this.innerHTML);">42</td>
<td style="border-left:2px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">F#2 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:1.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><span style='margin-left:-2.5px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯</span></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 92.5 <input id="ot" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr43' class="singleright" onclick="analyzerequest(this, this.innerHTML);">43</td>
<td style="border-left:2px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">G2 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:2.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';"> 98.0 <sub title="For any sharp below preceed by ctrl or control key">u</sub><input id="qu" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr44' class="singleright" onclick="analyzerequest(this, this.innerHTML);">44</td>
<td style="border-left:2px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">G#2 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:2.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><span style='margin-left:-2.5px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯</span></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">103.8 <input id="ou" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr45' class="singleright" onclick="analyzerequest(this, this.innerHTML);">45</td>
<td style="border-left:2px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">A2 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">110.0 <sub title="For any sharp below preceed by ctrl or control key">o</sub><input id="qo" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr46' class="singleright" onclick="analyzerequest(this, this.innerHTML);">46</td>
<td style="border-left:2px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">A#2 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:3px solid transparent;font-size:8px;' class=crotchet>♯</sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">116.5 <input id="oo" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr47' class="singleright" onclick="analyzerequest(this, this.innerHTML);">47</td>
<td style="border-left:2px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">B2 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:4.3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">123.5 <sub title="For any sharp below preceed by ctrl or control key">p</sub><input id="qp" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr48' class="singleright" onclick="analyzerequest(this, this.innerHTML);">48</td>
<td style="border-left:1px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">C3 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:9px;margin-left:-6px;border-bottom:3.7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">130.8 <sub title="For any sharp below preceed by ctrl or control key">Q</sub><input id="PQ" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr49' class="singleright" onclick="analyzerequest(this, this.innerHTML);">49</td>
<td style="border-left:1px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">C#3 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:9px;margin-left:-6px;border-bottom:3.7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯<br></sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">138.6 <input id="NQ" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr50' class="singleright" onclick="analyzerequest(this, this.innerHTML);">50</td>
<td style="border-left:1px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">D3 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:10px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">146.8 <sub title="For any sharp below preceed by ctrl or control key">R</sub><input id="PR" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr51' class="singleright" onclick="analyzerequest(this, this.innerHTML);">51</td>
<td style="border-left:1px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">D#3 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:10px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯<br></sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">155.6 <input id="NR" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr52' class="singleright" onclick="analyzerequest(this, this.innerHTML);">52</td>
<td style="border-left:1px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">E3 <span class=crotchet>🎼</span><img style='transform: scaleX(-0.75) scaleY(-0.75);display:inline-block;width:11px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">164.8 <sub title="For any sharp below preceed by ctrl or control key">S</sub><input id="PS" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr53' class="singleright" onclick="analyzerequest(this, this.innerHTML);">53</td>
<td style="border-left:1px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">F3 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:1.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">174.6 <sub title="For any sharp below preceed by ctrl or control key">T</sub><input id="PT" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr54' class="singleright" onclick="analyzerequest(this, this.innerHTML);">54</td>
<td style="border-left:1px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">F#3 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:1.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><span style='margin-left:-2.5px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯</span></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">185.0 <input id="NT" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr55' class="singleright" onclick="analyzerequest(this, this.innerHTML);">55</td>
<td style="border-left:1px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">G3 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:2.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">196.0 <sub title="For any sharp below preceed by ctrl or control key">U</sub><input id="PU" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr56' class="singleright" onclick="analyzerequest(this, this.innerHTML);">56</td>
<td style="border-left:1px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">G#3 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:2.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><span style='margin-left:-2.5px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯</span></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">207.7 <input id="NU" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr57' class="singleright" onclick="analyzerequest(this, this.innerHTML);">57</td>
<td style="border-left:1px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">A3 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">220.0 <sub title="For any sharp below preceed by ctrl or control key">O</sub><input id="PO" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr58' class="singleright" onclick="analyzerequest(this, this.innerHTML);">58</td>
<td style="border-left:1px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">A#3 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:3px solid transparent;font-size:8px;' class=crotchet>♯</sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">233.1 <input id="NO" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr59' class="singleright" onclick="analyzerequest(this, this.innerHTML);">59</td>
<td style="border-left:1px solid purple;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">B3 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:4.3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">246.9 <sub title="For any sharp below preceed by ctrl or control key">P</sub><input id="PP" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr60' class="singleright" onclick="analyzerequest(this, this.innerHTML);">60</td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">C4 (middle C) <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:9px;margin-left:-6px;border-bottom:3.7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">261.6 <sub title="For any sharp below preceed by ctrl or control key">C</sub><input id="PC" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr61' class="singleright" onclick="analyzerequest(this, this.innerHTML);">61</td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">C#4 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:9px;margin-left:-6px;border-bottom:3.7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯<br></sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">277.2 <input id="NC" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr62' class="singleright" onclick="analyzerequest(this, this.innerHTML);">62</td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">D4 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:10px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">293.7 <sub title="For any sharp below preceed by ctrl or control key">D</sub><input id="PD" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr63' class="singleright" onclick="analyzerequest(this, this.innerHTML);">63</td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">D#4 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:10px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯<br></sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">311.1 <input id="ND" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr64' class="singleright" onclick="analyzerequest(this, this.innerHTML);">64</td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">E4 <span class=crotchet>🎼</span><img style='transform: scaleX(-0.75) scaleY(-0.75);display:inline-block;width:11px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">329.6 <sub title="For any sharp below preceed by ctrl or control key">E</sub><input id="PE" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr65' class="singleright" onclick="analyzerequest(this, this.innerHTML);">65</td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">F4 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:1.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">349.2 <sub title="For any sharp below preceed by ctrl or control key">F</sub><input id="PF" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr66' class="singleright" onclick="analyzerequest(this, this.innerHTML);">66</td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">F#4 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:1.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><span style='margin-left:-2.5px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯</span></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">370.0 <input id="NF" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr67' class="singleright" onclick="analyzerequest(this, this.innerHTML);">67</td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">G4 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:2.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">392.0 <sub title="For any sharp below preceed by ctrl or control key">G</sub><input id="PG" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr68' class="singleright" onclick="analyzerequest(this, this.innerHTML);">68</td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">G#4 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:2.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><span style='margin-left:-2.5px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯</span></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">415.3 <input id="NG" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr69' class="singleright" onclick="analyzerequest(this, this.innerHTML);">69</td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">A4 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">440.0 <sub title="For any sharp below preceed by ctrl or control key">A</sub><input id="PA" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr70' class="singleright" onclick="analyzerequest(this, this.innerHTML);">70</td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">A#4 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:3px solid transparent;font-size:8px;' class=crotchet>♯</sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">466.2 <input id="NA" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr71' class="singleright" onclick="analyzerequest(this, this.innerHTML);">71</td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">B4 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:4.3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">493.9 <sub title="For any sharp below preceed by ctrl or control key">B</sub><input id="PB" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr72' class="singleright" onclick="analyzerequest(this, this.innerHTML);">72</td>
<td style="border-right:1px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">C5 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:9px;margin-left:-6px;border-bottom:3.7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">523.3 <sub title="For any sharp below preceed by ctrl or control key">c</sub><input id="qc" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr73' class="singleright" onclick="analyzerequest(this, this.innerHTML);">73</td>
<td style="border-right:1px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">C#5 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:9px;margin-left:-6px;border-bottom:3.7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯<br></sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">554.4 <input id="oc" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr74' class="singleright" onclick="analyzerequest(this, this.innerHTML);">74</td>
<td style="border-right:1px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">D5 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:10px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">587.3 <sub title="For any sharp below preceed by ctrl or control key">d</sub><input id="qd" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr75' class="singleright" onclick="analyzerequest(this, this.innerHTML);">75</td>
<td style="border-right:1px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">D#5 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:10px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯<br></sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">622.3 <input id="od" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr76' class="singleright" onclick="analyzerequest(this, this.innerHTML);">76</td>
<td style="border-right:1px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">E5 <span class=crotchet>🎼</span><img style='transform: scaleX(-0.75) scaleY(-0.75);display:inline-block;width:11px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">659.3 <sub title="For any sharp below preceed by ctrl or control key">e</sub><input id="qe" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr77' class="singleright" onclick="analyzerequest(this, this.innerHTML);">77</td>
<td style="border-right:1px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">F5 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:1.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">698.5 <sub title="For any sharp below preceed by ctrl or control key">f</sub><input id="qf" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr78' class="singleright" onclick="analyzerequest(this, this.innerHTML);">78</td>
<td style="border-right:1px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">F#5 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:1.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><span style='margin-left:-2.5px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯</span></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">740.0 <input id="of" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr79' class="singleright" onclick="analyzerequest(this, this.innerHTML);">79</td>
<td style="border-right:1px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">G5 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:2.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">784.0 <sub title="For any sharp below preceed by ctrl or control key">g</sub><input id="qg" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr80' class="singleright" onclick="analyzerequest(this, this.innerHTML);">80</td>
<td style="border-right:1px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">G#5 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:2.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><span style='margin-left:-2.5px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯</span></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">830.6 <input id="og" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr81' class="singleright" onclick="analyzerequest(this, this.innerHTML);">81</td>
<td style="border-right:1px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">A5 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">880.0 <sub title="For any sharp below preceed by ctrl or control key">a</sub><input id="qa" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr82' class="singleright" onclick="analyzerequest(this, this.innerHTML);">82</td>
<td style="border-right:1px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">A#5 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:3px solid transparent;font-size:8px;' class=crotchet>♯</sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">932.3 <input id="oa" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr83' class="singleright" onclick="analyzerequest(this, this.innerHTML);">83</td>
<td style="border-right:1px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">B5 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:4.3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">987.8 <sub title="For any sharp below preceed by ctrl or control key">b</sub><input id="qb" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr84' class="singleright" onclick="analyzerequest(this, this.innerHTML);">84</td>
<td style="border-right:2px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">C6 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:9px;margin-left:-6px;border-bottom:3.7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">1046.5 <sub title="For any sharp below preceed by ctrl or control key">J</sub><input id="PJ" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr85' class="singleright" onclick="analyzerequest(this, this.innerHTML);">85</td>
<td style="border-right:2px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">C#6 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:9px;margin-left:-6px;border-bottom:3.7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯<br></sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">1108.7 <input id="NJ" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr86' class="singleright" onclick="analyzerequest(this, this.innerHTML);">86</td>
<td style="border-right:2px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">D6 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:10px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">1174.7 <sub title="For any sharp below preceed by ctrl or control key">K</sub><input id="PK" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr87' class="singleright" onclick="analyzerequest(this, this.innerHTML);">87</td>
<td style="border-right:2px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">D#6 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:10px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯<br></sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">1244.5 <input id="NK" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr88' class="singleright" onclick="analyzerequest(this, this.innerHTML);">88</td>
<td style="border-right:2px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">E6 <span class=crotchet>🎼</span><img style='transform: scaleX(-0.75) scaleY(-0.75);display:inline-block;width:11px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">1318.5 <sub title="For any sharp below preceed by ctrl or control key">L</sub><input id="PL" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr89' class="singleright" onclick="analyzerequest(this, this.innerHTML);">89</td>
<td style="border-right:2px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">F6 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:1.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">1396.9 <sub title="For any sharp below preceed by ctrl or control key">M</sub><input id="PM" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr90' class="singleright" onclick="analyzerequest(this, this.innerHTML);">90</td>
<td style="border-right:2px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">F#6 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:1.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><span style='margin-left:-2.5px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯</span></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">1480.0 <input id="NM" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr91' class="singleright" onclick="analyzerequest(this, this.innerHTML);">91</td>
<td style="border-right:2px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">G6 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:2.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">1568.0 <sub title="For any sharp below preceed by ctrl or control key">N</sub><input id="PN" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr92' class="singleright" onclick="analyzerequest(this, this.innerHTML);">92</td>
<td style="border-right:2px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">G#6 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:2.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><span style='margin-left:-2.5px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯</span></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">1661.2 <input id="NN" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr93' class="singleright" onclick="analyzerequest(this, this.innerHTML);">93</td>
<td style="border-right:2px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">A6 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">1760.0 <sub title="For any sharp below preceed by ctrl or control key">H</sub><input id="PH" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr94' class="singleright" onclick="analyzerequest(this, this.innerHTML);">94</td>
<td style="border-right:2px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">A#6 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:3px solid transparent;font-size:8px;' class=crotchet>♯</sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">1864.7 <input id="NH" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr95' class="singleright" onclick="analyzerequest(this, this.innerHTML);">95</td>
<td style="border-right:2px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">B6 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:4.3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">1975.5 <sub title="For any sharp below preceed by ctrl or control key">I</sub><input id="PI" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr96' class="singleright" onclick="analyzerequest(this, this.innerHTML);">96</td>
<td style="border-right:3px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">C7 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:9px;margin-left:-6px;border-bottom:3.7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">2093.0 <sub title="For any sharp below preceed by ctrl or control key">j</sub><input id="qj" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr97' class="singleright" onclick="analyzerequest(this, this.innerHTML);">97</td>
<td style="border-right:3px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">C#7 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:9px;margin-left:-6px;border-bottom:3.7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯<br></sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">2217.5 <input id="oj" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr98' class="singleright" onclick="analyzerequest(this, this.innerHTML);">98</td>
<td style="border-right:3px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">D7 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:10px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">2349.3 <sub title="For any sharp below preceed by ctrl or control key">k</sub><input id="qk" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr99' class="singleright" onclick="analyzerequest(this, this.innerHTML);">99</td>
<td style="border-right:3px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">D#7 <span class=crotchet>🎼</span><img style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:10px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯<br></sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">2489.0 <input id="ok" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr100' class="singleright" onclick="analyzerequest(this, this.innerHTML);">100</td>
<td style="border-right:3px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">E7 <span class=crotchet>🎼</span><img style='transform: scaleX(-0.75) scaleY(-0.75);display:inline-block;width:11px;margin-left:-6px;border-bottom:7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">2637.0 <sub title="For any sharp below preceed by ctrl or control key">l</sub><input id="ql" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr101' class="singleright" onclick="analyzerequest(this, this.innerHTML);">101</td>
<td style="border-right:3px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">F7 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:1.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">2793.8 <sub title="For any sharp below preceed by ctrl or control key">m</sub><input id="qm" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr102' class="singleright" onclick="analyzerequest(this, this.innerHTML);">102</td>
<td style="border-right:3px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">F#7 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:1.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><span style='margin-left:-2.5px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯</span></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">2960.0 <input id="om" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr103' class="singleright" onclick="analyzerequest(this, this.innerHTML);">103</td>
<td style="border-right:3px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">G7 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:2.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">3136.0 <sub title="For any sharp below preceed by ctrl or control key">n</sub><input id="qn" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr104' class="singleright" onclick="analyzerequest(this, this.innerHTML);">104</td>
<td style="border-right:3px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">G#7 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:2.2px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><span style='margin-left:-2.5px;border-bottom:6px solid transparent;font-size:8px;' class=crotchet>♯</span></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">3322.4 <input id="on" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr105' class="singleright" onclick="analyzerequest(this, this.innerHTML);">105</td>
<td style="border-right:3px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">A7 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">3520.0 <sub title="For any sharp below preceed by ctrl or control key">h</sub><input id="qh" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr bgcolor="#cccccc"><td id='tr106' class="singleright" onclick="analyzerequest(this, this.innerHTML);">106</td>
<td style="border-right:3px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">A#7 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img><sup style='margin-left:-2.5px;margin-top:-3px;border-bottom:3px solid transparent;font-size:8px;' class=crotchet>♯</sub></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">3729.3 <input id="oh" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr107' class="singleright" onclick="analyzerequest(this, this.innerHTML);">107</td>
<td style="border-right:3px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">B7 <span class=crotchet>🎼</span><img style='display:inline-block;width:10px;margin-left:-6px;border-bottom:4.3px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick="analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">3951.1 <sub title="For any sharp below preceed by ctrl or control key">i</sub><input id="qi" title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick="nsuffix='!-0.5';" value="🎶"></input></td></tr>
<tr><td id='tr108' class="singleright" onclick="analyzerequest(this, this.innerHTML);">108</td>
<td style="border-right:4px solid yellow;" class="singleright" onclick="analyzerequest(this, this.innerHTML);">C8 <span class=crotchet>🎼</span><img id="PX" style='transform: scaleX(-1) scaleY(-1);display:inline-block;width:9px;margin-left:-6px;border-bottom:3.7px solid transparent;mix-blend-mode:multiply;' src=crotchet.jpg class=crotchet></img></td>
<td class="singleright" onclick=" document.getElementById('PX').click(); analyzerequest(this, this.innerHTML);" onmouseover="nsuffix='';">4186.0 <sub title="For any sharp below preceed by ctrl or control key">X</sub><input title="Quaver here but crotchet at link to left" style="width:10px;text-decoration:none;" type=button onmouseover="nsuffix='!-0.5';" onclick=" document.getElementById('PX').click(); nsuffix='!-0.5';" value="🎶"></input></td>
</tr></tbody></table>
</td>
<td width="195" id='mytd2'> </td>
<td valign="top">
<div id=vspacer></div>
<h1 align='center' id='myh1right'>Music <a title='Note/Scale Player' onclick=" document.getElementById('myselpos').value='left'; rotatemaybe(document.getElementById('myselpos')); this.style.textDecoration='none'; document.getElementById('ac').style.textDecoration='underline'; " href='#' style='text-decoration: none;' id='ans'>Note/Scale</a> Player & <a title='Composer Mode' onclick=" document.getElementById('myselpos').value='Top'; rotatemaybe(document.getElementById('myselpos')); this.style.textDecoration='none'; document.getElementById('ans').style.textDecoration='underline'; " href='#top' style='text-decoration: underline;' id='ac'>Composer</a></h1>
<h2 align='center'>Thanks to <a target=_blank href='https://github.com/mudcube/MIDI.js' title='wow!'>mudcube</a> and <a target=_blank href='http://www.glassarmonica.com/science/frequency_midi.php' title='great table!'>The Glass Armonica</a></h2>
<h3 id=myh3 align='center'><span id=spanh3>Via </span><iframe class=ask title='vs Audio Web' frameborder=0 scrolling='no' style='border-bottom:1px solid yellow;overflow:hidden;background-color:yellow;display:inline-block;width:440px;height:28px;max-height:28px;' width=440 height=28 src='/HTMLCSS/web_audio.htm?vsmudcube=YdaS'></iframe><br>RJM Programming - May, 2015 <input style='display:none;' id=iready type=button onclick='onck();' value='Ready?'></input></h3>
<h4 align='center'>Click on links in table at <select onchange='rotatemaybe(this);' id='myselpos'><option value='left'>left</option><option value='top'>top</option><option value='Left'>Left</option><option value='Top'>Top</option></select> for scales/Song Creation</h4>
<div id='eqd'>
<div id='scales' style='display:block;'>
<h4 align='center'>Equations:</h4>
<p align='center'>
f = frequency<br>
m = midi note number</p>
<p align='center'>f = 27.5 * 2<sup>((m - 21)/12)</sup></p>
<p align='center'>m = (12/ln(2)) * ln(f/27.5) + 21</p>
<p align='center'>Note: Fractional midi note number will give you 'cents'<br> from standard pitch: e.g. 66.33 would be 33 cents above F#4</p><!--/td></tr-->
<!--tr><td-->
</div>
<div id='composition' style='display:none;'>
<iframe style="display:none;" id="myciframe" src="./MyScale.php?pleasecheck=y"></iframe><input type="hidden" name="hsheetmusic" id="hsheetmusic" value="" />
<br><input onclick="thism=1; azzgoon=true; hit=1; document.getElementById('hsheetmusic').value=document.getElementById('sheetmusic').value;" id="play" type="submit" value="Play" /> <select id='playlist' onchange="document.getElementById('myciframe').src='./MyScale.php?retrieve=' + this.value;"><option value="">MIDI code</option></select> (<select id='oselt' onchange='preask(this.value);'><option value=''>Others ...</option><option value='rest'>Rest</option><option value='clear'>Clear</option><option value='0'>Volume</option><option value='largo'>Largo</option><option value='larghetto'>Larghetto</option><option value='adagio'>Adagio</option><option value='andante'>Andante</option><option value='moderato'>Moderato</option><option value='allegro'>Allegro</option><option value='presto'>Presto</option><option value='slowby'>slowby</option><option value='fastx'>fastx</option></select>) as below:
<form target="myciframe" style='display:none;' id="myform" action="./MyScale.php" method="POST">
<input type="hidden" name="savemusic" id="savemusic" value="" />
<input onclick=" if (document.getElementById('savename').value != '' && document.getElementById('sheetmusic').value != '' && document.getElementById('playlist').innerHTML.indexOf('>' + document.getElementById('savename').value + '<') == -1) { document.getElementById('playlist').innerHTML+='<option value=' + document.getElementById('savename').value.replace(/ /g, '%20') + '>' + document.getElementById('savename').value + '</option>'; document.getElementById('savemusic').value=document.getElementById('sheetmusic').value; } document.getElementById('playlist').value=''; " type="submit" name="save" id="save" value="Save As ... " /><input size=30 type="text" name="savename" id="savename" value="" />
</form>
<textarea title="add a suffix of + if two hands are playing together; normal word is a speed descriptor; normal number is a note (and abscissa sets of 3 characters (zero left padded) play notes close behind, like chords); -1 is crotchet, -2 is minum, -0.5 is quaver, -0.25 is semi-quaver etcetera; 0 (alone) is for a rest of the duration above; 0127 is normal loudness, etcetera" onclick="document.getElementById('mytable').style.opacity=0.2; this.zIndex=50; document.getElementById('savename').zIndex=50; document.getElementById('save').zIndex=50; " onchange=" document.getElementById('savemusic').value=this.value; document.getElementById('hsheetmusic').value=this.value; if (this.value != '') { document.getElementById('myform').style.display='inline'; } else { document.getElementById('myform').style.display='none'; } " rows=10 cols=80 name="sheetmusic" id="sheetmusic" value=""></textarea><br><div id='tabr'></div><br>
</div>
<br><br>
</div><div class='cdmeter' id='dmeter' style='margin-top:0px;'>
<table align='center'><tbody><tr><td>
<meter align='center' class='cmeter' id='mymeter1' min="0.0" max="5000.0" value="0.0" style='width:480px;'></meter>
</td></tr></tbody></table></div></td></tr>
</tbody>
</table>
<!--/div-->
<!--input id=iready type=button onclick='document.body.innerHTML="<iframe src=./MyScale.htm style=width:100%;height:100vh;position:absolute;top:0px;left:0px;></iframe>";' style='position:absolute;top:0px;left:0px;' value='Ready?'></input-->
<script type="text/javascript">
function theeval(what) {
//alert(parent.document.getElementById('myifr').title);
var whats=what.split('var note'), thenum='', theih='', theid='';
for (var ij=1; ij<whats.length; ij++) {
thenum='' + whats[ij].split('=')[1].split(';')[0].trim();
theih=document.getElementsByTagName('table')[0].outerHTML.split('"tr' + thenum + '"')[1].split('</tr>')[0];
theid=theih.split(' id="')[eval(-1 + theih.split(' id="').length)].split('"')[0];
//alert('thenum=' + thenum + ' and theid=' + theid + ' and theih=' + theih);
if (parent.document.URL.indexOf('those_n') != -1) {
if (parent.document.getElementById('pih')) {
theih=document.getElementsByTagName('table')[0].outerHTML.split('"tr' + thenum + '"')[1].split('</tr>')[0].split('>' + thenum + '</td>')[1].split('>')[1].split('&')[0].split('0')[0].split('1')[0].split('2')[0].split('3')[0].split('4')[0].split('5')[0].split('6')[0].split('7')[0].split('8')[0].split('9')[0];
parent.document.getElementById('pih').value='' + theih
}
}
document.getElementById(theid).click();
}
}
function andthen() {
var locationhash=('' + location.hash);
if (parent.document.getElementById('myifr')) {
if (parent.document.getElementById('myifr').title.indexOf('#') != -1) {
locationhash='#' + parent.document.getElementById('myifr').title.split('#')[1];
}
}
var afifty=fifty.split(",");
var anlength=nlength.split(",");
var aone_twenty_seven=one_twenty_seven.split(",");
var igh, lastv=aone_twenty_seven[0], chg=false;
if (navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile/i)) {
var subs=document.getElementsByTagName('sub');
for (var isubs=0; isubs<subs.length; isubs++) {
subs[isubs].style.display='none';
}
}
if (document.URL.indexOf("#") != -1) document.getElementById('mode').innerHTML='<option value="Composing">Composing</option>';
if (document.URL.indexOf("#top") != -1) {
document.getElementById('ac').style.textDecoration='none';
}
if (1 == 1 || (sm == "" && document.URL.indexOf("#") == -1)) {
//alert(locationhash);
top.document.title=locationhash;
//document.getElementById('PV').click();
// Name those Notes game
if ((locationhash.split('note=')[1] ? locationhash.split('note=')[1].split('&')[0] : '') != '' ||
(locationhash.split('song=')[1] ? locationhash.split('song=')[1].split('&')[0] : '') != '') {
offset=eval((locationhash.split('note=')[1] ? locationhash.split('note=')[1].split('&')[0] : '0'));
var pih=null, additionals="", found=0;
var tdsare=document.getElementsByTagName('td');
var pselans=parent.document.getElementById('selans');
if (eval(afifty[0]) == 0) {
if ((locationhash.split('nlength=')[1] ? locationhash.split('nlength=')[1].split('&')[0] : '') == '') {
nlength = (Math.floor(Math.random() * (6000 - 250) + 250) / 1000);
}
}
if (pselans != null) {
//alert('yes');
if (eval(afifty[0]) == 0) {
fifty = Math.floor(Math.random() * (108 - offset - 21) + 21);
afifty[0] = fifty;
pih=parent.document.getElementById('apih');
if (pih != null) {
//alert('Yes');
if (pih.value == '' || pih.value == '0') pih.value=fifty;
}
pih=parent.document.getElementById('pih');
if (pih != null) {
//alert('yEs');
chg = (pih.value == '' || pih.value == '0');
if (pih.value == '' || pih.value == '0') pih.value=fifty;
}
}
//alert('yeS ' + pselans.innerHTML);
if (pselans.innerHTML.indexOf(".") == -1) { // || 11 == 11) {
var itd=0, ih="";
for (itd=0; itd<tdsare.length; itd++) {
if (tdsare[itd].innerHTML.indexOf("<") == -1) {
if (tdsare[itd].innerHTML.indexOf(".") == -1 && tdsare[itd].innerHTML.substring(0,1) >= '1' && tdsare[itd].innerHTML.substring(0,1) <= '9') {
additionals+='<option value="' + tdsare[itd].innerHTML + ',';
if (eval(tdsare[itd].innerHTML) == afifty[0]) {
found=1; //Math.floor(Math.random() * (3 - 1) + 1);
doit=eval(found % 2);
}
} else if (tdsare[itd].innerHTML.indexOf(".") == -1) {
ih=tdsare[itd].innerHTML.replace(" (middle C)", "");
if (found > 0) {
found=0;
if (pih != null) {
if (chg) pih.value=ih;
}
}
additionals+=(tdsare[itd].innerHTML.replace(" (middle C)", "") + ',');
if (doit == 0) {
alert('huh');
tdsare[itd].click();
}
} else {
additionals+=(tdsare[itd].innerHTML + '">' + ih + '</option>');
}
}
}
} else {
var getnote=pselans.innerHTML.split('"' + afifty[0] + ',');
var thenote=getnote[1].split(",");
if (pih != null) {
//alert(chg + " " + pih.value + " will get " + thenote[0]);
if (chg || (pih.value == '' || pih.value == '0')) pih.value=thenote[0];
}
}
if (pselans.innerHTML.indexOf(".") == -1) pselans.innerHTML+=additionals;
}
if (eval(afifty[0]) == 0) {
fifty = Math.floor(Math.random() * (108 - offset - 21) + 21);
afifty[0] = fifty;
pih=parent.document.getElementById('apih');
if (pih != null) {
if (pih.value == '' || pih.value == '0') pih.value=fifty;
}
pih=parent.document.getElementById('pih');
if (pih != null) {
if (pih.value == '' || pih.value == '0') pih.value=fifty;
}
}
if (afifty[0] >= 21 && afifty[0] <= 108) {
var thingtodo=" MIDI.loadPlugin({ \n";
thingtodo+=" soundfontUrl: './soundfont/', \n";
thingtodo+=" instrument: 'acoustic_grand_piano', \n";
thingtodo+=" onprogress: function(state, progress) { \n";
thingtodo+=" console.log(state, progress); \n";
thingtodo+=" }, \n";
thingtodo+=" onsuccess: function() { \n";
//thingtodo+=" MIDI.noteOn(0, 1, 1, 0); \n";
thingtodo+=" var delay = 0; \n";
thingtodo+=" var note = " + afifty[0] + "; \n";
thingtodo+=" var velocity = " + aone_twenty_seven[0] + "; \n";
thingtodo+=" MIDI.setVolume(0, " + eval(hit * eval('' + aone_twenty_seven[0])) + "); \n";
for (igh=0; igh<afifty.length; igh++) {
if (igh > 0) {
thingtodo+=" var note" + igh + " = " + afifty[igh] + "; \n";
thingtodo+=" MIDI.noteOn(0, note" + igh + ", velocity, delay); \n";
} else {
thingtodo+=" MIDI.noteOn(0, note, velocity, delay); \n";
}
if (aone_twenty_seven.length > eval(igh + 1)) {
if (aone_twenty_seven[eval(igh + 1)] != aone_twenty_seven[igh]) {
thingtodo+=" MIDI.setVolume(0, " + eval(hit * eval('' + aone_twenty_seven[eval(igh + 1)])) + "); \n";
lastv=aone_twenty_seven[eval(igh + 1)];
}
} else if (aone_twenty_seven[aone_twenty_seven.length - 1] != lastv) {
thingtodo+=" MIDI.setVolume(0, " + eval(hit * eval('' + aone_twenty_seven[aone_twenty_seven.length - 1])) + "); \n";
lastv=aone_twenty_seven[aone_twenty_seven.length - 1];
}
}
for (igh=0; igh<afifty.length; igh++) {
if (anlength.length > igh) {
thingtodo+=" MIDI.noteOff(0, " + ("note" + igh).replace("note0", "note") + ", delay + " + anlength[igh] + "); \n\n";
} else {
thingtodo+=" MIDI.noteOff(0, " + ("note" + igh).replace("note0", "note") + ", delay + " + anlength[anlength.length - 1] + "); \n\n";
}
}
hit=1;
thingtodo+=" } \n";
thingtodo+=" }); \n";
//if (!chg && document.URL.indexOf(",") != -1) alert(document.URL + " " + thingtodo);
//alert('doit=' + doit + ' ' + thingtodo);
if (doit == 1) { // if (document.getElementById('conduit').value != '') {
if (document.getElementById('conduit').value != '') { // if (document.URL.indexOf('webaudio=') != -1) {
//alert('dOit=' + doit + ' ' + thingtodo);
//alert(thingtodo.split('onsuccess: function() {')[1].split('}')[0].replace(/MIDI\./g, 'MIDI'));
if (azzgoon || top.document.URL.indexOf('_those_') != -1) { theeval(thingtodo.split('onsuccess: function() {')[1].split('}')[0].replace(/ MIDI\.noteO/g, ' preMIDInoteO').replace(/ MIDI\./g, ' MIDI')); } // play music
} else {
if (azzgoon || 7 == 7) { eval(thingtodo); }
}
}
}
} else {
//MIDI.loader = new widgets.Loader;
if (document.getElementById('conduit').value != '') { // if (document.URL.indexOf('webaudio=') != -1) {
plan="var delay = 0; // play one note every quarter second " + String.fromCharCode(10);
plan+="var note = 50; // the MIDI note " + String.fromCharCode(10);
plan+="var velocity = 127; // how hard the note hits " + String.fromCharCode(10);
plan+="MIDIsetVolume(0, 127); " + String.fromCharCode(10);
plan+="MIDInoteOn(0,note,velocity,delay); " + String.fromCharCode(10);
plan+="MIDInoteOff(0,note,delay + 0.75); " + String.fromCharCode(10);
alert('hUh');
eval(plan.replace(/ MIDI\.noteO/g, ' preMIDInoteO').replace(/ MIDI\./g, ' MIDI')); // play music
} else {
alert(5679);
MIDI.loadPlugin({
soundfontUrl: "./soundfont/",
instrument: "acoustic_grand_piano",
onprogress: function(state, progress) {
console.log(state, progress);
},
callback: doItAgain,
onsuccess: function() {
var delay = 0; // play one note every quarter second
var note = 50; //fifty; // the MIDI note
var velocity = 127; //one_twenty_seven; // how hard the note hits
// play the note
MIDI.setVolume(0, eval(hit * 127));
hit=1;
MIDI.noteOn(0, note, velocity, delay);
MIDI.noteOff(0, note, delay + 0.75);
}
});
}
}
}
}
window.onload = function () {
var doit=1, offset=0;
populatesel();
var afifty=fifty.split(",");
var anlength=nlength.split(",");
var aone_twenty_seven=one_twenty_seven.split(",");
var igh, lastv=aone_twenty_seven[0], chg=false;
if (navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile/i)) {
var subs=document.getElementsByTagName('sub');
for (var isubs=0; isubs<subs.length; isubs++) {
subs[isubs].style.display='none';
}
}
if (document.URL.indexOf("#") != -1) document.getElementById('mode').innerHTML='<option value="Composing">Composing</option>';
if (document.URL.indexOf("#top") != -1) {
document.getElementById('ac').style.textDecoration='none';
}
if (sm == "" && document.URL.indexOf("#") == -1) {
// Name those Notes game
if ((location.search.split('note=')[1] ? location.search.split('note=')[1].split('&')[0] : '') != '' ||
(location.search.split('song=')[1] ? location.search.split('song=')[1].split('&')[0] : '') != '') {
offset=eval((location.search.split('note=')[1] ? location.search.split('note=')[1].split('&')[0] : '0'));
var pih=null, additionals="", found=0;
var tdsare=document.getElementsByTagName('td');
var pselans=parent.document.getElementById('selans');
if (eval(afifty[0]) == 0) {
if ((location.search.split('nlength=')[1] ? location.search.split('nlength=')[1].split('&')[0] : '') == '') {
nlength = (Math.floor(Math.random() * (6000 - 250) + 250) / 1000);
}
}
if (pselans != null) {
if (eval(afifty[0]) == 0) {
fifty = Math.floor(Math.random() * (108 - offset - 21) + 21);
afifty[0] = fifty;
pih=parent.document.getElementById('apih');
if (pih != null) {
if (pih.value == '' || pih.value == '0') pih.value=fifty;
}
pih=parent.document.getElementById('pih');
if (pih != null) {
chg = (pih.value == '' || pih.value == '0');
if (pih.value == '' || pih.value == '0') pih.value=fifty;
}
}
if (pselans.innerHTML.indexOf(".") == -1) { // || 11 == 11) {
var itd=0, ih="";
for (itd=0; itd<tdsare.length; itd++) {
if (tdsare[itd].innerHTML.indexOf("<") == -1) {
if (tdsare[itd].innerHTML.indexOf(".") == -1 && tdsare[itd].innerHTML.substring(0,1) >= '1' && tdsare[itd].innerHTML.substring(0,1) <= '9') {
additionals+='<option value="' + tdsare[itd].innerHTML + ',';
if (eval(tdsare[itd].innerHTML) == afifty[0]) {
found=1; //Math.floor(Math.random() * (3 - 1) + 1);
doit=eval(found % 2);
}
} else if (tdsare[itd].innerHTML.indexOf(".") == -1) {
ih=tdsare[itd].innerHTML.replace(" (middle C)", "");
if (found > 0) {
found=0;
if (pih != null) {
if (chg) pih.value=ih;
}
}
additionals+=(tdsare[itd].innerHTML.replace(" (middle C)", "") + ',');
if (doit == 0) {
tdsare[itd].click();
}
} else {
additionals+=(tdsare[itd].innerHTML + '">' + ih + '</option>');
}
}
}
} else {
var getnote=pselans.innerHTML.split('"' + afifty[0] + ',');
var thenote=getnote[1].split(",");
if (pih != null) {
//alert(chg + " " + pih.value + " will get " + thenote[0]);
if (chg || (pih.value == '' || pih.value == '0')) pih.value=thenote[0];
}
}
if (pselans.innerHTML.indexOf(".") == -1) pselans.innerHTML+=additionals;
}
if (eval(afifty[0]) == 0) {
fifty = Math.floor(Math.random() * (108 - offset - 21) + 21);
afifty[0] = fifty;
pih=parent.document.getElementById('apih');
if (pih != null) {
if (pih.value == '' || pih.value == '0') pih.value=fifty;
}
pih=parent.document.getElementById('pih');
if (pih != null) {
if (pih.value == '' || pih.value == '0') pih.value=fifty;
}
}
if (afifty[0] >= 21 && afifty[0] <= 108) {
var thingtodo=" MIDI.loadPlugin({ \n";
thingtodo+=" soundfontUrl: './soundfont/', \n";
thingtodo+=" instrument: 'acoustic_grand_piano', \n";
thingtodo+=" onprogress: function(state, progress) { \n";
thingtodo+=" console.log(state, progress); \n";
thingtodo+=" }, \n";
thingtodo+=" onsuccess: function() { \n";
//thingtodo+=" MIDI.noteOn(0, 1, 1, 0); \n";
thingtodo+=" var delay = 0; \n";
thingtodo+=" var note = " + afifty[0] + "; \n";
thingtodo+=" var velocity = " + aone_twenty_seven[0] + "; \n";
thingtodo+=" MIDI.setVolume(0, " + eval(hit * eval('' + aone_twenty_seven[0])) + "); \n";
for (igh=0; igh<afifty.length; igh++) {
if (igh > 0) {
thingtodo+=" var note" + igh + " = " + afifty[igh] + "; \n";
thingtodo+=" MIDI.noteOn(0, note" + igh + ", velocity, delay); \n";
} else {
thingtodo+=" MIDI.noteOn(0, note, velocity, delay); \n";
}
if (aone_twenty_seven.length > eval(igh + 1)) {
if (aone_twenty_seven[eval(igh + 1)] != aone_twenty_seven[igh]) {
thingtodo+=" MIDI.setVolume(0, " + eval(hit * eval('' + aone_twenty_seven[eval(igh + 1)])) + "); \n";
lastv=aone_twenty_seven[eval(igh + 1)];
}
} else if (aone_twenty_seven[aone_twenty_seven.length - 1] != lastv) {
thingtodo+=" MIDI.setVolume(0, " + eval(hit * eval('' + aone_twenty_seven[aone_twenty_seven.length - 1])) + "); \n";
lastv=aone_twenty_seven[aone_twenty_seven.length - 1];
}
}
for (igh=0; igh<afifty.length; igh++) {
if (anlength.length > igh) {
thingtodo+=" MIDI.noteOff(0, " + ("note" + igh).replace("note0", "note") + ", delay + " + anlength[igh] + "); \n\n";
} else {
thingtodo+=" MIDI.noteOff(0, " + ("note" + igh).replace("note0", "note") + ", delay + " + anlength[anlength.length - 1] + "); \n\n";
}
}
hit=1;
thingtodo+=" } \n";
thingtodo+=" }); \n";
//if (!chg && document.URL.indexOf(",") != -1) alert(document.URL + " " + thingtodo);
if (doit == 1) { // if (document.getElementById('conduit').value != '') {
if (document.getElementById('conduit').value != '') { // if (document.URL.indexOf('webaudio=') != -1) {
//alert(thingtodo.split('onsuccess: function() {')[1].split('}')[0].replace(/MIDI\./g, 'MIDI'));
if (azzgoon) { eval(thingtodo.split('onsuccess: function() {')[1].split('}')[0].replace(/ MIDI\.noteO/g, ' preMIDInoteO').replace(/ MIDI\./g, ' MIDI')); } // play music
} else {
if (azzgoon) { eval(thingtodo); }
}
}
}
} else {
//MIDI.loader = new widgets.Loader;
if (document.getElementById('conduit').value != '') { // if (document.URL.indexOf('webaudio=') != -1) {
plan="var delay = 0; // play one note every quarter second " + String.fromCharCode(10);
plan+="var note = 50; // the MIDI note " + String.fromCharCode(10);
plan+="var velocity = 127; // how hard the note hits " + String.fromCharCode(10);
plan+="MIDIsetVolume(0, 127); " + String.fromCharCode(10);
plan+="MIDInoteOn(0,note,velocity,delay); " + String.fromCharCode(10);
plan+="MIDInoteOff(0,note,delay + 0.75); " + String.fromCharCode(10);
//alert(plan.replace(/MIDI\./g, 'MIDI'));
eval(plan.replace(/ MIDI\.noteO/g, ' preMIDInoteO').replace(/ MIDI\./g, ' MIDI')); // play music
} else {
MIDI.loadPlugin({
soundfontUrl: "./soundfont/",
instrument: "acoustic_grand_piano",
onprogress: function(state, progress) {
console.log(state, progress);
},
callback: doItAgain,
onsuccess: function() {
var delay = 0; // play one note every quarter second
var note = 50; //fifty; // the MIDI note
var velocity = 127; //one_twenty_seven; // how hard the note hits
// play the note
MIDI.setVolume(0, eval(hit * 127));
hit=1;
MIDI.noteOn(0, note, velocity, delay);
MIDI.noteOff(0, note, delay + 0.75);
}
});
}
}
}
};
function doItAgain() {
if (document.getElementById('conduit').value != '') { // if (document.URL.indexOf('webaudio=') != -1) {
startPlay();
} else {
MIDI.loadPlugin({
soundfontUrl: "./soundfont/",
instrument: "acoustic_grand_piano",
//,targetFormat: "ogg"
onprogress: function (event) {
console.log(state, progress);
}
,callback: startPlay
});
}
};
function startPlay() {
if (document.getElementById('conduit').value != '') { // if (document.URL.indexOf('webaudio=') != -1) {
plan="var delay = 0; // play one note every quarter second " + String.fromCharCode(10);
plan+="var note = 50; // the MIDI note " + String.fromCharCode(10);
plan+="var velocity = 127; // how hard the note hits " + String.fromCharCode(10);
plan+="MIDIsetVolume(0, 127); " + String.fromCharCode(10);
plan+="MIDInoteOn(0,note,velocity,delay); " + String.fromCharCode(10);
plan+="MIDInoteOff(0,note,delay + 0.75); " + String.fromCharCode(10);
//alert(plan.replace(/MIDI\./g, 'MIDI'));
if (azgoon) { eval(plan.replace(/ MIDI\.noteO/g, ' preMIDInoteO').replace(/ MIDI\./g, ' MIDI')); } // play music
} else if (azgoon) {
var delay = 0; // play one note every quarter second
var note = 50; //fifty; // the MIDI note
var velocity = 127; //one_twenty_seven; // how hard the note hits
// play the note
MIDI.setVolume(0, eval(hit * 127));
hit=1;
MIDI.noteOn(0, note, velocity, delay);
MIDI.noteOff(0, note, delay + 0.75);
}
}
if (!lhdone) {
if ((document.URL + '!').indexOf('?note=500!') != -1) {
setTimeout(checkmore, 50);
} //else {
// alert(document.URL);
//}
}
</script>
<script src="../inc/shim/Base64.js" type="text/javascript"></script>
<script src="../inc/shim/Base64binary.js" type="text/javascript"></script>
<script src="../inc/shim/WebAudioAPI.js" type="text/javascript"></script>
<script src="../js/midi/audioDetect.js" type="text/javascript"></script>
<script src="../js/midi/gm.js" type="text/javascript"></script>
<script src="../js/midi/loader.js" type="text/javascript"></script>
<script src="../js/midi/plugin.audiotag.js" type="text/javascript"></script>
<script src="../js/midi/plugin.webaudio.js" type="text/javascript"></script>
<script src="../js/midi/plugin.webmidi.js" type="text/javascript"></script>
<script src="../js/util/dom_request_xhr.js" type="text/javascript"></script>
<script src="../js/util/dom_request_script.js" type="text/javascript"></script>
<!-- midi.js package -->
<!--script src="../js/MIDI/WebAudioAPI.js" type="text/javascript"></script>
<script src="../js/MIDI/AudioDetect.js" type="text/javascript"></script>
<script src="../js/MIDI/LoadPlugin.js" type="text/javascript"></script>
<script src="../js/MIDI/Plugin.js" type="text/javascript"></script>
<script src="../js/MIDI/Player.js" type="text/javascript"></script>
<script src="../js/DOM/DOMLoader.XMLHttp.js" type="text/javascript"></script>
<script src="../js/base64/Base64.js" type="text/javascript"></script>
<script src="../js/base64/base64binary.js" type="text/javascript"></script>
<script src="../js/widgets/loader.js" type="text/javascript"></script>
<script src="../js/debug.js" type="text/javascript"></script-->
<input type=hidden id=conduit value=''></input><input type=hidden id=cmdconduit value=''></input>
</body>
</html>