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

Function Connect

runtime/html5/static/recorder-core.js:117–371  ·  view source on GitHub ↗
(streamStore,isUserMedia)

Source from the content-addressed store, hash-verified

115
116/*初始化H5音频采集连接。如果自行提供了sourceStream将只进行一次简单的连接处理。如果是普通麦克风录音,此时的Stream是全局的,Safari上断开后就无法再次进行连接使用,表现为静音,因此使用全部使用全局处理避免调用到disconnect;全局处理也有利于屏蔽底层细节,start时无需再调用底层接口,提升兼容、可靠性。*/
117var Connect=function(streamStore,isUserMedia){
118 var bufferSize=streamStore.BufferSize||Recorder.BufferSize;
119
120 var ctx=Recorder.Ctx,stream=streamStore.Stream;
121 var mediaConn=function(node){
122 var media=stream._m=ctx.createMediaStreamSource(stream);
123 var ctxDest=ctx.destination,cmsdTxt="createMediaStreamDestination";
124 if(ctx[cmsdTxt]){
125 ctxDest=ctx[cmsdTxt]();
126 };
127 media.connect(node);
128 node.connect(ctxDest);
129 }
130 var isWebM,isWorklet,badInt,webMTips="";
131 var calls=stream._call;
132
133 //浏览器回传的音频数据处理
134 var onReceive=function(float32Arr){
135 for(var k0 in calls){//has item
136 var size=float32Arr.length;
137
138 var pcm=new Int16Array(size);
139 var sum=0;
140 for(var j=0;j<size;j++){//floatTo16BitPCM
141 var s=Math.max(-1,Math.min(1,float32Arr[j]));
142 s=s<0?s*0x8000:s*0x7FFF;
143 pcm[j]=s;
144 sum+=Math.abs(s);
145 };
146
147 for(var k in calls){
148 calls[k](pcm,sum);
149 };
150
151 return;
152 };
153 };
154
155 var scriptProcessor="ScriptProcessor";//一堆字符串名字,有利于压缩js
156 var audioWorklet="audioWorklet";
157 var recAudioWorklet=RecTxt+" "+audioWorklet;
158 var RecProc="RecProc";
159 var MediaRecorderTxt="MediaRecorder";
160 var MRWebMPCM=MediaRecorderTxt+".WebM.PCM";
161
162
163//===================连接方式三=========================
164 //古董级别的 ScriptProcessor 处理,目前所有浏览器均兼容,虽然是过时的方法,但更稳健,移动端性能比AudioWorklet强
165 var oldFn=ctx.createScriptProcessor||ctx.createJavaScriptNode;
166 var oldIsBest="。由于"+audioWorklet+"内部1秒375次回调,在移动端可能会有性能问题导致回调丢失录音变短,PC端无影响,暂不建议开启"+audioWorklet+"。";
167 var oldScript=function(){
168 isWorklet=stream.isWorklet=false;
169 _Disconn_n(stream);
170 CLog("Connect采用老的"+scriptProcessor+","+(Recorder[ConnectEnableWorklet]?"但已":"可")+"设置"+RecTxt+"."+ConnectEnableWorklet+"=true尝试启用"+audioWorklet+webMTips+oldIsBest,3);
171
172 var process=stream._p=oldFn.call(ctx,bufferSize,1,1);//单声道,省的数据处理复杂
173 mediaConn(process);
174

Callers 2

recorder-core.jsFile · 0.70
f1Function · 0.70

Calls 1

connWebMFunction · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…