2 lines
3.9 KiB
JavaScript
2 lines
3.9 KiB
JavaScript
!function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/libs/",n(n.s=0)}([function(e,t,n){"use strict";n.r(t);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}self.FLAC_SCRIPT_LOCATION="/libs/",importScripts("/libs/libflac4-1.3.2.min.js");const i={0:"FLAC__STREAM_ENCODER_OK",1:"FLAC__STREAM_ENCODER_UNINITIALIZED",2:"FLAC__STREAM_ENCODER_OGG_ERROR",3:"FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR",4:"FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA",5:"FLAC__STREAM_ENCODER_CLIENT_ERROR",6:"FLAC__STREAM_ENCODER_IO_ERROR",7:"FLAC__STREAM_ENCODER_FRAMING_ERROR",8:"FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR"},o=Object.freeze({UNINTIALIZED:"uninitialized",WORKING:"working",FINISHED:"finished"});class a{constructor(e,t=16,n=4096){if(r(this,"_encoderId",0),r(this,"_flacBuffers",[]),r(this,"_flacLength",0),r(this,"_state",o.UNINTIALIZED),r(this,"_data",null),r(this,"_onMetadataAvailable",()=>{}),!Flac.isReady())throw new Error("libflac is not ready yet!");if(this._sampleRate=e,this._bitDepth=t,this._bufferSize=n,this._encoderId=Flac.init_libflac_encoder(this._sampleRate,1,this._bitDepth,5,0,!0,0),0===this._encoderId)throw new Error("Failed to create libflac encoder.");if(0!==Flac.init_encoder_stream(this._encoderId,this._onEncodedData.bind(this),this._onMetadataAvailable.bind(this)))throw new Error("Failed to initalise libflac encoder.");this._state=o.WORKING}encode(e){if(this._state!==o.WORKING)throw new Error("Encoder is not ready or has finished.");if(!Flac.isReady())throw new Error("Flac not ready");const t=e.length,n=new Int32Array(t),r=new DataView(n.buffer);let a=0;for(let n=0;n<t;n++)r.setInt32(a,32767*e[n],!0),a+=4;if(1!==Flac.FLAC__stream_encoder_process_interleaved(this._encoderId,n,n.length)){const e=Flac.FLAC__stream_encoder_get_state(this._encoderId);console.error("Error during encoding",i[e])}}finish(){if(this._state===o.WORKING){this._state=o.FINISHED;const e=Flac.FLAC__stream_encoder_finish(this._encoderId);console.log("Flac encoding finished: ",e),Flac.FLAC__stream_encoder_delete(this._encoderId),this._data=this._exportFlacBlob()}}getBlob(){return this._state===o.FINISHED?this._data:null}_exportFlacBlob(){const e=function(e,t){const n=new Uint8Array(t);let r=0;const i=e.length;for(let t=0;t<i;t++){const i=e[t];n.set(i,r),r+=i.length}return n}(this._flacBuffers,this._flacLength);return new Blob([e],{type:"audio/flac"})}_onEncodedData(e,t){this._flacBuffers.push(e),this._flacLength+=e.byteLength}}let s=null;self.onmessage=function(e){switch(e.data.command){case"MAIN_THREAD_INIT":{const t=e.data.config.bps,n=e.data.config.sampleRate;Flac.isReady()?(s=new a(n,t),self.postMessage({command:"WORKER_LIBFLAC_READY"})):Flac.onready=function(){setTimeout(()=>{s=new a(n,t),self.postMessage({command:"WORKER_LIBFLAC_READY"})},0)};break}case"MAIN_THREAD_NEW_DATA_ARRIVED":null===s?console.error("flacEncoderWorker received data when the encoder is not ready."):s.encode(e.data.buf);break;case"MAIN_THREAD_FINISH":if(null!==s){s.finish();const e=s.getBlob();self.postMessage({command:"WORKER_BLOB_READY",buf:e}),s=null}}}}]);
|
|
//# sourceMappingURL=flacEncodeWorker.min.map
|