6 lines
27 KiB
JavaScript
6 lines
27 KiB
JavaScript
|
|
/*
|
|||
|
|
录音
|
|||
|
|
https://github.com/xiangyuecn/Recorder
|
|||
|
|
src: recorder-core.js,engine/wav.js
|
|||
|
|
*/
|
|||
|
|
!function(e){var t="object"==typeof window&&!!window.document,r=t?window:Object;!function(e,S){"use strict";var x=function(){},u=function(e){return"number"==typeof e},L=function(e){return JSON.stringify(e)},X=function(e){return new c(e)},M=X.LM="2025-01-11 09:28",k="https://github.com/xiangyuecn/Recorder",T="Recorder",I="getUserMedia",G="srcSampleRate",N="sampleRate",i="bitRate",A="catch",t=e[T];if(t&&t.LM==M)return t.CLog(t.i18n.$T("K8zP::重复导入{1}",0,T),3);X.IsOpen=function(){var e=X.Stream;if(e){var t=W(e),r=t[0];if(r){var n=r.readyState;return"live"==n||n==r.LIVE}}return!1},X.BufferSize=4096,X.Destroy=function(){for(var e in q(T+" Destroy"),P(),r)r[e]()};var r={};X.BindDestroy=function(e,t){r[e]=t},X.Support=function(){if(!S)return!1;var e=navigator.mediaDevices||{};return e[I]||(e=navigator)[I]||(e[I]=e.webkitGetUserMedia||e.mozGetUserMedia||e.msGetUserMedia),!!e[I]&&(X.Scope=e,!!X.GetContext())},X.GetContext=function(e){if(!S)return null;var t=window.AudioContext;if(t||(t=window.webkitAudioContext),!t)return null;var r=X.Ctx,n=0;return r||(r=X.Ctx=new t,n=1,X.NewCtxs=X.NewCtxs||[],X.BindDestroy("Ctx",function(){var e=X.Ctx;e&&e.close&&(a(e),X.Ctx=0);var t=X.NewCtxs;X.NewCtxs=[];for(var r=0;r<t.length;r++)a(t[r])})),e&&r.close&&(n||(r._useC||a(r),r=new t),r._useC=1,X.NewCtxs.push(r)),r},X.CloseNewCtx=function(e){if(e&&e.close){a(e);for(var t=X.NewCtxs||[],r=t.length,n=0;n<t.length;n++)if(t[n]==e){t.splice(n,1);break}q(Y("mSxV::剩{1}个GetContext未close",0,r+"-1="+t.length),t.length?3:0)}};var a=function(e){if(e&&e.close&&!e._isC&&(e._isC=1,"closed"!=e.state))try{e.close()}catch(e){q("ctx close err",1,e)}},R=X.ResumeCtx=function(r,n,a,o){var i=0,s=0,c=0,f=0,u="EventListener",l="ResumeCtx ",v=function(e,t){s&&p(),i||(i=1,e&&o(e,f),t&&a(f)),t&&(!r._LsSC&&r["add"+u]&&r["add"+u]("statechange",h),r._LsSC=1,c=1)},p=function(e){if(!e||!s){s=e?1:0;for(var t=["focus","mousedown","mouseup","touchstart","touchend"],r=0;r<t.length;r++)window[(e?"add":"remove")+u](t[r],h,!0)}},h=function(){var e=r.state,t=g(e);if(!i&&!n(t?++f:f))return v();t?(c&&q(l+"sc "+e,3),p(1),r.resume().then(function(){c&&q(l+"sc "+r.state),v(0,1)})[A](function(e){q(l+"error",1,e),g(r.state)||v(e.message||"error")})):"closed"==e?(c&&!r._isC&&q(l+"sc "+e,1),v("ctx closed")):v(0,1)};h()},g=X.CtxSpEnd=function(e){return"suspended"==e||"interrupted"==e},O=function(e){var t=e.state,r="ctx.state="+t;return g(t)&&(r+=Y("nMIy::(注意:ctx不是running状态,rec.open和start至少要有一个在用户操作(触摸、点击等)时进行调用,否则将在rec.start时尝试进行ctx.resume,可能会产生兼容性问题(仅iOS),请参阅文档中runningContext配置)")),r},D="ConnectEnableWebM";X[D]=!0;var z="ConnectEnableWorklet";X[z]=!1;var E=function(e){var c=e.BufferSize||X.BufferSize,f=e.Stream,i=f._c,u=i[N],l={},t=W(f),r=t[0],n=null,a="";if(r&&r.getSettings){var o=(n=r.getSettings())[N];o&&o!=u&&(a=Y("eS8i::Stream的采样率{1}不等于{2},将进行采样率转换(注意:音质不会变好甚至可能变差),主要在移动端未禁用回声消除时会产生此现象,浏览器有回声消除时可能只会返回16k采样率的音频数据,",0,o,u))}f._ts=n,q(a+"Stream TrackSet: "+L(n),a?3:0);var v,s,p,h=function(e){var t=f._m=i.createMediaStreamSource(f),r=i.destination,n="createMediaStreamDestination";i[n]&&(r=f._d=i[n]()),t.connect(e),e.connect(r)},g="",d=f._call,m=function(e,t){for(var r in d){if(t!=u){l.index=0;var n=(l=X.SampleData([e],t,u,l,{_sum:1})).data,a=l._sum}else{l={};for(var o=e.length,n=new Int16Array(o),a=0,i=0;i<o;i++){var s=Math.max(-1,Math.min(1,e[i]));s=s<0?32768*s:32767*s,n[i]=s,a+=Math.abs(s)}}for(var c in d)d[c](n,a);return}},C="ScriptProcessor",_="audioWorklet",y=T+" "+_,w="RecProc",b="MediaRecorder",S=b+".WebM.PCM",x=i.createScriptProcessor||i.createJavaScriptNode,M=Y("ZGlf::。由于{1}内部1秒375次回调,在移动端可能会有性能问题导致回调丢失录音变短,PC端无影响,暂不建议开启{1}。",0,_),k=function(){s=f.isWorklet=!1,F(f),q(Y("7TU0::Connect采用老的{1},",0
|