You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
0x40-web/lib/workers/mp3-worker.js

49 lines
1.6 KiB

// Use mp3.js and aurora.js for dev
// Use mp3-min.js for release
//importScripts('aurora.js');
//importScripts('mp3.js');
importScripts('../mp3-min.js');
// Flash value
var LAME_DELAY_START = 2258;
var LAME_DELAY_END = 0;
var deinterleaveAndTrim = function(buffer, asset) {
// because MP3 is bad, we nuke silence
var channels = asset.format.channelsPerFrame,
len = buffer.length / channels;
newLen = len - LAME_DELAY_START - LAME_DELAY_END;
result = new Float32Array(newLen * channels);
for(var sample = 0; sample < newLen; sample++) {
for(var channel = 0; channel < channels; channel++) {
result[channel*newLen + sample] = buffer[(sample+LAME_DELAY_START)*channels + channel];
}
}
return result;
}
self.addEventListener('message', function(e) {
// To see if things are working, we can ping the worker
if(e.data.ping) {
self.postMessage({ping: true});
return;
}
var arrayBuffer = e.data;
var asset = AV.Asset.fromBuffer(arrayBuffer);
// Any errors are thrown up the chain to our Promises
asset.decodeToBuffer(function(buffer) {
var fixedBuffer = deinterleaveAndTrim(buffer, asset);
var raw = {array: fixedBuffer,
sampleRate: asset.format.sampleRate,
channels: asset.format.channelsPerFrame}
self.postMessage({rawAudio : raw,
arrayBuffer : arrayBuffer},
// transfer objects to save a copy
[fixedBuffer.buffer, arrayBuffer]);
});
}, false);