no file selected
<!DOCTYPE html> <html> <head> <title>Read MIDI File</title> <script src="JZZ.js"></script> <script src="JZZ.midi.SMF.js"></script> <script src="JZZ.synth.Tiny.js"></script> </head> <body> <h1>Read MIDI File</h1> <h2>from file:</h2> <p><input type=file id=file size=80 onchange='fromFile();'></p> <h2>from URL:</h2> <form onsubmit='fromURL(); return false;'> <p><input type=text id=url size=80><input type=submit value=Submit...></p> </form> <h2>from Base64 string: <button onclick='fromBase64();'>Read...</button></h2> <p id=log>no file selected</p> <p><button id=btn onclick='playStop()' disabled>Play</button></p> <script><!-- var log = document.getElementById('log'); var btn = document.getElementById('btn'); function report(s) { return function() { log.innerHTML = s; }; } JZZ.synth.Tiny.register('Web Audio'); var out = JZZ().or(report('Cannot start MIDI engine!')).openMidiOut().or(report('Cannot open MIDI Out!')); var player; var playing = false; function clear() { if (player) player.stop(); playing = false; log.innerHTML = 'please wait...'; btn.innerHTML = 'Play'; btn.disabled = true; } function load(data, name) { try { player = JZZ.MIDI.SMF(data).player(); player.connect(out); player.onEnd = function() { playing = false; btn.innerHTML = 'Play'; } playing = true; player.play(); log.innerHTML = name; btn.innerHTML = 'Stop'; btn.disabled = false; } catch (e) { log.innerHTML = e; } } function playStop() { if (playing) { player.stop(); playing = false; btn.innerHTML = 'Play'; } else { player.play(); playing = true; btn.innerHTML = 'Stop'; } } function fromFile() { if (window.FileReader) { clear(); var reader = new FileReader(); var f = document.getElementById('file').files[0]; reader.onload = function(e) { var data = ''; var bytes = new Uint8Array(e.target.result); for (var i = 0; i < bytes.length; i++) { data += String.fromCharCode(bytes[i]); } load(data, f.name); }; reader.readAsArrayBuffer(f); } else log.innerHTML = 'File API is not supported in this browser.'; } function fromURL() { clear(); var url = document.getElementById('url').value; try { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4) { if (this.status == 200) { var r, i; var data = ''; r = xhttp.response; if (r instanceof ArrayBuffer) { r = new Uint8Array(r); for (i = 0; i < r.length; i++) data += String.fromCharCode(r[i]); } else { // for really antique browsers r = xhttp.responseText; for (i = 0; i < r.length; i++) data += String.fromCharCode(r.charCodeAt(i) & 0xff); } load(data, url); } else { log.innerHTML = 'XMLHttpRequest error'; } } }; try { xhttp.responseType = 'arraybuffer'; } catch (e) {} xhttp.overrideMimeType('text/plain; charset=x-user-defined'); xhttp.open('GET', url, true); xhttp.send(); } catch (e) { log.innerHTML = 'XMLHttpRequest error'; } } var data='\ TVRoZAAAAAYAAQADAGRNVHJrAAAAGgD/AwtMaXR0bGUgTGFtZQD/UQMKLCsA/y8ATVRyawAAAPMA/wMG\ THlyaWNzAP8BGEBUTWFyeSBXYXMgQSBMaXR0bGUgTGFtZWT/AQNcTWFL/wEDcnkgGf8BBHdhcyAy/wEC\ YSAy/wEDbGl0Mv8BBHRsZSAy/wEFbGFtZSxk/wEEL0xpdDL/AQR0bGUgMv8BBWxhbWUsZP8BBC9MaXQy\ /wEEdGxlIDL/AQVsYW1lLGT/AQMvTWFL/wEDcnkgGf8BBHdhcyAy/wECYSAy/wEDbGl0Mv8BBHRsZSAy\ /wEFbGFtZSwy/wEDL0EgMv8BA2xpdDL/AQR0bGUgMv8BBWxhbWUgMv8BBHdhcyAy/wEEc2hlIQD/LwBN\ VHJrAAAA8gD/AwVNdXNpYwDAC2SQQH9LgEBAAJA+fxmAPkAAkDx/MoA8QACQPn8ygD5AAJBAfzKAQEAA\ kEB/MoBAQACQQH9agEBACpA+fzKAPkAAkD5/MoA+QACQPn9agD5ACpBAfzKAQEAAkEN/MoBDQACQQ39a\ gENACpBAf0uAQEAAkD5/GYA+QACQPH8ygDxAAJA+fzKAPkAAkEB/MoBAQACQQH8ygEBAAJBAfzKAQEAZ\ kEB/GYBAQACQPn8ygD5AAJA+fzKAPkAAkEB/MoBAQACQPn8ygD5AAJA8f2RAZABDZABIf1qAPEAAQEAA\ Q0AASEAK/y8A'; function fromBase64() { clear(); load(JZZ.lib.fromBase64(data), 'Base64 data'); } --></script> </body> </html>
Proxy is a little server-side script that allows reading files from other domain as if they were at your own domain.
It can be as simple as this:
<?php $url = $_REQUEST['url']; if ($fp = fopen($url, "r")) while ($str = fread($fp, 1024)) echo $str; ?>
Make sure (or ask your hosting provider) that allow_url_fopen = On in your php settings.
All you have to do now, is to change
xhttp.open('GET', url, true);
to
xhttp.open('GET', 'proxy.php?url=' + encodeURIComponent(url), true);
in your JavaScript.