jsmad/index.html

62 lines
1.6 KiB
HTML
Raw Normal View History

2018-12-27 15:29:06 +00:00
<!doctype html>
<html>
<head>
</head>
<body>
<script>
var Module = {
onRuntimeInitialized: function() {
}
};
</script>
<script src="wrapper.js"></script>
<input type="file" id="file" name="file" />
<script>
var time = 0;
var ctx = new AudioContext();
ctx.suspend();
var decoder;
2018-12-27 15:29:06 +00:00
function onChange(e) {
var file = e.target.files[0];
var reader = new FileReader();
reader.onload = function(e) {
decoder = new Module.Decoder();
2018-12-27 15:29:06 +00:00
var buffer = reader.result;
var src = new Uint8Array(buffer);
var ptr = Module._malloc(buffer.byteLength);
var arr = new Uint8Array(Module.HEAPU8.buffer, ptr, buffer.byteLength);
arr.set(src, 0);
2018-12-29 12:39:49 +00:00
decoder.addFragment(ptr, buffer.byteLength);
schedule();
ctx.resume();
}
reader.readAsArrayBuffer(file);
}
function schedule() {
if (decoder.hasMore()) {
var audio = decoder.decode(50);
if (audio) {
2018-12-29 12:39:49 +00:00
var source = ctx.createBufferSource();
source.buffer = audio;
source.connect(ctx.destination);
source.start(time);
time += audio.duration;
setTimeout(schedule, Math.floor(audio.duration * 200));
} else {
decoder.delete();
2018-12-29 12:39:49 +00:00
}
} else {
2018-12-29 12:39:49 +00:00
decoder.delete();
2018-12-27 15:29:06 +00:00
}
}
2018-12-27 15:29:06 +00:00
document.getElementById("file").addEventListener("change", onChange, false);
</script>
</body>
</html>