possible to decode portions, possible to find out how much is still available for one stream decoding
This commit is contained in:
parent
7a6ebef935
commit
aa8ac249a0
3 changed files with 67 additions and 42 deletions
36
index.html
36
index.html
|
@ -12,41 +12,49 @@
|
|||
<script src="wrapper.js"></script>
|
||||
<input type="file" id="file" name="file" />
|
||||
<script>
|
||||
var time = 0;
|
||||
var ctx = new AudioContext();
|
||||
ctx.suspend();
|
||||
var decoder;
|
||||
function onChange(e) {
|
||||
var file = e.target.files[0];
|
||||
|
||||
var reader = new FileReader();
|
||||
reader.onload = function(e) {
|
||||
decoder = new Module.Decoder();
|
||||
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);
|
||||
var ctx = new AudioContext();
|
||||
var time = 0;
|
||||
arr.set(src, 0);
|
||||
|
||||
var decoder = new Module.Decoder();
|
||||
decoder.addFragment(ptr, buffer.byteLength);
|
||||
|
||||
while (decoder.hasMore()) {
|
||||
var audio = decoder.decode(1);
|
||||
if (audio === undefined) {
|
||||
if (decoder.hasMore() === false) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
schedule();
|
||||
ctx.resume();
|
||||
}
|
||||
reader.readAsArrayBuffer(file);
|
||||
|
||||
}
|
||||
|
||||
function schedule() {
|
||||
if (decoder.hasMore()) {
|
||||
var audio = decoder.decode(50);
|
||||
if (audio) {
|
||||
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();
|
||||
}
|
||||
|
||||
} else {
|
||||
decoder.delete();
|
||||
}
|
||||
reader.readAsArrayBuffer(file);
|
||||
|
||||
}
|
||||
|
||||
document.getElementById("file").addEventListener("change", onChange, false);
|
||||
</script>
|
||||
</body>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue