-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwaveWorker.min.js
1 lines (1 loc) · 1.71 KB
/
waveWorker.min.js
1
"use strict";var wavPCM;self.onmessage=function(e){switch(e.data.command){case"record":wavPCM&&wavPCM.record(e.data.buffers);break;case"done":wavPCM&&wavPCM.requestData();break;case"init":wavPCM=new WavePCM(e.data)}};var WavePCM=function(e){this.sampleRate=e.sampleRate||48e3,this.bitDepth=e.bitDepth||16,this.recordedBuffers=[],this.bytesPerSample=this.bitDepth/8};WavePCM.prototype.record=function(e){this.numberOfChannels=this.numberOfChannels||e.length;for(var t=e[0].length,s=new Uint8Array(t*this.numberOfChannels*this.bytesPerSample),a=0;t>a;a++)for(var r=0;r<this.numberOfChannels;r++){var n=(a*this.numberOfChannels+r)*this.bytesPerSample,i=e[r][a];switch(i>1?i=1:-1>i&&(i=-1),this.bytesPerSample){case 4:i=2147483648*i,s[n]=i,s[n+1]=i>>8,s[n+2]=i>>16,s[n+3]=i>>24;break;case 3:i=8388608*i,s[n]=i,s[n+1]=i>>8,s[n+2]=i>>16;break;case 2:i=32768*i,s[n]=i,s[n+1]=i>>8;break;case 1:s[n]=128*(i+1);break;default:throw"Only 8, 16, 24 and 32 bits per sample are supported"}}this.recordedBuffers.push(s)},WavePCM.prototype.requestData=function(){var e=this.recordedBuffers[0].length,t=this.recordedBuffers.length*e,s=44,a=new Uint8Array(s+t),r=new DataView(a.buffer);r.setUint32(0,1380533830,!1),r.setUint32(4,36+t,!0),r.setUint32(8,1463899717,!1),r.setUint32(12,1718449184,!1),r.setUint32(16,16,!0),r.setUint16(20,1,!0),r.setUint16(22,this.numberOfChannels,!0),r.setUint32(24,this.sampleRate,!0),r.setUint32(28,this.sampleRate*this.bytesPerSample*this.numberOfChannels,!0),r.setUint16(32,this.bytesPerSample*this.numberOfChannels,!0),r.setUint16(34,this.bitDepth,!0),r.setUint32(36,1684108385,!1),r.setUint32(40,t,!0);for(var n=0;n<this.recordedBuffers.length;n++)a.set(this.recordedBuffers[n],n*e+s);self.postMessage(a,[a.buffer]),self.close()};