MCPcopy Create free account
hub / github.com/modelscope/FunASR / connWebM

Function connWebM

runtime/html5/static/recorder-core.js:310–368  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

308
309//===================连接方式一=========================
310var connWebM=function(){
311 //尝试开启MediaRecorder录制webm+pcm处理
312 var MR=window[MediaRecorderTxt];
313 var onData="ondataavailable";
314 var webmType="audio/webm; codecs=pcm";
315 isWebM=stream.isWebM=Recorder[ConnectEnableWebM];
316
317 var supportMR=MR && (onData in MR.prototype) && MR.isTypeSupported(webmType);
318 webMTips=supportMR?"":"(此浏览器不支持"+MRWebMPCM+")";
319 if(!isUserMedia || !isWebM || !supportMR){
320 connWorklet(); //非麦克风录音(MediaRecorder采样率不可控) 或 被禁用 或 不支持MediaRecorder 或 不支持webm+pcm
321 return;
322 }
323
324 var mrNext=function(){//可以继续,没有调用断开
325 return isWebM && stream._ra;
326 };
327 var mrAlive=stream._ra=function(){
328 //start时会调用,只要没有收到数据就断定MediaRecorder有问题,降级处理
329 if(badInt!==""){//没有回调过数据
330 clearTimeout(badInt);
331 badInt=setTimeout(function(){
332 //badInt=0; 保留给nodeAlive继续判断
333 if(mrNext()){
334 CLog(MediaRecorderTxt+"未返回任何音频,降级使用"+audioWorklet,3);
335 connWorklet();
336 };
337 },500);
338 };
339 };
340
341 var mrSet=Object.assign({mimeType:webmType}, Recorder.ConnectWebMOptions);
342 var mr=stream._r=new MR(stream, mrSet);
343 var webmData=stream._rd={sampleRate:ctx[sampleRateTxt]};
344 mr[onData]=function(e){
345 //提取webm中的pcm数据,提取失败就等着badInt超时降级处理
346 var reader=new FileReader();
347 reader.onloadend=function(){
348 if(mrNext()){
349 var f32arr=WebM_Extract(new Uint8Array(reader.result),webmData);
350 if(!f32arr)return;
351 if(f32arr==-1){//无法提取,立即降级
352 connWorklet();
353 return;
354 };
355
356 if(badInt){
357 clearTimeout(badInt);badInt="";
358 };
359 onReceive(f32arr);
360 }else if(!isWebM){
361 CLog(MediaRecorderTxt+"多余回调",3);
362 };
363 };
364 reader.readAsArrayBuffer(e.data);
365 };
366 mr.start(~~(bufferSize/48));//按48k时的回调间隔
367 CLog("Connect采用"+MRWebMPCM+",设置"+RecTxt+"."+ConnectEnableWebM+"=false可恢复使用"+audioWorklet+"或老式"+scriptProcessor);

Callers 1

ConnectFunction · 0.70

Calls 5

connWorkletFunction · 0.70
mrNextFunction · 0.70
CLogFunction · 0.70
WebM_ExtractFunction · 0.70
onReceiveFunction · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…