|
|
@ -1,28 +1,15 @@ |
|
|
|
var window = self; |
|
|
|
var window = self; |
|
|
|
importScripts('../audio-min.js'); |
|
|
|
importScripts('../audio-min.js'); |
|
|
|
|
|
|
|
|
|
|
|
// Flash value
|
|
|
|
var deinterleave = function(buffer, asset) { |
|
|
|
var LAME_DELAY_START = 2258; |
|
|
|
|
|
|
|
var LAME_DELAY_END = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var deinterleaveAndTrim = function(buffer, asset) { |
|
|
|
|
|
|
|
var channels = asset.format.channelsPerFrame, |
|
|
|
var channels = asset.format.channelsPerFrame, |
|
|
|
len = buffer.length / channels, |
|
|
|
len = buffer.length / channels; |
|
|
|
newLen, start; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// because MP3 is bad, we nuke silence
|
|
|
|
var result = new Float32Array(len * channels); |
|
|
|
if(asset.format.formatID == "mp3") { |
|
|
|
|
|
|
|
newLen = len - LAME_DELAY_START - LAME_DELAY_END; |
|
|
|
|
|
|
|
start = LAME_DELAY_START; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
newLen = len; |
|
|
|
|
|
|
|
start = 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var result = new Float32Array(newLen * channels); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for(var sample = 0; sample < newLen; sample++) { |
|
|
|
for(var sample = 0; sample < len; sample++) { |
|
|
|
for(var channel = 0; channel < channels; channel++) { |
|
|
|
for(var channel = 0; channel < channels; channel++) { |
|
|
|
result[channel*newLen + sample] = buffer[(sample+start)*channels + channel]; |
|
|
|
result[channel*len + sample] = buffer[(sample)*channels + channel]; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return result; |
|
|
|
return result; |
|
|
@ -51,7 +38,7 @@ self.addEventListener('message', function(e) { |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
asset.decodeToBuffer(function(buffer) { |
|
|
|
asset.decodeToBuffer(function(buffer) { |
|
|
|
var fixedBuffer = deinterleaveAndTrim(buffer, asset); |
|
|
|
var fixedBuffer = deinterleave(buffer, asset); |
|
|
|
var raw = {array: fixedBuffer, |
|
|
|
var raw = {array: fixedBuffer, |
|
|
|
sampleRate: asset.format.sampleRate, |
|
|
|
sampleRate: asset.format.sampleRate, |
|
|
|
channels: asset.format.channelsPerFrame} |
|
|
|
channels: asset.format.channelsPerFrame} |
|
|
|