UNPKG

@zoom/videosdk

Version:
2 lines 6.87 kB
(()=>{"use strict";class t{constructor(){this.cacheSize=0,this.sameCacheSizeCounter=0}shouldSendCacheSize(t){return t===this.cacheSize&&this.sameCacheSizeCounter++,(this.cacheSize!==t||200===this.sameCacheSizeCounter)&&(this.sameCacheSizeCounter=0,this.cacheSize=t,!0)}}class e{constructor(e,s,i){let h=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;if(this.STATE_READ_READY=0,this.STATE_READ_INDEX=1,this.STATE_WRITE_READY=2,this.STATE_WRITE_INDEX=3,this.STATE_DATA_COUNT=4,this.STATE_CACHE_SIZE=5,this.STATY_READY_NO=0,this.STATY_READY_YES=1,this.sabState=new Uint32Array(e),this.sabBuffer=new Float32Array(s),this.perFrameLength=i,this.writeChannelNumb=h,this.bufferLen=this.sabBuffer.length,this.supportSpecialOptimization=this.bufferLen%i==0,this.bufferIndex=null,this.supportSpecialOptimization){let t=this.bufferLen/i;this.bufferIndex=[];for(let e=0;e<t;e++)this.bufferIndex.push(this.sabBuffer.subarray(e*i,e*i+i))}this.placeBuffer=new Float32Array(this.perFrameLength),this.QUANTUM_SIZE=128,this.CACHE_SIZE_MAX_VALUE=Math.floor(Math.floor(this.bufferLen/this.QUANTUM_SIZE)/2),this.CACHE_SIZE_MIN_VALUE=6,this.CACHE_SIZE_MAX_VALUE<this.CACHE_SIZE_MIN_VALUE&&(this.CACHE_SIZE_MAX_VALUE=this.CACHE_SIZE_MIN_VALUE),this.setCacheSize(this.CACHE_SIZE_MIN_VALUE),this._counter=0,this.onCacheSizeChange=null,this.cacheSizeController=new t}getCacheSize(){return Atomics.load(this.sabState,this.STATE_CACHE_SIZE)}setCacheSize(t){t>this.CACHE_SIZE_MAX_VALUE&&(t=this.CACHE_SIZE_MAX_VALUE),t<this.CACHE_SIZE_MIN_VALUE&&(t=this.CACHE_SIZE_MIN_VALUE),this.onCacheSizeChange&&this.cacheSizeController.shouldSendCacheSize(t)&&this.onCacheSizeChange(t),Atomics.store(this.sabState,this.STATE_CACHE_SIZE,t)}setQuantumSize(t){this.QUANTUM_SIZE=t,this.CACHE_SIZE_MAX_VALUE=Math.floor(Math.floor(this.bufferLen/this.QUANTUM_SIZE)/2),this.CACHE_SIZE_MAX_VALUE<this.CACHE_SIZE_MIN_VALUE&&(this.CACHE_SIZE_MAX_VALUE=this.CACHE_SIZE_MIN_VALUE)}isNeedMoreData(){let t=Atomics.load(this.sabState,this.STATE_CACHE_SIZE);return Atomics.load(this.sabState,this.STATE_DATA_COUNT)<t*this.QUANTUM_SIZE}shouldAdjustCacheBuffer(){this._counter>0&&this.setCacheSize(this.getCacheSize()+1)}clear(){this.sabState&&(this.sabState[this.STATE_READ_READY]=0,this.sabState[this.STATE_READ_INDEX]=0,this.sabState[this.STATE_WRITE_READY]=0,this.sabState[this.STATE_WRITE_INDEX]=0,this.sabState[this.STATE_DATA_COUNT]=0),this._counter=0}setWriteReady(){this.sabState[this.STATE_WRITE_READY]=this.STATY_READY_YES}isReady(){return this.sabState[this.STATE_WRITE_READY]&&this.sabState[this.STATE_READ_READY]}getDataCount(){return Atomics.load(this.sabState,this.STATE_DATA_COUNT)}write(t){if(void 0===t[0]||t[0].length*this.writeChannelNumb!==this.perFrameLength)return;let e=this.sabState[this.STATE_READ_READY];return this.sabState[this.STATE_WRITE_READY]||(this.sabState[this.STATE_WRITE_READY]=this.STATY_READY_YES,this.sabState[this.STATE_WRITE_INDEX]=0),e?this.supportSpecialOptimization?this.writeSpecial(t):this.writeNormal(t):void 0}writeNormal(t){let e=this.sabState[this.STATE_WRITE_INDEX];for(let s=0;s<this.writeChannelNumb;s++)for(let i=0;t[s]&&i<t[s].length;i++)this.sabBuffer[(e+i*this.writeChannelNumb+s)%this.bufferLen]=t[s][i];e+=this.perFrameLength,e>=this.bufferLen&&(e-=this.bufferLen),this.sabState[this.STATE_WRITE_INDEX]=e,Atomics.add(this.sabState,this.STATE_DATA_COUNT,this.perFrameLength)}writeSpecial(t){let e=this.sabState[this.STATE_WRITE_INDEX];for(let s=0;s<this.writeChannelNumb;s++)for(let i=0;t[s]&&i<t[s].length;i++)this.bufferIndex[e][i*this.writeChannelNumb+s]=t[s][i];e=(e+1)%this.bufferIndex.length,this.sabState[this.STATE_WRITE_INDEX]=e,Atomics.add(this.sabState,this.STATE_DATA_COUNT,this.perFrameLength)}read(){let t=this.sabState[this.STATE_READ_READY],e=this.sabState[this.STATE_WRITE_READY];if(t||(this.sabState[this.STATE_READ_READY]=this.STATY_READY_YES,this.sabState[this.STATE_READ_INDEX]=0),!e)return null;let s=this.supportSpecialOptimization?this.readSpecial():this.readNormal();return null===s?this.shouldAdjustCacheBuffer():this._counter++,s}readNormal(){let t=this.sabState[this.STATE_READ_INDEX],e=Atomics.load(this.sabState,this.STATE_DATA_COUNT);if(e<this.perFrameLength)return null;if(e>this.bufferLen){let s=Math.ceil((e-this.bufferLen)/this.perFrameLength)+1;t=(s*this.perFrameLength+t)%this.bufferLen,Atomics.sub(this.sabState,this.STATE_DATA_COUNT,s*this.perFrameLength)}let s=null;if(this.bufferLen-t>=this.perFrameLength)s=this.sabBuffer.subarray(t,t+this.perFrameLength);else{let e=this.sabBuffer.subarray(t),i=this.sabBuffer.subarray(0,this.perFrameLength-e.length);s=this.placeBuffer,s.set(e),s.set(i,e.length)}return t+=this.perFrameLength,t>=this.bufferLen&&(t-=this.bufferLen),this.sabState[this.STATE_READ_INDEX]=t,Atomics.sub(this.sabState,this.STATE_DATA_COUNT,this.perFrameLength),s}readSpecial(){let t=this.sabState[this.STATE_READ_INDEX],e=Atomics.load(this.sabState,this.STATE_DATA_COUNT);if(e<this.perFrameLength)return null;if(e>this.bufferLen){let s=Math.ceil((e-this.bufferLen)/this.perFrameLength)+1;t=(s+t)%this.bufferIndex.length,Atomics.sub(this.sabState,this.STATE_DATA_COUNT,s*this.perFrameLength)}let s=this.bufferIndex[t];return t=(t+1)%this.bufferIndex.length,this.sabState[this.STATE_READ_INDEX]=t,Atomics.sub(this.sabState,this.STATE_DATA_COUNT,this.perFrameLength),s}}var s=!1,i=1;const h="undefined"!=typeof SharedArrayBuffer;class a extends AudioWorkletProcessor{static get parameterDescriptors(){return[{name:"pcm",defaultValue:1}]}constructor(t){super(),this.port.onmessage=this.handleMessage.bind(this),this.isPlaying=!1,this.isCapturing=!1,this.audioEncodePort=null,t&&t.processorOptions&&t.processorOptions.sharingEncodeChannelsNum&&(i=t.processorOptions.sharingEncodeChannelsNum)}handleMessage(t){const{status:e,data:i}=t.data;switch(e){case"StartCaptureAudio":this.isCapturing=!0;break;case"sampleRate":this.sampleRate_=i;break;case"encodeAudioPort":this.audioEncodePort&&this.audioEncodePort.close(),this.audioEncodePort=t.ports[0];break;case"stopWorklet":s=!0;break;default:h?this.handleMessageForSAB(t):console.warn("unhanle commands in audioworklet",e)}}handleMessageForSAB(t){const{status:s,data:h}=t.data;"sharedBuffer"===s?(h&&(this.g_sharedbuffer=h),this.g_sharedbuffer&&(this.sharingSAB=new e(this.g_sharedbuffer.sharingInputState,this.g_sharedbuffer.sharingInputBuffer,128*i,i))):console.warn("unhanle commands in audioworklet",s)}process(t,e,i){return!s&&!!h&&this.SABProcess(t,i)}inputData(t){if(!this.sharingSAB)return!0;this.sharingSAB.write(t[0]),this.audioEncodePort.postMessage({command:2,buffer:!1})}SABProcess(t,e){let s=t[0];return!this.g_sharedbuffer||(s[0]&&this.isCapturing&&this.inputData(t),!0)}}registerProcessor("zoomSharingAudioWorklet",a)})(); //# sourceMappingURL=https://d1cdksi819e9z7.cloudfront.net/sourcemap/js_sharing_audio_worklet.min.js-d0404ecebe694d41b388.map