36 lines
829 B
JavaScript
36 lines
829 B
JavaScript
(function(){
|
|
'use strict';
|
|
|
|
var samplesMono;
|
|
|
|
var floatTo16BitPCM = function(input, output){
|
|
for(var i = 0; i < input.length; i++){
|
|
var s = Math.max(-1, Math.min(1, input[i]));
|
|
output[i] = (s < 0 ? s * 0x8000 : s * 0x7FFF);
|
|
}
|
|
};
|
|
|
|
var convertBuffer = function(arrayBuffer){
|
|
var data = new Float32Array(arrayBuffer);
|
|
var out = new Int16Array(arrayBuffer.length);
|
|
floatTo16BitPCM(data, out);
|
|
return out;
|
|
};
|
|
|
|
var encode = function(arrayBuffer){
|
|
samplesMono = convertBuffer(arrayBuffer);
|
|
self.postMessage({
|
|
cmd: 'pcm',
|
|
buf: samplesMono
|
|
});
|
|
};
|
|
|
|
self.onmessage = function(e){
|
|
switch(e.data.cmd){
|
|
case 'encode':
|
|
encode(e.data.buf);
|
|
break;
|
|
}
|
|
};
|
|
})();
|