UNPKG

cloudpilot-emu-embedded

Version:

Embedded version of the CloudpilotEmu PalmOS emulator

2 lines 3.44 kB
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.cloudpilot=e():t.cloudpilot=e()}({},()=>(()=>{"use strict";class t{constructor(t,e,s){this.capacity=t,this.sampleRateFrom=e,this.sampleRateTo=s,this.length=0,this.nextSample=0,this.currentSampleIndex=0,this.currentSampleLeft=0,this.currentSampleRight=0,this.channelLeftData=new Float32Array(this.capacity),this.channelRightData=new Float32Array(this.capacity)}push(t){this.channelLeftData[this.nextSample]=(t<<16>>16)/32767,this.channelRightData[this.nextSample]=(t>>16)/32767,this.length<this.capacity&&this.length++,this.nextSample=(this.nextSample+1)%this.capacity}fill(t,e){const s=t.length;if(s!==e.length)return;let a=(this.nextSample-this.length+this.capacity)%this.capacity;if(this.sampleRateFrom===this.sampleRateTo)for(let i=0;i<s&&this.length>0;i++)t[i]=this.channelLeftData[a],e[i]=this.channelRightData[a],a=(a+1)%this.capacity,this.length--;else for(let i=0;i<s&&this.length>0;i++){if(this.currentSampleIndex+=this.sampleRateFrom,this.currentSampleIndex>this.sampleRateTo){this.currentSampleLeft=this.channelLeftData[a],this.currentSampleRight=this.channelRightData[a];let t=this.currentSampleIndex/this.sampleRateTo|0;t>this.length&&(t=this.length),a=(a+t)%this.capacity,this.currentSampleIndex%=this.sampleRateTo,this.length-=t}t[i]=this.currentSampleLeft,e[i]=this.currentSampleRight}}clear(){this.length=0}}class e extends AudioWorkletProcessor{constructor(e){super(),this.onStreamMessage=t=>{const e=t.data;switch(e.type){case"sampleData":{const t=e.count,s=new Uint32Array(e.buffer);for(let e=0;e<t;e++)this.sampleQueue.push(s[e]);this.dispatchStreamMessage({type:"returnBuffer",buffer:e.buffer},[e.buffer]);break}case"flush":this.flush(),this.dispatchStreamMessage({type:"resumePcm"})}},this.onControlMessage=t=>{const e=t.data;switch(e.type){case"setStreamMessagePort":this.setStreamPort(e.port);break;case"flush":this.flush(),this.dispatchStreamMessage({type:"resumePcm"});break;case"reset":this.clearStreamPort()}},this.buffering=!0,this.backpressure=!1;const s=e.processorOptions.sampleRateTo;this.sampleQueue=new t(7350,44100,s),this.buffering=!0,this.backpressure=!1,this.port.addEventListener("message",this.onControlMessage),this.port.start(),console.log(`pcm worklet initialized at ${s}Hz`)}process(t,e){if(1!==e.length||2!==e[0].length)return!1;const s=e[0][0].length;return this.buffering&&this.sampleQueue.length>2940&&(this.buffering=!1),!this.buffering&&this.sampleQueue.length<s&&(this.buffering=!0),this.backpressure&&this.sampleQueue.length<5145&&(this.backpressure=!1,this.dispatchStreamMessage({type:"resumePcm"})),!this.backpressure&&this.sampleQueue.length>5880&&(this.backpressure=!0,this.dispatchStreamMessage({type:"suspendPcm"})),this.buffering||this.sampleQueue.fill(e[0][0],e[0][1]),!0}dispatchStreamMessage(t,e){var s;null===(s=this.streamPort)||void 0===s||s.postMessage(t,e)}flush(){this.buffering=!0,this.backpressure=!1,this.sampleQueue.clear()}clearStreamPort(){this.streamPort&&this.streamPort.removeEventListener("message",this.onStreamMessage),this.streamPort=void 0,this.flush()}setStreamPort(t){this.clearStreamPort(),this.streamPort=t,this.streamPort.addEventListener("message",this.onStreamMessage),this.streamPort.start()}}return registerProcessor("pcm-processor",e),{}})()); //# sourceMappingURL=pcm-worklet.js.map