(function (exports) { 'use strict'; var MP3Converter = function (config) { config = config || {}; var busy = false; var mp3Worker = new Worker('worker.js'); this.isBusy = function () { return busy }; this.convert = function (blob) { var conversionId = 'conversion_' + Date.now(), tag = conversionId + ":" ; var opts = []; for(var i=1; i < arguments.length;i++){ opts.push(arguments[i]); } console.log(tag, 'Starting conversion'); var preferredConfig = {}, onSuccess, onProgress, onError; if (typeof opts[0] == 'object') { preferredConfig = opts.shift(); } onSuccess = opts.shift(); onProgress = opts.shift(); onError = opts.shift(); if (busy) { throw ("Another conversion is in progress"); } var initialSize = blob.size, fileReader = new FileReader(), startTime = Date.now(); fileReader.onload = function (e) { console.log(tag, "Passed to BG process"); mp3Worker.postMessage({ cmd: 'init', config: preferredConfig }); mp3Worker.postMessage({cmd: 'encode', rawInput: e.target.result}); mp3Worker.postMessage({cmd: 'finish'}); mp3Worker.onmessage = function (e) { if (e.data.cmd == 'end') { console.log(tag, "Done converting to Mp3"); var mp3Blob = new Blob(e.data.buf, {type: 'audio/mp3'}); console.log(tag, "Conversion completed in: " + ((Date.now() - startTime) / 1000) + 's'); var finalSize = mp3Blob.size; console.log(tag + "Initial size: = " + initialSize + ", " + "Final size = " + finalSize + ", Reduction: " + Number((100 * (initialSize - finalSize) / initialSize)).toPrecision(4) + "%"); busy = false; if(onProgress && typeof onProgress=='function'){ onProgress(1); } if (onSuccess && typeof onSuccess === 'function') { onSuccess(mp3Blob); } } else if(e.data.cmd == 'progress'){ //post progress if(onProgress && typeof onProgress=='function'){ onProgress(e.data.progress); } } else if(e.data.cmd == 'error'){ } }; }; busy = true; fileReader.readAsArrayBuffer(blob); } }; exports.MP3Converter = MP3Converter; })(window);