()
| 187 | |
| 188 | //===================连接方式二========================= |
| 189 | var connWorklet=function(){ |
| 190 | //尝试开启AudioWorklet处理 |
| 191 | isWebM=stream.isWebM=false; |
| 192 | _Disconn_r(stream); |
| 193 | |
| 194 | isWorklet=stream.isWorklet=!oldFn || Recorder[ConnectEnableWorklet]; |
| 195 | var AwNode=window.AudioWorkletNode; |
| 196 | if(!(isWorklet && ctx[audioWorklet] && AwNode)){ |
| 197 | oldScript();//被禁用 或 不支持,直接使用老的 |
| 198 | return; |
| 199 | }; |
| 200 | var clazzUrl=function(){ |
| 201 | var xf=function(f){return f.toString().replace(/^function|DEL_/g,"").replace(/\$RA/g,recAudioWorklet)}; |
| 202 | var clazz='class '+RecProc+' extends AudioWorkletProcessor{'; |
| 203 | clazz+="constructor "+xf(function(option){ |
| 204 | DEL_super(option); |
| 205 | var This=this,bufferSize=option.processorOptions.bufferSize; |
| 206 | This.bufferSize=bufferSize; |
| 207 | This.buffer=new Float32Array(bufferSize*2);//乱给size搞乱缓冲区不管 |
| 208 | This.pos=0; |
| 209 | This.port.onmessage=function(e){ |
| 210 | if(e.data.kill){ |
| 211 | This.kill=true; |
| 212 | console.log("$RA kill call"); |
| 213 | } |
| 214 | }; |
| 215 | console.log("$RA .ctor call", option); |
| 216 | }); |
| 217 | |
| 218 | //https://developer.mozilla.org/en-US/docs/Web/API/AudioWorkletProcessor/process 每次回调128个采样数据,1秒375次回调,高频导致移动端性能问题,结果就是回调次数缺斤少两,进而导致丢失数据,PC端似乎没有性能问题 |
| 219 | clazz+="process "+xf(function(input,b,c){//需要等到ctx激活后才会有回调 |
| 220 | var This=this,bufferSize=This.bufferSize; |
| 221 | var buffer=This.buffer,pos=This.pos; |
| 222 | input=(input[0]||[])[0]||[]; |
| 223 | if(input.length){ |
| 224 | buffer.set(input,pos); |
| 225 | pos+=input.length; |
| 226 | |
| 227 | var len=~~(pos/bufferSize)*bufferSize; |
| 228 | if(len){ |
| 229 | this.port.postMessage({ val: buffer.slice(0,len) }); |
| 230 | |
| 231 | var more=buffer.subarray(len,pos); |
| 232 | buffer=new Float32Array(bufferSize*2); |
| 233 | buffer.set(more); |
| 234 | pos=more.length; |
| 235 | This.buffer=buffer; |
| 236 | } |
| 237 | This.pos=pos; |
| 238 | } |
| 239 | return !This.kill; |
| 240 | }); |
| 241 | clazz+='}' |
| 242 | +'try{' |
| 243 | +'registerProcessor("'+RecProc+'", '+RecProc+')' |
| 244 | +'}catch(e){' |
| 245 | +'console.error("'+recAudioWorklet+'注册失败",e)' |
| 246 | +'}'; |
no test coverage detected
searching dependent graphs…