From 44ff21ffcdda1ca60d9ededecf032ad6e9c27f67 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Fri, 27 May 2022 14:48:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E5=8F=91=E9=80=81?= =?UTF-8?q?=E5=BD=95=E9=9F=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/DialogController.php | 44 +++ app/Http/Middleware/VerifyCsrfToken.php | 3 + app/Models/WebSocketDialogMsg.php | 4 + app/Module/Base.php | 33 ++ public/css/fonts/taskfont.ttf | Bin 58416 -> 59144 bytes public/css/fonts/taskfont.woff | Bin 31284 -> 31736 bytes public/css/fonts/taskfont.woff2 | Bin 26648 -> 26940 bytes public/js/recorder.mp3.min.js | 6 + .../js/recorder/frequency.histogram.view.js | 338 ++++++++++++++++++ public/js/recorder/lib.fft.js | 111 ++++++ public/js/recorder/recorder.mp3.min.js | 6 + resources/assets/js/App.vue | 4 +- .../assets/js/components/AudioManager.vue | 93 +++++ resources/assets/js/directives/longpress.js | 46 --- resources/assets/js/directives/touchmouse.js | 29 +- .../manage/components/ChatInput/index.vue | 327 ++++++++++++++--- .../js/pages/manage/components/DialogView.vue | 41 +++ .../pages/manage/components/DialogWrapper.vue | 77 +++- .../js/pages/manage/components/TaskDetail.vue | 5 +- .../assets/js/pages/manage/messenger.vue | 2 + resources/assets/sass/components/mobile.scss | 15 + .../sass/pages/components/chat-input.scss | 264 ++++++++------ .../sass/pages/components/dialog-wrapper.scss | 136 +++++-- .../sass/pages/components/task-detail.scss | 31 +- .../statics/public/css/fonts/taskfont.ttf | Bin 58416 -> 59144 bytes .../statics/public/css/fonts/taskfont.woff | Bin 31284 -> 31736 bytes .../statics/public/css/fonts/taskfont.woff2 | Bin 26648 -> 26940 bytes .../js/recorder/frequency.histogram.view.js | 338 ++++++++++++++++++ .../statics/public/js/recorder/lib.fft.js | 111 ++++++ .../public/js/recorder/recorder.mp3.min.js | 6 + 30 files changed, 1766 insertions(+), 304 deletions(-) create mode 100644 public/js/recorder.mp3.min.js create mode 100644 public/js/recorder/frequency.histogram.view.js create mode 100644 public/js/recorder/lib.fft.js create mode 100644 public/js/recorder/recorder.mp3.min.js create mode 100644 resources/assets/js/components/AudioManager.vue delete mode 100755 resources/assets/js/directives/longpress.js create mode 100644 resources/assets/statics/public/js/recorder/frequency.histogram.view.js create mode 100644 resources/assets/statics/public/js/recorder/lib.fft.js create mode 100644 resources/assets/statics/public/js/recorder/recorder.mp3.min.js diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 68a0712b7..e93a8ed8b 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -263,6 +263,50 @@ class DialogController extends AbstractController return Base::retSuccess('发送成功', $list); } + /** + * @api {post} api/dialog/msg/sendrecord 07. 发送语音 + * + * @apiDescription 需要token身份 + * @apiVersion 1.0.0 + * @apiGroup dialog + * @apiName msg__sendrecord + * + * @apiParam {Number} dialog_id 对话ID + * @apiParam {String} base64 语音base64 + * @apiParam {Number} duration 语音时长(毫秒) + * + * @apiSuccess {Number} ret 返回状态码(1正确、0错误) + * @apiSuccess {String} msg 返回信息(错误描述) + * @apiSuccess {Object} data 返回数据 + */ + public function msg__sendrecord() + { + $user = User::auth(); + // + $dialog_id = Base::getPostInt('dialog_id'); + // + WebSocketDialog::checkDialog($dialog_id); + // + $path = "uploads/chat/" . date("Ym") . "/" . $dialog_id . "/"; + $base64 = Base::getPostValue('base64'); + $duration = Base::getPostInt('duration'); + if ($duration < 600) { + return Base::retError('说话时间太短'); + } + $data = Base::record64save([ + "base64" => $base64, + "path" => $path, + ]); + if (Base::isError($data)) { + return Base::retError($data['msg']); + } else { + $recordData = $data['data']; + $recordData['size'] *= 1024; + $recordData['duration'] = $duration; + return WebSocketDialogMsg::sendMsg($dialog_id, 'record', $recordData, $user->userid); + } + } + /** * @api {post} api/dialog/msg/sendfile 07. 文件上传 * diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index 60cdfc939..287d1c15b 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -36,6 +36,9 @@ class VerifyCsrfToken extends Middleware // 聊天发文本 'api/dialog/msg/sendtext/', + // 聊天发语音 + 'api/dialog/msg/sendrecord/', + // 聊天发文件 'api/dialog/msg/sendfile/', diff --git a/app/Models/WebSocketDialogMsg.php b/app/Models/WebSocketDialogMsg.php index 895058d1d..12b9e1c94 100644 --- a/app/Models/WebSocketDialogMsg.php +++ b/app/Models/WebSocketDialogMsg.php @@ -92,6 +92,8 @@ class WebSocketDialogMsg extends AbstractModel $value['type'] = in_array($value['ext'], ['jpg', 'jpeg', 'png', 'gif']) ? 'img' : 'file'; $value['path'] = Base::fillUrl($value['path']); $value['thumb'] = Base::fillUrl($value['thumb'] ?: Base::extIcon($value['ext'])); + } else if ($this->type === 'record') { + $value['path'] = Base::fillUrl($value['path']); } return $value; } @@ -210,6 +212,8 @@ class WebSocketDialogMsg extends AbstractModel switch ($this->type) { case 'text': return $this->previewTextMsg($this->msg['text'], $preserveHtml); + case 'record': + return "[语音]"; case 'file': if ($this->msg['type'] == 'img') { return "[图片]"; diff --git a/app/Module/Base.php b/app/Module/Base.php index c12af01fd..aca5b5b84 100755 --- a/app/Module/Base.php +++ b/app/Module/Base.php @@ -2174,6 +2174,39 @@ class Base return Min(Max(Base::nullShow(Request::input($inputName), $default), 1), $max); } + /** + * base64语音保存 + * @param array $param [ base64=带前缀的base64, path=>文件路径 ] + * @return array [name=>文件名, size=>文件大小(单位KB),file=>绝对地址, path=>相对地址, url=>全路径地址, ext=>文件后缀名] + */ + public static function record64save($param) + { + $base64 = $param['base64']; + if (preg_match('/^(data:\s*audio\/(\w+);base64,)/', $base64, $res)) { + $extension = $res[2]; + if (!in_array($extension, ['mp3', 'wav'])) { + return Base::retError('语音格式错误'); + } + $fileName = 'record_' . md5($base64) . '.' . $extension; + $fileDir = $param['path']; + $filePath = public_path($fileDir); + Base::makeDir($filePath); + if (file_put_contents($filePath . $fileName, base64_decode(str_replace($res[1], '', $base64)))) { + $fileSize = filesize($filePath . $fileName); + $array = [ + "name" => $fileName, //原文件名 + "size" => Base::twoFloat($fileSize / 1024, true), //大小KB + "file" => $filePath . $fileName, //文件的完整路径 "D:\www....KzZ.jpg" + "path" => $fileDir . $fileName, //相对路径 "uploads/pic....KzZ.jpg" + "url" => Base::fillUrl($fileDir . $fileName), //完整的URL "https://.....hhsKzZ.jpg" + "ext" => $extension, //文件后缀名 + ]; + return Base::retSuccess('success', $array); + } + } + return Base::retError('语音保存失败'); + } + /** * image64图片保存 * @param array $param [ image64=带前缀的base64, path=>文件路径, fileName=>文件名称, scale=>[压缩原图宽,高, 压缩方式] ] diff --git a/public/css/fonts/taskfont.ttf b/public/css/fonts/taskfont.ttf index d99aa660a7612a9e4c73f4799ed31cf81747e403..f8dc12f9a4fe96228c8e5da22ad2d021f6930da6 100644 GIT binary patch delta 4930 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 J$M25~_%HVr1}gvn delta 4226 zcmZwKd3==B6~^&j7D6EGB8ISqJ%j)OAwYl-wy;A8VGkfGOA!!}T3pIRR76xnXf-M- zA|fIp0-{v3Xsxx>Qj3U7DN<_hL7>*QN-4F{=W^QrntZQJo;>gLQ{aPyqHAANZpG}7ZYPR*M=>)KX3U+)i`kb-%7qGt89^}4@b z+RR(HblHx_E`A3|XCY<#g6prDRayUqcF^#Ep8I&=tYwRn(~^eiex_cZy=d0L**$iQ z-v=L7Lh{_j*WXxs>FjG~&xDUoL9LPp_qXnUh9tdKmMouHF|%&pZ^%g16L5Ub{-^$T zym;|qWm<=nNq4E^O|enBk`@-{!$d;F5O_!;lnz?*F2c@D9i7udmz z?BsDa@U(6>^BbOF3(vBZCwYR6JjEs+w;Cgb`I29V9sZ+@jnmH98p@mZ!60)5NlF-(vGzsmUij+{`RIY^n zPK8St;7Di}h7zZ0Cd6+ms%t|05K)B_N}Xz*FyE=_3FbtKy6 zgfCs}z2PrTTc7Y%r1e)9ApF&-9}xcLIH2R-oq7b}Yo~5O_{OPk5Y9Pu5W+v4dI{mY zQ&%DU)2Y7@E;w}>LgHV#5j7pcw@!_R@NcI^M9`#&)RG7nU3^WvP?6dcruC21urSqB zq}GLL*FYN2IvbYe)Z?(~PTdYmcWl(LhEoT`YC82oOuHviSHzk)^+!xQ zC{m}ynmP4MthrP7#9CH_xX0g^z4Hs+U)OxYDPE8nV=hTj| z_D+o%%W-PaSO>>Ct-s|u^=+)9QwPWLoO(Id$#J`mot-)**2SsOWBE=kAM5JW{IPCM zV*tC-X&_+TC7~P52CRqEl)%(9BFzh|r_R=ki?Rq7msylbwEtseivkK3D_ay*uvpom(1OLv7R47VR<M8$SEj>mO>(J8fJJKd%GFX_H0%VN76pXs>UaYDyEPC*xY*(vg3d!52B z_KH&s#$I&_#MnMb=qCPmWv@ASCJK&(*w<)GawX`R$aF zl;f%8sozzrN?Vn7uKKd-U!^ZgKU<@q#+n+TW^T<*8R;1_GS1eTQEOf8)Y^+`pH0+R zQ0I8v^127>wW+tN-pTrt>+f&Syg}tgCHW-_w9ZwX z-|v#w<#>L({Hya%b{*AqTep?nj$K*Y{dAA1J+>6&6wE8QuV81v>7Kbg=l9&z>!x0N zdwtqFt9McF9lehh<`ph2+|(zpPkEmMea`ni)vv7I)_zBex)&`f+S*wo>T zhVLCwYs89?StH*YRWzz<)Zx*Eqc@DcFeYcr;xS=t>DbMslx`_KF>chjTgJUL?m}5n zSw&e@+2QeP%ahA*EB|~#$%Jzg2Txo)@yMjSNy{g#n{;r}=aWxNDW9@^%DJf}Q#Vh0 zXj-$w6>}=qRBWpFxZ?cu%;^Qw%cfV&$ei)e%>0>UGneij-1vq!lg{kk`{~i7BzEsR IHn!$}0B1>civR!s diff --git a/public/css/fonts/taskfont.woff b/public/css/fonts/taskfont.woff index 88ee05f9cd98d46e32e7c6856edd74c638ce10b4..5eed1149f8ffede36ce63881772ee67a3e66ce9b 100644 GIT binary patch delta 31430 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 Uq?Y>!hq+>k*0MUD~J^%m! delta 30980 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 q6oHqk#$h$r5%C$Wm-1i^}K# diff --git a/public/css/fonts/taskfont.woff2 b/public/css/fonts/taskfont.woff2 index 14d232ee41adfd0f9c290c09c532f7e9aa516345..7db386e0d4bdcabc7337295cfdf15feaf9eec0ab 100644 GIT binary patch literal 26940 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
=B2RdLwCKx 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 diff --git a/public/js/recorder.mp3.min.js b/public/js/recorder.mp3.min.js new file mode 100644 index 000000000..0f810a1fa --- /dev/null +++ b/public/js/recorder.mp3.min.js @@ -0,0 +1,6 @@ +/* +录音 +https://github.com/xiangyuecn/Recorder +src: recorder-core.js,engine/mp3.js,engine/mp3-engine.js +*/ +!function(S){"use strict";var p=function(){},O=function(e){return new t(e)};O.LM="2022-05-04 20:10";var M="Recorder";O.IsOpen=function(){var e=O.Stream;if(e){var t=e.getTracks&&e.getTracks()||e.audioTracks||[],a=t[0];if(a){var s=a.readyState;return"live"==s||s==a.LIVE}}return!1},O.BufferSize=4096,O.Destroy=function(){for(var e in B(M+" Destroy"),v(),a)a[e]()};var a={};O.BindDestroy=function(e,t){a[e]=t},O.Support=function(){var e=S.AudioContext;if(e||(e=S.webkitAudioContext),!e)return!1;var t=navigator.mediaDevices||{};return t.getUserMedia||(t=navigator).getUserMedia||(t.getUserMedia=t.webkitGetUserMedia||t.mozGetUserMedia||t.msGetUserMedia),!!t.getUserMedia&&(O.Scope=t,O.Ctx&&"closed"!=O.Ctx.state||(O.Ctx=new e,O.BindDestroy("Ctx",function(){var e=O.Ctx;e&&e.close&&(e.close(),O.Ctx=0)})),!0)};var w="ConnectEnableWorklet";O[w]=!1;var b=function(e){var t=(e=e||O).BufferSize||O.BufferSize,s=O.Ctx,a=e.Stream,n=a._m=s.createMediaStreamSource(a),f=a._call,r=function(e,t){if(!t||m)for(var a in f){for(var s=t||e.inputBuffer.getChannelData(0),n=s.length,r=new Int16Array(n),i=0,_=0;_"+l,3);for(var f=0,c=r;c"+p.length+" 花:"+(Date.now()-s)+"ms"),setTimeout(function(){s=Date.now(),n[r.type](p,function(e){o(e,u)},function(e){_(e)})})}else _("未加载"+r.type+"编码器");else _("音频buffers被释放");else _("未采集到录音")}},S[M]&&(B("重复引入"+M,3),S[M].Destroy()),(S[M]=O).TrafficImgUrl="//ia.51.la/go1?id=20469973&pvFlag=1";var r=O.Traffic=function(e){e=e?"/"+M+"/Report/"+e:"";var t=O.TrafficImgUrl;if(t){var a=O.Traffic,s=/^(https?:..[^\/#]*\/?)[^#]*/i.exec(location.href)||[],n=s[1]||"http://file/",r=(s[0]||n)+e;if(0==t.indexOf("//")&&(t=/^https:/i.test(r)?"https:"+t:"http:"+t),e&&(t=t+"&cu="+encodeURIComponent(n+e)),!a[r]){a[r]=1;var i=new Image;i.src=t,B("Traffic Analysis Image: "+(e||M+".TrafficImgUrl="+O.TrafficImgUrl))}}}}(window),"function"==typeof define&&define.amd&&define(function(){return Recorder}),"object"==typeof module&&module.exports&&(module.exports=Recorder),function(){"use strict";var i;Recorder.prototype.enc_mp3={stable:!0,testmsg:"采样率范围48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000"},Recorder.prototype.mp3=function(a,s,e){var n=this.set,r=a.length,t=this.mp3_start(n);if(t)return this.mp3_encode(t,a),void this.mp3_complete(t,s,e,1);var i=new Recorder.lamejs.Mp3Encoder(1,n.sampleRate,n.bitRate),_=[],o=0,l=0,f=function(){if(o=c.byteLength?(_-=c.byteLength,l.push(c),e.splice(f,1),f--):(e[f]=c.slice(_),o=c,_=0)}if(!this.rm(e,t)){o&&(e[0]=o);for(f=0;f "+s.duration+"ms",2>=1;0!=e--;)n[r++]=i>a[s++]?0:1,n[r++]=i>a[s++]?0:1}function R(e,t,a,s,n,r){var i=(e>>=1)%2;for(e>>=1;0!=e--;){var _,o,l,f,c,h,u,m;_=a[s++]*t,o=a[s++]*t,c=0|_,l=a[s++]*t,h=0|o,f=a[s++]*t,u=0|l,_+=M.adj43[c],m=0|f,o+=M.adj43[h],n[r++]=0|_,l+=M.adj43[u],n[r++]=0|o,f+=M.adj43[m],n[r++]=0|l,n[r++]=0|f}0!=i&&(c=0|(_=a[s++]*t),h=0|(o=a[s++]*t),_+=M.adj43[c],o+=M.adj43[h],n[r++]=0|_,n[r++]=0|o)}var _=[1,2,5,7,7,10,10,13,13,13,13,13,13,13,13];function d(e,t,a,s){var n=function(e,t,a){var s=0,n=0;do{var r=e[t++],i=e[t++];s>=16)&&(_=r,s++),n.bits+=_,s}(e,t,a,_[n-1],s);case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:return function(e,t,a,s,n){var r=0,i=0,_=0,o=j.ht[s].xlen,l=j.ht[s].hlen,f=j.ht[s+1].hlen,c=j.ht[s+2].hlen;do{var h=e[t+0]*o+e[t+1];t+=2,r+=l[h],i+=f[h],_+=c[h]}while(t=n);r++);for(i=r-8;i<24&&!(j.ht[i].linmax>=n);i++);return function(e,t,a,s,n,r){var i,_=65536*j.ht[s].xlen+j.ht[n].xlen,o=0;do{var l=e[t++],f=e[t++];0!=l&&(14>=16)&&(o=i,s=n),r.bits+=o,s}(e,t,a,i,r,s)}}function u(e,t,a,s,n,r,i,_){for(var o=t.big_values,l=2;l>1<<1);for(null!=a&&(a.sfb_count1=0);1t.big_values&&(r=t.big_values),i=t.big_values;else if(t.block_type==Pe.NORM_TYPE){if(r=t.region0_count=e.bv_scf[n-2],i=t.region1_count=e.bv_scf[n-1],i=e.scalefac_band.l[r+i+2],r=e.scalefac_band.l[r+1],ir)return y.LARGE_BITS;if(function(e,t,a,s,n){var r,i,_,o=0,l=0,f=0,c=0,h=t,u=0,m=h,p=0,b=e,v=0;for(_=null!=n&&s.global_gain==n.global_gain,i=s.block_type==Pe.SHORT_TYPE?38:21,r=0;r<=i;r++){var d=-1;if((_||s.block_type==Pe.NORM_TYPE)&&(d=s.global_gain-(s.scalefac[r]+(0!=s.preflag?M.pretab[r]:0)<s.max_nonzero_coeff&&(g=s.max_nonzero_coeff-o+1,Te.fill(t,s.max_nonzero_coeff,576,0),(S=g)<0&&(S=0),r=i+1),0==l&&0==f&&(m=h,p=u,b=e,v=c),null!=n&&0=n.sfb_count1&&0=n.step[r]?(0!=l&&(R(l,a,b,v,m,p),l=0,m=h,p=u,b=e,v=c),f+=S):(0!=f&&(w(f,a,b,v,m,p),f=0,m=h,p=u,b=e,v=c),l+=S),S<=0){0!=f&&(w(f,a,b,v,m,p),f=0),0!=l&&(R(l,a,b,v,m,p),l=0);break}}r<=i&&(u+=s.width[r],c+=s.width[r],o+=s.width[r])}0!=l&&(R(l,a,b,v,m,p),l=0),0!=f&&(w(f,a,b,v,m,p),f=0)}(t,n,M.IPOW20(a.global_gain),a,s),0!=(2&e.substep_shaping))for(var i=0,_=a.global_gain+a.scalefac_scale,o=.634521682242439/M.IPOW20(_),l=0;l=o?n[f]:0}return this.noquant_count_bits(e,a,s)},this.best_huffman_divide=function(e,t){var a=new x,s=t.l3_enc,n=Be(23),r=Be(23),i=Be(23),_=Be(23);if(t.block_type!=Pe.SHORT_TYPE||1!=e.mode_gr){a.assign(t),t.block_type==Pe.NORM_TYPE&&(!function(e,t,a,s,n,r,i){for(var _=t.big_values,o=0;o<=22;o++)s[o]=y.LARGE_BITS;for(o=0;o<16;o++){var l=e.scalefac_band.l[o+1];if(_<=l)break;var f=0,c=new v(f),h=d(a,0,l,c);f=c.bits;for(var u=0;u<8;u++){var m=e.scalefac_band.l[o+u+2];if(_<=m)break;var p=f,b=d(a,l,m,c=new v(p));p=c.bits,s[o+u]>p&&(s[o+u]=p,r[(n[o+u]=o)+u]=h,i[o+u]=b)}}}(e,t,s,n,r,i,_),u(e,a,t,s,n,r,i,_));var o=a.big_values;if(!(0==o||1<(s[o-2]|s[o-1])||576<(o=t.count1+2))){a.assign(t),a.count1=o;for(var l=0,f=0;o>a.big_values;o-=4){var c=2*(2*(2*s[o-4]+s[o-3])+s[o-2])+s[o-1];l+=j.t32l[c],f+=j.t33l[c]}if(a.big_values=o,a.count1table_select=0,fa.part2_3_length&&t.assign(a)}}}};var h=[1,1,1,1,8,2,2,2,4,4,4,8,8,8,16,16],m=[1,2,4,8,1,2,4,8,2,4,8,2,4,8,4,8],p=[0,0,0,0,3,1,1,1,2,2,2,3,3,3,4,4],b=[0,1,2,3,0,1,2,3,1,2,3,1,2,3,2,3];k.slen1_tab=p,k.slen2_tab=b,this.best_scalefac_store=function(e,t,a,s){var n,r,i,_,o=s.tt[t][a],l=0;for(n=i=0;n>=1);o.scalefac_scale=l=1}}if(0==o.preflag&&o.block_type!=Pe.SHORT_TYPE&&2==e.mode_gr){for(n=11;nf&&(s.part2_length=f,s.scalefac_compress=r)}}(a,s),l=0),n=0;ns[t]&&(e.part2_length=s[t],e.scalefac_compress=t);return e.part2_length==y.LARGE_BITS};var g=[[15,15,7,7],[15,15,7,0],[7,3,0,0],[15,31,31,0],[7,7,7,0],[3,3,0,0]];this.scale_bitcount_lsf=function(e,t){var a,s,n,r,i,_,o,l,f=Be(4),c=t.scalefac;for(a=0!=t.preflag?2:0,o=0;o<4;o++)f[o]=0;if(t.block_type==Pe.SHORT_TYPE){s=1;var h=M.nr_of_sfb_block[a][s];for(n=l=0;n<4;n++)for(r=h[n]/3,o=0;of[n]&&(f[n]=c[3*l+i])}else{s=0;h=M.nr_of_sfb_block[a][s];for(n=l=0;n<4;n++)for(r=h[n],o=0;of[n]&&(f[n]=c[l])}for(_=!1,n=0;n<4;n++)f[n]>g[a][n]&&(_=!0);if(!_){var u,m,p,b;for(t.sfb_partition_table=M.nr_of_sfb_block[a][s],n=0;n<4;n++)t.slen[n]=S[f[n]];switch(u=t.slen[0],m=t.slen[1],p=t.slen[2],b=t.slen[3],a){case 0:t.scalefac_compress=(5*u+m<<4)+(p<<2)+b;break;case 1:t.scalefac_compress=400+(5*u+m<<2)+p;break;case 2:t.scalefac_compress=500+3*u+m;break;default:$.err.printf("intensity stereo not implemented yet\n")}}if(!_)for(n=t.part2_length=0;n<4;n++)t.part2_length+=t.slen[n]*t.sfb_partition_table[n];return _};var S=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4];this.huffman_init=function(e){for(var t=2;t<=576;t+=2){for(var a,s=0;e.scalefac_band.l[++s]t;)a--;for(a<0&&(a=n[s][0]),e.bv_scf[t-2]=a,a=n[s][1];e.scalefac_band.l[a+e.bv_scf[t-2]+2]>t;)a--;a<0&&(a=n[s][1]),e.bv_scf[t-1]=a}}}function X(){}function M(){this.setModules=function(e,t,a){e,t,a};var _=[0,49345,49537,320,49921,960,640,49729,50689,1728,1920,51009,1280,50625,50305,1088,52225,3264,3456,52545,3840,53185,52865,3648,2560,51905,52097,2880,51457,2496,2176,51265,55297,6336,6528,55617,6912,56257,55937,6720,7680,57025,57217,8e3,56577,7616,7296,56385,5120,54465,54657,5440,55041,6080,5760,54849,53761,4800,4992,54081,4352,53697,53377,4160,61441,12480,12672,61761,13056,62401,62081,12864,13824,63169,63361,14144,62721,13760,13440,62529,15360,64705,64897,15680,65281,16320,16e3,65089,64001,15040,15232,64321,14592,63937,63617,14400,10240,59585,59777,10560,60161,11200,10880,59969,60929,11968,12160,61249,11520,60865,60545,11328,58369,9408,9600,58689,9984,59329,59009,9792,8704,58049,58241,9024,57601,8640,8320,57409,40961,24768,24960,41281,25344,41921,41601,25152,26112,42689,42881,26432,42241,26048,25728,42049,27648,44225,44417,27968,44801,28608,28288,44609,43521,27328,27520,43841,26880,43457,43137,26688,30720,47297,47489,31040,47873,31680,31360,47681,48641,32448,32640,48961,32e3,48577,48257,31808,46081,29888,30080,46401,30464,47041,46721,30272,29184,45761,45953,29504,45313,29120,28800,45121,20480,37057,37249,20800,37633,21440,21120,37441,38401,22208,22400,38721,21760,38337,38017,21568,39937,23744,23936,40257,24320,40897,40577,24128,23040,39617,39809,23360,39169,22976,22656,38977,34817,18624,18816,35137,19200,35777,35457,19008,19968,36545,36737,20288,36097,19904,19584,35905,17408,33985,34177,17728,34561,18368,18048,34369,33281,17088,17280,33601,16640,33217,32897,16448];this.updateMusicCRC=function(e,t,a,s){for(var n=0;n>8^_[255&(i^r)]);var r,i}}function q(){var o=this,s=32773,c=null,h=null,r=null,u=null;this.setModules=function(e,t,a,s){c=e,h=t,r=a,u=s};var m=null,l=0,p=0,b=0;function v(e,t,a){for(;0>a<>a<>3]|=t>>a<<8-(7&s)-n,s+=n}e.header[e.h_ptr].ptr=s}function n(e,t){e<<=8;for(var a=0;a<8;a++)0!=(65536&((t<<=1)^(e<<=1)))&&(t^=s);return t}function d(e,t){var a,s=j.ht[t.count1table_select+32],n=0,r=t.big_values,i=t.big_values;for(a=(t.count1-t.big_values)/4;0t.big_values&&(a=t.big_values);var s=g(e,t.table_select[0],0,a,t);return s+=g(e,t.table_select[1],a,t.big_values,t)}function M(e,t){var a,s,n,r;a=t.big_values;var i=t.region0_count+1;return n=e.scalefac_band.l[i],i+=t.region1_count+1,a>8),t[5]=byte(255&a)},this.flush_bitstream=function(e){var t,a,s=e.internal_flags,n=s.h_ptr-1;if(-1==n&&(n=Z.MAX_HEADER_BUF-1),t=s.l3_side,!((a=R(e,new w))<0)){if(_(e,a),s.ResvSize=0,t.main_data_begin=0,s.findReplayGain){var r=c.GetTitleGain(s.rgdata);s.RadioGain=0|Math.floor(10*r+.5)}s.findPeakSample&&(s.noclipGainChange=0|Math.ceil(20*A(s.PeakSample/32767)*10),0 ResvSize"),8*t.main_data_begin!=a.ResvSize&&($.err.printf("bit reservoir error: \nl3_side.main_data_begin: %d \nResvoir size: %d \nresv drain (post) %d \nresv drain (pre) %d \nheader and sideinfo: %d \ndata bits: %d \ntotal bits: %d (remainder: %d) \nbitsperframe: %d \n",8*t.main_data_begin,a.ResvSize,t.resvDrain_post,t.resvDrain_pre,8*a.sideinfo_len,n-t.resvDrain_post-8*a.sideinfo_len,n,n%8,s),$.err.println("This is a fatal error. It has several possible causes:"),$.err.println("90%% LAME compiled with buggy version of gcc using advanced optimizations"),$.err.println(" 9%% Your system is overclocked"),$.err.println(" 1%% bug in LAME encoding library"),a.ResvSize=8*t.main_data_begin),1e9e.PeakSample?e.PeakSample=o[0][_]:-o[0][_]>e.PeakSample&&(e.PeakSample=-o[0][_]);if(1e.PeakSample?e.PeakSample=o[1][_]:-o[1][_]>e.PeakSample&&(e.PeakSample=-o[1][_])}if(e.findReplayGain&&c.AnalyzeSamples(e.rgdata,o[0],0,o[1],0,f,e.channels_out)==X.GAIN_ANALYSIS_ERROR)return-6}}return r},this.init_bit_stream_w=function(e){m=B(U.LAME_MAXMP3BUFFER),e.h_ptr=e.w_ptr=0,e.header[e.h_ptr].write_timing=0,p=-1,l=b=0}}function e(e,t,a,s){this.xlen=e,this.linmax=t,this.table=a,this.hlen=s}Ee.STEREO=new Ee(0),Ee.JOINT_STEREO=new Ee(1),Ee.DUAL_CHANNEL=new Ee(2),Ee.MONO=new Ee(3),Ee.NOT_SET=new Ee(4),X.STEPS_per_dB=100,X.MAX_dB=120,X.GAIN_NOT_ENOUGH_SAMPLES=-24601,X.GAIN_ANALYSIS_ERROR=0,X.GAIN_ANALYSIS_OK=1,X.INIT_GAIN_ANALYSIS_ERROR=0,X.INIT_GAIN_ANALYSIS_OK=1,X.MAX_ORDER=X.YULE_ORDER=10,X.MAX_SAMPLES_PER_WINDOW=(X.MAX_SAMP_FREQ=48e3)*(X.RMS_WINDOW_TIME_NUMERATOR=1)/(X.RMS_WINDOW_TIME_DENOMINATOR=20)+1,M.NUMTOCENTRIES=100,M.MAXFRAMESIZE=2880,q.EQ=function(e,t){return Math.abs(e)>Math.abs(t)?Math.abs(e-t)<=1e-6*Math.abs(e):Math.abs(e-t)<=1e-6*Math.abs(t)},q.NEQ=function(e,t){return!q.EQ(e,t)};var j={};function F(e){this.bits=e}function T(){this.over_noise=0,this.tot_noise=0,this.max_noise=0,this.over_count=0,this.over_SSD=0,this.bits=0}function r(e,t,a,s){this.l=Be(1+Pe.SBMAX_l),this.s=Be(1+Pe.SBMAX_s),this.psfb21=Be(1+Pe.PSFB21),this.psfb12=Be(1+Pe.PSFB12);var n=this.l,r=this.s;4==arguments.length&&(this.arrL=e,this.arrS=t,this.arr21=a,this.arr12=s,$.arraycopy(this.arrL,0,n,0,Math.min(this.arrL.length,this.l.length)),$.arraycopy(this.arrS,0,r,0,Math.min(this.arrS.length,this.s.length)),$.arraycopy(this.arr21,0,this.psfb21,0,Math.min(this.arr21.length,this.psfb21.length)),$.arraycopy(this.arr12,0,this.psfb12,0,Math.min(this.arr12.length,this.psfb12.length)))}function y(){var l=null,m=null,s=null;this.setModules=function(e,t,a){l=e,m=t,s=a},this.IPOW20=function(e){return u[e]};var x=2.220446049250313e-16,f=y.IXMAX_VAL+2,c=y.Q_MAX,h=y.Q_MAX2,n=100;this.nr_of_sfb_block=[[[6,5,5,5],[9,9,9,9],[6,9,9,9]],[[6,5,7,3],[9,9,12,6],[6,9,12,6]],[[11,10,0,0],[18,18,0,0],[15,18,0,0]],[[7,7,7,0],[12,12,12,0],[6,15,12,0]],[[6,6,6,3],[12,9,9,6],[6,12,9,6]],[[8,8,5,0],[15,12,9,0],[6,18,9,0]]];var w=[0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0];this.pretab=w,this.sfBandIndex=[new r([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0,4,8,12,18,24,32,42,56,74,100,132,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new r([0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,332,394,464,540,576],[0,4,8,12,18,26,36,48,62,80,104,136,180,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new r([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0,4,8,12,18,26,36,48,62,80,104,134,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new r([0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162,196,238,288,342,418,576],[0,4,8,12,16,22,30,40,52,66,84,106,136,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new r([0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576],[0,4,8,12,16,22,28,38,50,64,80,100,126,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new r([0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576],[0,4,8,12,16,22,30,42,58,78,104,138,180,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new r([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0,4,8,12,18,26,36,48,62,80,104,134,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new r([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0,4,8,12,18,26,36,48,62,80,104,134,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new r([0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576],[0,8,16,24,36,52,72,96,124,160,162,164,166,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0])];var R=Ae(c+h+1),u=Ae(c),p=Ae(f),b=Ae(f);function v(e,t){var a=s.ATHformula(t,e);return a-=n,a=Math.pow(10,a/10+e.ATHlower)}function B(e){this.s=e}this.adj43=b,this.iteration_init=function(e){var t,a=e.internal_flags,s=a.l3_side;if(0==a.iteration_init_init){for(a.iteration_init_init=1,s.main_data_begin=0,function(e){for(var t=e.internal_flags.ATH.l,a=e.internal_flags.ATH.psfb21,s=e.internal_flags.ATH.s,n=e.internal_flags.ATH.psfb12,r=e.internal_flags,i=e.out_samplerate,_=0;_>2&63)&&(t-=64),n=Math.pow(10,t/4/10),32<=(t=e.exp_nspsytune>>8&63)&&(t-=64),r=Math.pow(10,t/4/10),32<=(t=e.exp_nspsytune>>14&63)&&(t-=64),i=Math.pow(10,t/4/10),32<=(t=e.exp_nspsytune>>20&63)&&(t-=64),_=i*Math.pow(10,t/4/10),t=0;t3*s/4&&(f[_]=3*s/4),f[_]<0&&(f[_]=0),f[_]+a[_]>Z.MAX_BITS_PER_CHANNEL&&(f[_]=Math.max(0,Z.MAX_BITS_PER_CHANNEL-a[_])),i+=f[_];if(hZ.MAX_BITS_PER_CHANNEL-e[0]&&(r=Z.MAX_BITS_PER_CHANNEL-e[0]),r<0&&(r=0),125<=e[1]&&(125>1,B=0;do{B+=k=f[_]*f[_],M+=k>1;S=d/b,M=x;do{var k,T;B+=k=f[_]*f[_],M+=ks[r-3+1]&&(s[r-3+1]+=(s[r-3]-s[r-3+1])*i.decay),s[r-3+1]>s[r-3+2]&&(s[r-3+2]+=(s[r-3+1]-s[r-3+2])*i.decay))}return o},this.calc_noise_core=function(e,t,a,s){var n=0,r=t.s,i=e.l3_enc;if(r>e.count1)for(;0!=a--;){o=e.xr[r],r++,n+=o*o,o=e.xr[r],r++,n+=o*o}else if(r>e.big_values){var _=Ae(2);for(_[0]=0,_[1]=s;0!=a--;){o=Math.abs(e.xr[r])-_[i[r]],r++,n+=o*o,o=Math.abs(e.xr[r])-_[i[r]],r++,n+=o*o}}else for(;0!=a--;){var o;o=Math.abs(e.xr[r])-p[i[r]]*s,r++,n+=o*o,o=Math.abs(e.xr[r])-p[i[r]]*s,r++,n+=o*o}return t.s=r,n},this.calc_noise=function(e,t,a,s,n){var r,i,_=0,o=0,l=0,f=0,c=0,h=-20,u=0,m=e.scalefac,p=0;for(r=s.over_SSD=0;r>1,u+e.width[r]>e.max_nonzero_coeff)i=0<(g=e.max_nonzero_coeff-u+1)?g>>1:0;var M=new B(u);d=this.calc_noise_core(e,M,i,S),u=M.s,null!=n&&(n.step[r]=v,n.noise[r]=d),d=a[_++]=d/t[o++],d=ee.FAST_LOG10(Math.max(d,1e-20)),null!=n&&(n.noise_log[r]=d)}if(null!=n&&(n.global_gain=e.global_gain),c+=d,0a.max_noise-.2&&a.tot_noisea.max_noise-.2&&a.tot_noisea.max_noise-.1&&a.tot_noise+a.over_noisea.max_noise-.15&&a.tot_noise+a.over_noise+a.over_noiset.xrpow_max&&(t.xrpow_max=s[f+c]);if(2==i.noise_shaping_amp)return}}}(e,t,a,s,n);var i=_(t);return!i&&(!(i=2==r.mode_gr?w.scale_bitcount(t):w.scale_bitcount_lsf(r,t))||(1e.xrpow_max&&(e.xrpow_max=t[a+i])}e.scalefac[s]=r>>1}e.preflag=0,e.scalefac_scale=1}(t,s),i=!1):t.block_type==Pe.SHORT_TYPE&&0>t.scalefac_scale))n[s]=f,o+=3*l;else{n[s]=0;var c=210+(f<t.xrpow_max&&(t.xrpow_max=a[o+h]);o+=l*(3-r-1)}}var u=M.IPOW20(202);for(o+=t.width[s]*(r+1),h=-t.width[s];h<0;h++)a[o+h]*=u,a[o+h]>t.xrpow_max&&(t.xrpow_max=a[o+h])}}return!1}(r,t,s)||_(t))),i||(i=2==r.mode_gr?w.scale_bitcount(t):w.scale_bitcount_lsf(r,t)),!i))}this.setModules=function(e,t,a,s){v=e,g=t,this.rv=t,M=a,this.qupvt=a,w=s,n.setModules(M,w)},this.ms_convert=function(e,t){for(var a=0;a<576;++a){var s=e.tt[t][0].xr[a],n=e.tt[t][1].xr[a];e.tt[t][0].xr[a]=(s+n)*(.5*ee.SQRT2),e.tt[t][1].xr[a]=(s-n)*(.5*ee.SQRT2)}},this.init_xrpow=function(e,t,a){var s=0,n=0|t.max_nonzero_coeff;if(t.xrpow_max=0,Te.fill(a,n,576,0),1e-20<(s=function(e,t,a,s){for(var n=s=0;n<=a;++n){var r=Math.abs(e.xr[n]);s+=r,t[n]=Math.sqrt(r*Math.sqrt(r)),t[n]>e.xrpow_max&&(e.xrpow_max=t[n])}return s}(t,a,n,s))){var r=0;0!=(2&e.substep_shaping)&&(r=1);for(var i=0;iS&&_.global_gain<=g;)_.global_gain++;if(_.global_gain>g)break;if(0==f.over_count){for(;(_.part2_3_length=w.count_bits(i,s,_,c))>h&&_.global_gain<=g;)_.global_gain++;if(_.global_gain>g)break}if(M.calc_noise(_,a,l,d,c),d.bits=_.part2_3_length,0!=(B(t.block_type!=Pe.SHORT_TYPE?e.quant_comp:e.quant_comp_short,f,d,_,l)?1:0))h=t.part2_3_length,f=d,t.assign(_),b=0,$.arraycopy(s,0,o,0,576);else if(0==i.full_outer_loop){if(++b>v&&0==f.over_count)break;if(3==i.noise_shaping_amp&&m&&30r[f.VBR_max_bitrate]&&(_[p][v]*=r[f.VBR_max_bitrate],_[p][v]/=u),i[p][v]>_[p][v]&&(i[p][v]=_[p][v]);return h},this.bitpressure_strategy=function(e,t,a,s){for(var n=0;nZ.MAX_BITS_PER_CHANNEL&&(s[_][o]=Z.MAX_BITS_PER_CHANNEL),m+=s[_][o]}if(Z.MAX_BITS_PER_GRANULEZ.MAX_BITS_PER_CHANNEL&&(s[_][o]=Z.MAX_BITS_PER_CHANNEL),l+=s[_][o];if(l>r[0])for(_=0;_=s?(e.ATH.adjust*=.075*s+.925,e.ATH.adjust=s?e.ATH.adjust=s:e.ATH.adjust>1,u=(h=(c=s)<<1)+c,s=h<<1,r=(n=t)+m;M=e[n+0]-e[n+c],S=e[n+0]+e[n+c],A=e[n+h]-e[n+u],R=e[n+h]+e[n+u],e[n+h]=S-R,e[n+0]=S+R,e[n+u]=M-A,e[n+c]=M+A,M=e[r+0]-e[r+c],S=e[r+0]+e[r+c],A=ee.SQRT2*e[r+u],R=ee.SQRT2*e[r+h],e[r+h]=S-R,e[r+0]=S+R,e[r+u]=M-A,e[r+c]=M+A,r+=s,(n+=s)<_;);for(l=T[i+0],o=T[i+1],f=1;fO[u+3-2]?Q/=O[u+3-2]:Q=O[u+3-2]>10*Q?O[u+3-2]/(10*Q):0,C[u+3]=Q}if(e.analysis){var W=C[0];for(u=1;u<12;u++)WV&&(q[u/3]=u%3+1);for(u=1;u<4;u++){(N[u-1]>N[u]?N[u-1]/N[u]:N[u]/N[u-1])<1.7&&(q[u]=0,1==u&&(q[0]=0))}for(0!=q[0]&&0!=S.nsPsy.lastAttacks[c]&&(q[0]=0),3!=S.nsPsy.lastAttacks[c]&&q[0]+q[1]+q[2]+q[3]==0||((D=0)!=q[1]&&0!=q[0]&&(q[1]=0),0!=q[2]&&0!=q[1]&&(q[2]=0),0!=q[3]&&0!=q[2]&&(q[3]=0)),c<2?T[c]=D:0==D&&(T[0]=T[1]=0),o[c]=S.tot_ener[c],he(e,j,F,M,1&c,w,1&c,s,c,t,a),Me(S,j,R,Y,X),we(S,Y,X,y),v=0;v<3;v++){var J,$;for(ve(e,F,B,A,c,v),pe(S,B,A,c,v),b=0;b1.58*e.thm[1].l[t]||e.thm[1].l[t]>1.58*e.thm[0].l[t])){var a=e.mld_l[t]*e.en[3].l[t],s=Math.max(e.thm[2].l[t],Math.min(e.thm[3].l[t],a));a=e.mld_l[t]*e.en[2].l[t];var n=Math.max(e.thm[3].l[t],Math.min(e.thm[2].l[t],a));e.thm[2].l[t]=s,e.thm[3].l[t]=n}for(t=0;t1.58*e.thm[1].s[t][r]||e.thm[1].s[t][r]>1.58*e.thm[0].s[t][r]||(a=e.mld_s[t]*e.en[3].s[t][r],s=Math.max(e.thm[2].s[t][r],Math.min(e.thm[3].s[t][r],a)),a=e.mld_s[t]*e.en[2].s[t][r],n=Math.max(e.thm[3].s[t][r],Math.min(e.thm[2].s[t][r],a)),e.thm[2].s[t][r]=s,e.thm[3].s[t][r]=n)}(S),g=e.msfix,0g&&(s[o]=g),1a[o]&&(s[o]=a[o]),l.masking_lower<1&&(s[o]*=l.masking_lower)}for(;of&&(s[r]=f),1a[r]&&(s[r]=a[r]),e.masking_lower<1&&(s[r]*=e.masking_lower)}for(;rM[b+3-2]?E/=M[b+3-2]:E=M[b+3-2]>10*E?M[b+3-2]/(10*E):0,S[b+3]=E}for(b=0;b<3;++b){var P=M[3*b+3]+M[3*b+4]+M[3*b+5],I=1;6*M[3*b+5]A&&(o[m][b/3]=b%3+1);for(b=1;b<4;b++){var L=w[b-1],V=w[b];Math.max(L,V)<4e4&&L<1.7*V&&V<1.7*L&&(1==b&&o[m][0]<=o[m][b]&&(o[m][0]=0),o[m][b]=0)}o[m][0]<=c.nsPsy.lastAttacks[m]&&(o[m][0]=0),3!=c.nsPsy.lastAttacks[m]&&o[m][0]+o[m][1]+o[m][2]+o[m][3]==0||((k=0)!=o[m][1]&&0!=o[m][0]&&(o[m][1]=0),0!=o[m][2]&&0!=o[m][1]&&(o[m][2]=0),0!=o[m][3]&&0!=o[m][2]&&(o[m][3]=0)),m<2?l[m]=k:0==k&&(l[0]=l[1]=0),i[m]=c.tot_ener[m]}}(e,t,a,s,n,r,o,w,R,B),function(e,t){var a=e.internal_flags;e.short_blocks!=xe.short_block_coupled||0!=t[0]&&0!=t[1]||(t[0]=t[1]=0);for(var s=0;s=n&&(p=i*(l[t]-n)/(24-n)+r*(24-l[t])/(24-n)),c[t]=Math.pow(10,p/10),0=n&&(p=o*(l[t]-n)/(24-n)+_*(24-l[t])/(24-n)),c[t]=Math.pow(10,p/10),g=K.MAX_VALUE;for(v=0;va.npart_l-1&&(a.s3ind[M][1]=a.npart_l-1);var w=576*a.mode_gr/h;if(a.ATH.decay=Math.pow(10,-1.2*w),a.ATH.adjust=.01,-(a.ATH.adjustLimit=1)!=e.ATHtype){var R=e.out_samplerate/Pe.BLKSIZE,B=0;for(t=d=0;t=v)for(l=0;le.in_samplerate&&(e.lowpassfreq=e.in_samplerate/2),e.out_samplerate=(t=0|e.lowpassfreq,a=e.in_samplerate,s=44100,48e3<=a?s=48e3:44100<=a?s=44100:32e3<=a?s=32e3:24e3<=a?s=24e3:22050<=a?s=22050:16e3<=a?s=16e3:12e3<=a?s=12e3:11025<=a?s=11025:8e3<=a&&(s=8e3),-1==t?s:(t<=15960&&(s=44100),t<=15250&&(s=32e3),t<=11220&&(s=24e3),t<=9970&&(s=22050),t<=7230&&(s=16e3),t<=5420&&(s=12e3),t<=4510&&(s=11025),t<=3970&&(s=8e3),a=t.lowpass2&&(a=Math.min(a,r)),t.lowpass1t.highpass1?E((t.highpass2-l)/(t.highpass2-t.highpass1+1e-20)):1,o=t.lowpass2>t.lowpass1?E((l-t.lowpass1)/(t.lowpass2-t.lowpass1+1e-20)):1,t.amp_filter[r]=_*o}}(e),n.samplerate_index=P(e.out_samplerate,e),n.samplerate_index<0)return e.internal_flags=null,-1;if(e.VBR==ye.vbr_off){if(e.free_format)n.bitrate_index=0;else if(e.brate=I(e.brate,e.version,e.out_samplerate),n.bitrate_index=H(e.brate,e.version,e.out_samplerate),n.bitrate_index<=0)return e.internal_flags=null,-1}else n.bitrate_index=1;e.analysis&&(e.bWriteVbrTag=!1),null!=n.pinfo&&(e.bWriteVbrTag=!1),R.init_bit_stream_w(n);for(var c,h,u,m=n.samplerate_index+3*e.version+6*(e.out_samplerate<16e3?1:0),p=0;p=f){var M=i-u;if(0==i&&(M=0),(_=O(e,m[0],m[1],n,r,M))<0)return _;for(r+=_,u+=_,h.mf_size-=e.framesize,h.mf_samples_to_encode-=e.framesize,l=0;li&&(s.ResvMax=i),(s.ResvMax<0||e.disable_reservoir)&&(s.ResvMax=0);var _=t.bits*s.mode_gr+Math.min(s.ResvSize,s.ResvMax);return a<_&&(_=a),n.resvDrain_pre=0,null!=s.pinfo&&(s.pinfo.mean_bits=t.bits/2,s.pinfo.resvsize=s.ResvSize),_},this.ResvMaxBits=function(e,t,a,s){var n,r=e.internal_flags,i=r.ResvSize,_=r.ResvMax;0!=s&&(i+=t),0!=(1&r.substep_shaping)&&(_*=.9),a.bits=t,9*_<10*i?(n=i-9*_/10,a.bits+=n,r.substep_shaping|=128):(n=0,r.substep_shaping&=127,e.disable_reservoir||0!=(1&r.substep_shaping)||(a.bits-=.1*t));var o=i<6*r.ResvMax/10?i:6*r.ResvMax/10;return(o-=n)<0&&(o=0),o},this.ResvAdjust=function(e,t){e.ResvSize-=t.part2_3_length+t.part2_length},this.ResvFrameEnd=function(e,t){var a,s=e.l3_side;e.ResvSize+=t*e.mode_gr;var n=0;s.resvDrain_post=0,(s.resvDrain_pre=0)!=(a=e.ResvSize%8)&&(n+=a),0<(a=e.ResvSize-n-e.ResvMax)&&(n+=a);var r=Math.min(8*s.main_data_begin,n)/8;s.resvDrain_pre+=8*r,n-=8*r,e.ResvSize-=8*r,s.main_data_begin-=r,s.resvDrain_post+=n,e.ResvSize-=n}},m=new k,p=new function(){this.setModules=function(e,t,a){}},b=new function(){};n.setModules(r,i,_,o,l,f,c,h,b),i.setModules(r,b,c,f),h.setModules(i,c),_.setModules(n),l.setModules(i,u,o,m),o.setModules(m,u,n.enc.psy),u.setModules(i),m.setModules(o),f.setModules(n,i,c),a.setModules(p,b),p.setModules(c,h,_);var v=n.lame_init();v.num_channels=s,v.in_samplerate=e,v.out_samplerate=e,v.brate=t,v.mode=Ee.STEREO,v.quality=3,v.bWriteVbrTag=!1,v.disable_reservoir=!0,v.write_id3tag_automatic=!1,n.lame_init_params(v);var d=1152,g=0|1.25*d+7200,S=B(g);this.encodeBuffer=function(e,t){1==s&&(t=e),e.length>d&&(d=e.length,S=B(g=0|1.25*d+7200));var a=n.lame_encode_buffer(v,e,t,e.length,S,0,g);return new Int8Array(S.subarray(0,a))},this.flush=function(){var e=n.lame_encode_flush(v,S,0,g);return new Int8Array(S.subarray(0,e))}}}t(),Recorder.lamejs=t}(); \ No newline at end of file diff --git a/public/js/recorder/frequency.histogram.view.js b/public/js/recorder/frequency.histogram.view.js new file mode 100644 index 000000000..e350696cf --- /dev/null +++ b/public/js/recorder/frequency.histogram.view.js @@ -0,0 +1,338 @@ +/* +录音 Recorder扩展,频率直方图显示 +使用本扩展需要引入lib.fft.js支持,直方图特意优化主要显示0-5khz语音部分,其他高频显示区域较小,不适合用来展示音乐频谱 + +https://github.com/xiangyuecn/Recorder + +本扩展核心算法主要参考了Java开源库jmp123 版本0.3 的代码: +https://www.iteye.com/topic/851459 +https://sourceforge.net/projects/jmp123/files/ +*/ +(function(){ +"use strict"; + +var FrequencyHistogramView=function(set){ + return new fn(set); +}; +var fn=function(set){ + var This=this; + var o={ + /* + elem:"css selector" //自动显示到dom,并以此dom大小为显示大小 + //或者配置显示大小,手动把frequencyObj.elem显示到别的地方 + ,width:0 //显示宽度 + ,height:0 //显示高度 + + 以上配置二选一 + */ + + scale:2 //缩放系数,应为正整数,使用2(3? no!)倍宽高进行绘制,避免移动端绘制模糊 + + ,fps:20 //绘制帧率,不可过高 + + ,lineCount:30 //直方图柱子数量,数量的多少对性能影响不大,密集运算集中在FFT算法中 + ,widthRatio:0.6 //柱子线条宽度占比,为所有柱子占用整个视图宽度的比例,剩下的空白区域均匀插入柱子中间;默认值也基本相当于一根柱子占0.6,一根空白占0.4;设为1不留空白,当视图不足容下所有柱子时也不留空白 + ,spaceWidth:0 //柱子间空白固定基础宽度,柱子宽度自适应,当不为0时widthRatio无效,当视图不足容下所有柱子时将不会留空白,允许为负数,让柱子发生重叠 + ,minHeight:0 //柱子保留基础高度,position不为±1时应该保留点高度 + ,position:-1 //绘制位置,取值-1到1,-1为最底下,0为中间,1为最顶上,小数为百分比 + ,mirrorEnable:false //是否启用镜像,如果启用,视图宽度会分成左右两块,右边这块进行绘制,左边这块进行镜像(以中间这根柱子的中心进行镜像) + + ,stripeEnable:true //是否启用柱子顶上的峰值小横条,position不是-1时应当关闭,否则会很丑 + ,stripeHeight:3 //峰值小横条基础高度 + ,stripeMargin:6 //峰值小横条和柱子保持的基础距离 + + ,fallDuration:1000 //柱子从最顶上下降到最底部最长时间ms + ,stripeFallDuration:3500 //峰值小横条从最顶上下降到底部最长时间ms + + //柱子颜色配置:[位置,css颜色,...] 位置: 取值0.0-1.0之间 + ,linear:[0,"rgba(0,187,17,1)",0.5,"rgba(255,215,0,1)",1,"rgba(255,102,0,1)"] + //峰值小横条渐变颜色配置,取值格式和linear一致,留空为柱子的渐变颜色 + ,stripeLinear:null + + ,shadowBlur:0 //柱子阴影基础大小,设为0不显示阴影,如果柱子数量太多时请勿开启,非常影响性能 + ,shadowColor:"#bbb" //柱子阴影颜色 + ,stripeShadowBlur:-1 //峰值小横条阴影基础大小,设为0不显示阴影,-1为柱子的大小,如果柱子数量太多时请勿开启,非常影响性能 + ,stripeShadowColor:"" //峰值小横条阴影颜色,留空为柱子的阴影颜色 + + //当发生绘制时会回调此方法,参数为当前绘制的频率数据和采样率,可实现多个直方图同时绘制,只消耗一个input输入和计算时间 + ,onDraw:function(frequencyData,sampleRate){} + }; + for(var k in set){ + o[k]=set[k]; + }; + This.set=set=o; + + var elem=set.elem; + if(elem){ + if(typeof(elem)=="string"){ + elem=document.querySelector(elem); + }else if(elem.length){ + elem=elem[0]; + }; + }; + if(elem){ + set.width=elem.offsetWidth; + set.height=elem.offsetHeight; + }; + + var scale=set.scale; + var width=set.width*scale; + var height=set.height*scale; + + var thisElem=This.elem=document.createElement("div"); + var lowerCss=["","transform-origin:0 0;","transform:scale("+(1/scale)+");"]; + thisElem.innerHTML='
'; + + var canvas=This.canvas=thisElem.querySelector("canvas"); + var ctx=This.ctx=canvas.getContext("2d"); + canvas.width=width; + canvas.height=height; + + if(elem){ + elem.innerHTML=""; + elem.appendChild(thisElem); + }; + + if(!Recorder.LibFFT){ + throw new Error("需要lib.fft.js支持"); + }; + This.fft=Recorder.LibFFT(1024); + + //柱子所在高度 + This.lastH=[]; + //峰值小横条所在高度 + This.stripesH=[]; +}; +fn.prototype=FrequencyHistogramView.prototype={ + genLinear:function(ctx,colors,from,to){ + var rtv=ctx.createLinearGradient(0,from,0,to); + for(var i=0;iset.stripeFallDuration*1.3){ + //超时没有输入,顶部横条已全部落下,干掉定时器 + clearInterval(This.timer); + This.timer=0; + return; + }; + if(now-drawTime0?originY*(1-posAbs):originY*(1+posAbs)); + }; + + var lastH=This.lastH; + var stripesH=This.stripesH; + var speed=Math.ceil(heightY/(set.fallDuration/(1000/set.fps))); + var stripeSpeed=Math.ceil(heightY/(set.stripeFallDuration/(1000/set.fps))); + var stripeMargin=set.stripeMargin*scale; + + var Y0=1 << (Math.round(Math.log(bufferSize)/Math.log(2) + 3) << 1); + var logY0 = Math.log(Y0)/Math.log(10); + var dBmax=20*Math.log(0x7fff)/Math.log(10); + + var fftSize=bufferSize/2; + var fftSize5k=Math.min(fftSize,Math.floor(fftSize*5000/(sampleRate/2)));//5khz所在位置,8000采样率及以下最高只有4khz + var fftSize5kIsAll=fftSize5k==fftSize; + var line80=fftSize5kIsAll?lineCount:Math.round(lineCount*0.8);//80%的柱子位置 + var fftSizeStep1=fftSize5k/line80; + var fftSizeStep2=fftSize5kIsAll?0:(fftSize-fftSize5k)/(lineCount-line80); + var fftIdx=0; + for(var i=0;i Y0) ? Math.floor((Math.log(maxAmp)/Math.log(10) - logY0) * 17) : 0; + var h=heightY*Math.min(dB/dBmax,1); + + //使柱子匀速下降 + lastH[i]=(lastH[i]||0)-speed; + if(hshi) { + stripesH[i]=h+stripeMargin; + }else{ + //使峰值小横条匀速度下落 + var sh =shi-stripeSpeed; + if(sh < 0){sh = 0;}; + stripesH[i] = sh; + }; + }; + + //开始绘制图形 + ctx.clearRect(0,0,width,height); + + var linear1=This.genLinear(ctx,set.linear,originY,originY-heightY);//上半部分的填充 + var stripeLinear1=set.stripeLinear&&This.genLinear(ctx,set.stripeLinear,originY,originY-heightY)||linear1;//上半部分的峰值小横条填充 + + var linear2=This.genLinear(ctx,set.linear,originY,originY+heightY);//下半部分的填充 + var stripeLinear2=set.stripeLinear&&This.genLinear(ctx,set.stripeLinear,originY,originY+heightY)||linear2;//上半部分的峰值小横条填充 + + //计算柱子间距 + ctx.shadowBlur=set.shadowBlur*scale; + ctx.shadowColor=set.shadowColor; + var mirrorEnable=set.mirrorEnable; + var mirrorCount=mirrorEnable?lineCount*2-1:lineCount;//镜像柱子数量翻一倍-1根 + + var widthRatio=set.widthRatio; + var spaceWidth=set.spaceWidth*scale; + if(spaceWidth!=0){ + widthRatio=(width-spaceWidth*(mirrorCount+1))/width; + }; + + var lineWidth=Math.max(1*scale,Math.floor((width*widthRatio)/mirrorCount));//柱子宽度至少1个单位 + var spaceFloat=(width-mirrorCount*lineWidth)/(mirrorCount+1);//均匀间隔,首尾都留空,可能为负数,柱子将发生重叠 + + //绘制柱子 + var minHeight=set.minHeight*scale; + var mirrorSubX=spaceFloat+lineWidth/2; + var XFloat=mirrorEnable?width/2-mirrorSubX:0;//镜像时,中间柱子位于正中心 + for(var i=0,xFloat=XFloat,x,y,h;iheight){ + y=height-stripeHeight; + }; + ctx.fillStyle=stripeLinear2; + ctx.fillRect(x, y, lineWidth, stripeHeight); + }; + + xFloat+=lineWidth; + }; + }; + + //镜像,从中间直接镜像即可 + if(mirrorEnable){ + var srcW=Math.floor(width/2); + ctx.save(); + ctx.scale(-1,1); + ctx.drawImage(This.canvas,Math.ceil(width/2),0,srcW,height,-srcW,0,srcW,height); + ctx.restore(); + }; + + set.onDraw(frequencyData,sampleRate); + } +}; +Recorder.FrequencyHistogramView=FrequencyHistogramView; + + +})(); \ No newline at end of file diff --git a/public/js/recorder/lib.fft.js b/public/js/recorder/lib.fft.js new file mode 100644 index 000000000..5f76c77b5 --- /dev/null +++ b/public/js/recorder/lib.fft.js @@ -0,0 +1,111 @@ +/* +时域转频域,快速傅里叶变换(FFT) +https://github.com/xiangyuecn/Recorder + +var fft=Recorder.LibFFT(bufferSize) + bufferSize取值2的n次方 + +fft.bufferSize 实际采用的bufferSize +fft.transform(inBuffer) + inBuffer:[Int16,...] 数组长度必须是bufferSize + 返回[Float64(Long),...],长度为bufferSize/2 +*/ + +/* +从FFT.java 移植,Java开源库:jmp123 版本0.3 +https://www.iteye.com/topic/851459 +https://sourceforge.net/projects/jmp123/files/ +*/ +Recorder.LibFFT=function(bufferSize){ + "use strict"; + + var FFT_N_LOG,FFT_N,MINY; + var real, imag, sintable, costable; + var bitReverse; + + var FFT_Fn=function(bufferSize) {//bufferSize只能取值2的n次方 + FFT_N_LOG=Math.round(Math.log(bufferSize)/Math.log(2)); + FFT_N = 1 << FFT_N_LOG; + MINY = ((FFT_N << 2) * Math.sqrt(2)); + + real = []; + imag = []; + sintable = [0]; + costable = [0]; + bitReverse = []; + + var i, j, k, reve; + for (i = 0; i < FFT_N; i++) { + k = i; + for (j = 0, reve = 0; j != FFT_N_LOG; j++) { + reve <<= 1; + reve |= (k & 1); + k >>>= 1; + } + bitReverse[i] = reve; + } + + var theta, dt = 2 * Math.PI / FFT_N; + for (i = (FFT_N >> 1) - 1; i > 0; i--) { + theta = i * dt; + costable[i] = Math.cos(theta); + sintable[i] = Math.sin(theta); + } + } + + /* + 用于频谱显示的快速傅里叶变换 + inBuffer 输入FFT_N个实数,返回 FFT_N/2个输出值(复数模的平方)。 + */ + var getModulus=function(inBuffer) { + var i, j, k, ir, j0 = 1, idx = FFT_N_LOG - 1; + var cosv, sinv, tmpr, tmpi; + for (i = 0; i != FFT_N; i++) { + real[i] = inBuffer[bitReverse[i]]; + imag[i] = 0; + } + + for (i = FFT_N_LOG; i != 0; i--) { + for (j = 0; j != j0; j++) { + cosv = costable[j << idx]; + sinv = sintable[j << idx]; + for (k = j; k < FFT_N; k += j0 << 1) { + ir = k + j0; + tmpr = cosv * real[ir] - sinv * imag[ir]; + tmpi = cosv * imag[ir] + sinv * real[ir]; + real[ir] = real[k] - tmpr; + imag[ir] = imag[k] - tmpi; + real[k] += tmpr; + imag[k] += tmpi; + } + } + j0 <<= 1; + idx--; + } + + j = FFT_N >> 1; + var outBuffer=new Float64Array(j); + /* + * 输出模的平方: + * for(i = 1; i <= j; i++) + * inBuffer[i-1] = real[i] * real[i] + imag[i] * imag[i]; + * + * 如果FFT只用于频谱显示,可以"淘汰"幅值较小的而减少浮点乘法运算. MINY的值 + * 和Spectrum.Y0,Spectrum.logY0对应. + */ + sinv = MINY; + cosv = -MINY; + for (i = j; i != 0; i--) { + tmpr = real[i]; + tmpi = imag[i]; + if (tmpr > cosv && tmpr < sinv && tmpi > cosv && tmpi < sinv) + outBuffer[i - 1] = 0; + else + outBuffer[i - 1] = Math.round(tmpr * tmpr + tmpi * tmpi); + } + return outBuffer; + } + + FFT_Fn(bufferSize); + return {transform:getModulus,bufferSize:FFT_N}; +}; diff --git a/public/js/recorder/recorder.mp3.min.js b/public/js/recorder/recorder.mp3.min.js new file mode 100644 index 000000000..0f810a1fa --- /dev/null +++ b/public/js/recorder/recorder.mp3.min.js @@ -0,0 +1,6 @@ +/* +录音 +https://github.com/xiangyuecn/Recorder +src: recorder-core.js,engine/mp3.js,engine/mp3-engine.js +*/ +!function(S){"use strict";var p=function(){},O=function(e){return new t(e)};O.LM="2022-05-04 20:10";var M="Recorder";O.IsOpen=function(){var e=O.Stream;if(e){var t=e.getTracks&&e.getTracks()||e.audioTracks||[],a=t[0];if(a){var s=a.readyState;return"live"==s||s==a.LIVE}}return!1},O.BufferSize=4096,O.Destroy=function(){for(var e in B(M+" Destroy"),v(),a)a[e]()};var a={};O.BindDestroy=function(e,t){a[e]=t},O.Support=function(){var e=S.AudioContext;if(e||(e=S.webkitAudioContext),!e)return!1;var t=navigator.mediaDevices||{};return t.getUserMedia||(t=navigator).getUserMedia||(t.getUserMedia=t.webkitGetUserMedia||t.mozGetUserMedia||t.msGetUserMedia),!!t.getUserMedia&&(O.Scope=t,O.Ctx&&"closed"!=O.Ctx.state||(O.Ctx=new e,O.BindDestroy("Ctx",function(){var e=O.Ctx;e&&e.close&&(e.close(),O.Ctx=0)})),!0)};var w="ConnectEnableWorklet";O[w]=!1;var b=function(e){var t=(e=e||O).BufferSize||O.BufferSize,s=O.Ctx,a=e.Stream,n=a._m=s.createMediaStreamSource(a),f=a._call,r=function(e,t){if(!t||m)for(var a in f){for(var s=t||e.inputBuffer.getChannelData(0),n=s.length,r=new Int16Array(n),i=0,_=0;_"+l,3);for(var f=0,c=r;c"+p.length+" 花:"+(Date.now()-s)+"ms"),setTimeout(function(){s=Date.now(),n[r.type](p,function(e){o(e,u)},function(e){_(e)})})}else _("未加载"+r.type+"编码器");else _("音频buffers被释放");else _("未采集到录音")}},S[M]&&(B("重复引入"+M,3),S[M].Destroy()),(S[M]=O).TrafficImgUrl="//ia.51.la/go1?id=20469973&pvFlag=1";var r=O.Traffic=function(e){e=e?"/"+M+"/Report/"+e:"";var t=O.TrafficImgUrl;if(t){var a=O.Traffic,s=/^(https?:..[^\/#]*\/?)[^#]*/i.exec(location.href)||[],n=s[1]||"http://file/",r=(s[0]||n)+e;if(0==t.indexOf("//")&&(t=/^https:/i.test(r)?"https:"+t:"http:"+t),e&&(t=t+"&cu="+encodeURIComponent(n+e)),!a[r]){a[r]=1;var i=new Image;i.src=t,B("Traffic Analysis Image: "+(e||M+".TrafficImgUrl="+O.TrafficImgUrl))}}}}(window),"function"==typeof define&&define.amd&&define(function(){return Recorder}),"object"==typeof module&&module.exports&&(module.exports=Recorder),function(){"use strict";var i;Recorder.prototype.enc_mp3={stable:!0,testmsg:"采样率范围48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000"},Recorder.prototype.mp3=function(a,s,e){var n=this.set,r=a.length,t=this.mp3_start(n);if(t)return this.mp3_encode(t,a),void this.mp3_complete(t,s,e,1);var i=new Recorder.lamejs.Mp3Encoder(1,n.sampleRate,n.bitRate),_=[],o=0,l=0,f=function(){if(o=c.byteLength?(_-=c.byteLength,l.push(c),e.splice(f,1),f--):(e[f]=c.slice(_),o=c,_=0)}if(!this.rm(e,t)){o&&(e[0]=o);for(f=0;f "+s.duration+"ms",2>=1;0!=e--;)n[r++]=i>a[s++]?0:1,n[r++]=i>a[s++]?0:1}function R(e,t,a,s,n,r){var i=(e>>=1)%2;for(e>>=1;0!=e--;){var _,o,l,f,c,h,u,m;_=a[s++]*t,o=a[s++]*t,c=0|_,l=a[s++]*t,h=0|o,f=a[s++]*t,u=0|l,_+=M.adj43[c],m=0|f,o+=M.adj43[h],n[r++]=0|_,l+=M.adj43[u],n[r++]=0|o,f+=M.adj43[m],n[r++]=0|l,n[r++]=0|f}0!=i&&(c=0|(_=a[s++]*t),h=0|(o=a[s++]*t),_+=M.adj43[c],o+=M.adj43[h],n[r++]=0|_,n[r++]=0|o)}var _=[1,2,5,7,7,10,10,13,13,13,13,13,13,13,13];function d(e,t,a,s){var n=function(e,t,a){var s=0,n=0;do{var r=e[t++],i=e[t++];s>=16)&&(_=r,s++),n.bits+=_,s}(e,t,a,_[n-1],s);case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:return function(e,t,a,s,n){var r=0,i=0,_=0,o=j.ht[s].xlen,l=j.ht[s].hlen,f=j.ht[s+1].hlen,c=j.ht[s+2].hlen;do{var h=e[t+0]*o+e[t+1];t+=2,r+=l[h],i+=f[h],_+=c[h]}while(t=n);r++);for(i=r-8;i<24&&!(j.ht[i].linmax>=n);i++);return function(e,t,a,s,n,r){var i,_=65536*j.ht[s].xlen+j.ht[n].xlen,o=0;do{var l=e[t++],f=e[t++];0!=l&&(14>=16)&&(o=i,s=n),r.bits+=o,s}(e,t,a,i,r,s)}}function u(e,t,a,s,n,r,i,_){for(var o=t.big_values,l=2;l>1<<1);for(null!=a&&(a.sfb_count1=0);1t.big_values&&(r=t.big_values),i=t.big_values;else if(t.block_type==Pe.NORM_TYPE){if(r=t.region0_count=e.bv_scf[n-2],i=t.region1_count=e.bv_scf[n-1],i=e.scalefac_band.l[r+i+2],r=e.scalefac_band.l[r+1],ir)return y.LARGE_BITS;if(function(e,t,a,s,n){var r,i,_,o=0,l=0,f=0,c=0,h=t,u=0,m=h,p=0,b=e,v=0;for(_=null!=n&&s.global_gain==n.global_gain,i=s.block_type==Pe.SHORT_TYPE?38:21,r=0;r<=i;r++){var d=-1;if((_||s.block_type==Pe.NORM_TYPE)&&(d=s.global_gain-(s.scalefac[r]+(0!=s.preflag?M.pretab[r]:0)<s.max_nonzero_coeff&&(g=s.max_nonzero_coeff-o+1,Te.fill(t,s.max_nonzero_coeff,576,0),(S=g)<0&&(S=0),r=i+1),0==l&&0==f&&(m=h,p=u,b=e,v=c),null!=n&&0=n.sfb_count1&&0=n.step[r]?(0!=l&&(R(l,a,b,v,m,p),l=0,m=h,p=u,b=e,v=c),f+=S):(0!=f&&(w(f,a,b,v,m,p),f=0,m=h,p=u,b=e,v=c),l+=S),S<=0){0!=f&&(w(f,a,b,v,m,p),f=0),0!=l&&(R(l,a,b,v,m,p),l=0);break}}r<=i&&(u+=s.width[r],c+=s.width[r],o+=s.width[r])}0!=l&&(R(l,a,b,v,m,p),l=0),0!=f&&(w(f,a,b,v,m,p),f=0)}(t,n,M.IPOW20(a.global_gain),a,s),0!=(2&e.substep_shaping))for(var i=0,_=a.global_gain+a.scalefac_scale,o=.634521682242439/M.IPOW20(_),l=0;l=o?n[f]:0}return this.noquant_count_bits(e,a,s)},this.best_huffman_divide=function(e,t){var a=new x,s=t.l3_enc,n=Be(23),r=Be(23),i=Be(23),_=Be(23);if(t.block_type!=Pe.SHORT_TYPE||1!=e.mode_gr){a.assign(t),t.block_type==Pe.NORM_TYPE&&(!function(e,t,a,s,n,r,i){for(var _=t.big_values,o=0;o<=22;o++)s[o]=y.LARGE_BITS;for(o=0;o<16;o++){var l=e.scalefac_band.l[o+1];if(_<=l)break;var f=0,c=new v(f),h=d(a,0,l,c);f=c.bits;for(var u=0;u<8;u++){var m=e.scalefac_band.l[o+u+2];if(_<=m)break;var p=f,b=d(a,l,m,c=new v(p));p=c.bits,s[o+u]>p&&(s[o+u]=p,r[(n[o+u]=o)+u]=h,i[o+u]=b)}}}(e,t,s,n,r,i,_),u(e,a,t,s,n,r,i,_));var o=a.big_values;if(!(0==o||1<(s[o-2]|s[o-1])||576<(o=t.count1+2))){a.assign(t),a.count1=o;for(var l=0,f=0;o>a.big_values;o-=4){var c=2*(2*(2*s[o-4]+s[o-3])+s[o-2])+s[o-1];l+=j.t32l[c],f+=j.t33l[c]}if(a.big_values=o,a.count1table_select=0,fa.part2_3_length&&t.assign(a)}}}};var h=[1,1,1,1,8,2,2,2,4,4,4,8,8,8,16,16],m=[1,2,4,8,1,2,4,8,2,4,8,2,4,8,4,8],p=[0,0,0,0,3,1,1,1,2,2,2,3,3,3,4,4],b=[0,1,2,3,0,1,2,3,1,2,3,1,2,3,2,3];k.slen1_tab=p,k.slen2_tab=b,this.best_scalefac_store=function(e,t,a,s){var n,r,i,_,o=s.tt[t][a],l=0;for(n=i=0;n>=1);o.scalefac_scale=l=1}}if(0==o.preflag&&o.block_type!=Pe.SHORT_TYPE&&2==e.mode_gr){for(n=11;nf&&(s.part2_length=f,s.scalefac_compress=r)}}(a,s),l=0),n=0;ns[t]&&(e.part2_length=s[t],e.scalefac_compress=t);return e.part2_length==y.LARGE_BITS};var g=[[15,15,7,7],[15,15,7,0],[7,3,0,0],[15,31,31,0],[7,7,7,0],[3,3,0,0]];this.scale_bitcount_lsf=function(e,t){var a,s,n,r,i,_,o,l,f=Be(4),c=t.scalefac;for(a=0!=t.preflag?2:0,o=0;o<4;o++)f[o]=0;if(t.block_type==Pe.SHORT_TYPE){s=1;var h=M.nr_of_sfb_block[a][s];for(n=l=0;n<4;n++)for(r=h[n]/3,o=0;of[n]&&(f[n]=c[3*l+i])}else{s=0;h=M.nr_of_sfb_block[a][s];for(n=l=0;n<4;n++)for(r=h[n],o=0;of[n]&&(f[n]=c[l])}for(_=!1,n=0;n<4;n++)f[n]>g[a][n]&&(_=!0);if(!_){var u,m,p,b;for(t.sfb_partition_table=M.nr_of_sfb_block[a][s],n=0;n<4;n++)t.slen[n]=S[f[n]];switch(u=t.slen[0],m=t.slen[1],p=t.slen[2],b=t.slen[3],a){case 0:t.scalefac_compress=(5*u+m<<4)+(p<<2)+b;break;case 1:t.scalefac_compress=400+(5*u+m<<2)+p;break;case 2:t.scalefac_compress=500+3*u+m;break;default:$.err.printf("intensity stereo not implemented yet\n")}}if(!_)for(n=t.part2_length=0;n<4;n++)t.part2_length+=t.slen[n]*t.sfb_partition_table[n];return _};var S=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4];this.huffman_init=function(e){for(var t=2;t<=576;t+=2){for(var a,s=0;e.scalefac_band.l[++s]t;)a--;for(a<0&&(a=n[s][0]),e.bv_scf[t-2]=a,a=n[s][1];e.scalefac_band.l[a+e.bv_scf[t-2]+2]>t;)a--;a<0&&(a=n[s][1]),e.bv_scf[t-1]=a}}}function X(){}function M(){this.setModules=function(e,t,a){e,t,a};var _=[0,49345,49537,320,49921,960,640,49729,50689,1728,1920,51009,1280,50625,50305,1088,52225,3264,3456,52545,3840,53185,52865,3648,2560,51905,52097,2880,51457,2496,2176,51265,55297,6336,6528,55617,6912,56257,55937,6720,7680,57025,57217,8e3,56577,7616,7296,56385,5120,54465,54657,5440,55041,6080,5760,54849,53761,4800,4992,54081,4352,53697,53377,4160,61441,12480,12672,61761,13056,62401,62081,12864,13824,63169,63361,14144,62721,13760,13440,62529,15360,64705,64897,15680,65281,16320,16e3,65089,64001,15040,15232,64321,14592,63937,63617,14400,10240,59585,59777,10560,60161,11200,10880,59969,60929,11968,12160,61249,11520,60865,60545,11328,58369,9408,9600,58689,9984,59329,59009,9792,8704,58049,58241,9024,57601,8640,8320,57409,40961,24768,24960,41281,25344,41921,41601,25152,26112,42689,42881,26432,42241,26048,25728,42049,27648,44225,44417,27968,44801,28608,28288,44609,43521,27328,27520,43841,26880,43457,43137,26688,30720,47297,47489,31040,47873,31680,31360,47681,48641,32448,32640,48961,32e3,48577,48257,31808,46081,29888,30080,46401,30464,47041,46721,30272,29184,45761,45953,29504,45313,29120,28800,45121,20480,37057,37249,20800,37633,21440,21120,37441,38401,22208,22400,38721,21760,38337,38017,21568,39937,23744,23936,40257,24320,40897,40577,24128,23040,39617,39809,23360,39169,22976,22656,38977,34817,18624,18816,35137,19200,35777,35457,19008,19968,36545,36737,20288,36097,19904,19584,35905,17408,33985,34177,17728,34561,18368,18048,34369,33281,17088,17280,33601,16640,33217,32897,16448];this.updateMusicCRC=function(e,t,a,s){for(var n=0;n>8^_[255&(i^r)]);var r,i}}function q(){var o=this,s=32773,c=null,h=null,r=null,u=null;this.setModules=function(e,t,a,s){c=e,h=t,r=a,u=s};var m=null,l=0,p=0,b=0;function v(e,t,a){for(;0>a<>a<>3]|=t>>a<<8-(7&s)-n,s+=n}e.header[e.h_ptr].ptr=s}function n(e,t){e<<=8;for(var a=0;a<8;a++)0!=(65536&((t<<=1)^(e<<=1)))&&(t^=s);return t}function d(e,t){var a,s=j.ht[t.count1table_select+32],n=0,r=t.big_values,i=t.big_values;for(a=(t.count1-t.big_values)/4;0t.big_values&&(a=t.big_values);var s=g(e,t.table_select[0],0,a,t);return s+=g(e,t.table_select[1],a,t.big_values,t)}function M(e,t){var a,s,n,r;a=t.big_values;var i=t.region0_count+1;return n=e.scalefac_band.l[i],i+=t.region1_count+1,a>8),t[5]=byte(255&a)},this.flush_bitstream=function(e){var t,a,s=e.internal_flags,n=s.h_ptr-1;if(-1==n&&(n=Z.MAX_HEADER_BUF-1),t=s.l3_side,!((a=R(e,new w))<0)){if(_(e,a),s.ResvSize=0,t.main_data_begin=0,s.findReplayGain){var r=c.GetTitleGain(s.rgdata);s.RadioGain=0|Math.floor(10*r+.5)}s.findPeakSample&&(s.noclipGainChange=0|Math.ceil(20*A(s.PeakSample/32767)*10),0 ResvSize"),8*t.main_data_begin!=a.ResvSize&&($.err.printf("bit reservoir error: \nl3_side.main_data_begin: %d \nResvoir size: %d \nresv drain (post) %d \nresv drain (pre) %d \nheader and sideinfo: %d \ndata bits: %d \ntotal bits: %d (remainder: %d) \nbitsperframe: %d \n",8*t.main_data_begin,a.ResvSize,t.resvDrain_post,t.resvDrain_pre,8*a.sideinfo_len,n-t.resvDrain_post-8*a.sideinfo_len,n,n%8,s),$.err.println("This is a fatal error. It has several possible causes:"),$.err.println("90%% LAME compiled with buggy version of gcc using advanced optimizations"),$.err.println(" 9%% Your system is overclocked"),$.err.println(" 1%% bug in LAME encoding library"),a.ResvSize=8*t.main_data_begin),1e9e.PeakSample?e.PeakSample=o[0][_]:-o[0][_]>e.PeakSample&&(e.PeakSample=-o[0][_]);if(1e.PeakSample?e.PeakSample=o[1][_]:-o[1][_]>e.PeakSample&&(e.PeakSample=-o[1][_])}if(e.findReplayGain&&c.AnalyzeSamples(e.rgdata,o[0],0,o[1],0,f,e.channels_out)==X.GAIN_ANALYSIS_ERROR)return-6}}return r},this.init_bit_stream_w=function(e){m=B(U.LAME_MAXMP3BUFFER),e.h_ptr=e.w_ptr=0,e.header[e.h_ptr].write_timing=0,p=-1,l=b=0}}function e(e,t,a,s){this.xlen=e,this.linmax=t,this.table=a,this.hlen=s}Ee.STEREO=new Ee(0),Ee.JOINT_STEREO=new Ee(1),Ee.DUAL_CHANNEL=new Ee(2),Ee.MONO=new Ee(3),Ee.NOT_SET=new Ee(4),X.STEPS_per_dB=100,X.MAX_dB=120,X.GAIN_NOT_ENOUGH_SAMPLES=-24601,X.GAIN_ANALYSIS_ERROR=0,X.GAIN_ANALYSIS_OK=1,X.INIT_GAIN_ANALYSIS_ERROR=0,X.INIT_GAIN_ANALYSIS_OK=1,X.MAX_ORDER=X.YULE_ORDER=10,X.MAX_SAMPLES_PER_WINDOW=(X.MAX_SAMP_FREQ=48e3)*(X.RMS_WINDOW_TIME_NUMERATOR=1)/(X.RMS_WINDOW_TIME_DENOMINATOR=20)+1,M.NUMTOCENTRIES=100,M.MAXFRAMESIZE=2880,q.EQ=function(e,t){return Math.abs(e)>Math.abs(t)?Math.abs(e-t)<=1e-6*Math.abs(e):Math.abs(e-t)<=1e-6*Math.abs(t)},q.NEQ=function(e,t){return!q.EQ(e,t)};var j={};function F(e){this.bits=e}function T(){this.over_noise=0,this.tot_noise=0,this.max_noise=0,this.over_count=0,this.over_SSD=0,this.bits=0}function r(e,t,a,s){this.l=Be(1+Pe.SBMAX_l),this.s=Be(1+Pe.SBMAX_s),this.psfb21=Be(1+Pe.PSFB21),this.psfb12=Be(1+Pe.PSFB12);var n=this.l,r=this.s;4==arguments.length&&(this.arrL=e,this.arrS=t,this.arr21=a,this.arr12=s,$.arraycopy(this.arrL,0,n,0,Math.min(this.arrL.length,this.l.length)),$.arraycopy(this.arrS,0,r,0,Math.min(this.arrS.length,this.s.length)),$.arraycopy(this.arr21,0,this.psfb21,0,Math.min(this.arr21.length,this.psfb21.length)),$.arraycopy(this.arr12,0,this.psfb12,0,Math.min(this.arr12.length,this.psfb12.length)))}function y(){var l=null,m=null,s=null;this.setModules=function(e,t,a){l=e,m=t,s=a},this.IPOW20=function(e){return u[e]};var x=2.220446049250313e-16,f=y.IXMAX_VAL+2,c=y.Q_MAX,h=y.Q_MAX2,n=100;this.nr_of_sfb_block=[[[6,5,5,5],[9,9,9,9],[6,9,9,9]],[[6,5,7,3],[9,9,12,6],[6,9,12,6]],[[11,10,0,0],[18,18,0,0],[15,18,0,0]],[[7,7,7,0],[12,12,12,0],[6,15,12,0]],[[6,6,6,3],[12,9,9,6],[6,12,9,6]],[[8,8,5,0],[15,12,9,0],[6,18,9,0]]];var w=[0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0];this.pretab=w,this.sfBandIndex=[new r([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0,4,8,12,18,24,32,42,56,74,100,132,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new r([0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,332,394,464,540,576],[0,4,8,12,18,26,36,48,62,80,104,136,180,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new r([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0,4,8,12,18,26,36,48,62,80,104,134,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new r([0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162,196,238,288,342,418,576],[0,4,8,12,16,22,30,40,52,66,84,106,136,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new r([0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576],[0,4,8,12,16,22,28,38,50,64,80,100,126,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new r([0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576],[0,4,8,12,16,22,30,42,58,78,104,138,180,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new r([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0,4,8,12,18,26,36,48,62,80,104,134,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new r([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0,4,8,12,18,26,36,48,62,80,104,134,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new r([0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576],[0,8,16,24,36,52,72,96,124,160,162,164,166,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0])];var R=Ae(c+h+1),u=Ae(c),p=Ae(f),b=Ae(f);function v(e,t){var a=s.ATHformula(t,e);return a-=n,a=Math.pow(10,a/10+e.ATHlower)}function B(e){this.s=e}this.adj43=b,this.iteration_init=function(e){var t,a=e.internal_flags,s=a.l3_side;if(0==a.iteration_init_init){for(a.iteration_init_init=1,s.main_data_begin=0,function(e){for(var t=e.internal_flags.ATH.l,a=e.internal_flags.ATH.psfb21,s=e.internal_flags.ATH.s,n=e.internal_flags.ATH.psfb12,r=e.internal_flags,i=e.out_samplerate,_=0;_>2&63)&&(t-=64),n=Math.pow(10,t/4/10),32<=(t=e.exp_nspsytune>>8&63)&&(t-=64),r=Math.pow(10,t/4/10),32<=(t=e.exp_nspsytune>>14&63)&&(t-=64),i=Math.pow(10,t/4/10),32<=(t=e.exp_nspsytune>>20&63)&&(t-=64),_=i*Math.pow(10,t/4/10),t=0;t3*s/4&&(f[_]=3*s/4),f[_]<0&&(f[_]=0),f[_]+a[_]>Z.MAX_BITS_PER_CHANNEL&&(f[_]=Math.max(0,Z.MAX_BITS_PER_CHANNEL-a[_])),i+=f[_];if(hZ.MAX_BITS_PER_CHANNEL-e[0]&&(r=Z.MAX_BITS_PER_CHANNEL-e[0]),r<0&&(r=0),125<=e[1]&&(125>1,B=0;do{B+=k=f[_]*f[_],M+=k>1;S=d/b,M=x;do{var k,T;B+=k=f[_]*f[_],M+=ks[r-3+1]&&(s[r-3+1]+=(s[r-3]-s[r-3+1])*i.decay),s[r-3+1]>s[r-3+2]&&(s[r-3+2]+=(s[r-3+1]-s[r-3+2])*i.decay))}return o},this.calc_noise_core=function(e,t,a,s){var n=0,r=t.s,i=e.l3_enc;if(r>e.count1)for(;0!=a--;){o=e.xr[r],r++,n+=o*o,o=e.xr[r],r++,n+=o*o}else if(r>e.big_values){var _=Ae(2);for(_[0]=0,_[1]=s;0!=a--;){o=Math.abs(e.xr[r])-_[i[r]],r++,n+=o*o,o=Math.abs(e.xr[r])-_[i[r]],r++,n+=o*o}}else for(;0!=a--;){var o;o=Math.abs(e.xr[r])-p[i[r]]*s,r++,n+=o*o,o=Math.abs(e.xr[r])-p[i[r]]*s,r++,n+=o*o}return t.s=r,n},this.calc_noise=function(e,t,a,s,n){var r,i,_=0,o=0,l=0,f=0,c=0,h=-20,u=0,m=e.scalefac,p=0;for(r=s.over_SSD=0;r>1,u+e.width[r]>e.max_nonzero_coeff)i=0<(g=e.max_nonzero_coeff-u+1)?g>>1:0;var M=new B(u);d=this.calc_noise_core(e,M,i,S),u=M.s,null!=n&&(n.step[r]=v,n.noise[r]=d),d=a[_++]=d/t[o++],d=ee.FAST_LOG10(Math.max(d,1e-20)),null!=n&&(n.noise_log[r]=d)}if(null!=n&&(n.global_gain=e.global_gain),c+=d,0a.max_noise-.2&&a.tot_noisea.max_noise-.2&&a.tot_noisea.max_noise-.1&&a.tot_noise+a.over_noisea.max_noise-.15&&a.tot_noise+a.over_noise+a.over_noiset.xrpow_max&&(t.xrpow_max=s[f+c]);if(2==i.noise_shaping_amp)return}}}(e,t,a,s,n);var i=_(t);return!i&&(!(i=2==r.mode_gr?w.scale_bitcount(t):w.scale_bitcount_lsf(r,t))||(1e.xrpow_max&&(e.xrpow_max=t[a+i])}e.scalefac[s]=r>>1}e.preflag=0,e.scalefac_scale=1}(t,s),i=!1):t.block_type==Pe.SHORT_TYPE&&0>t.scalefac_scale))n[s]=f,o+=3*l;else{n[s]=0;var c=210+(f<t.xrpow_max&&(t.xrpow_max=a[o+h]);o+=l*(3-r-1)}}var u=M.IPOW20(202);for(o+=t.width[s]*(r+1),h=-t.width[s];h<0;h++)a[o+h]*=u,a[o+h]>t.xrpow_max&&(t.xrpow_max=a[o+h])}}return!1}(r,t,s)||_(t))),i||(i=2==r.mode_gr?w.scale_bitcount(t):w.scale_bitcount_lsf(r,t)),!i))}this.setModules=function(e,t,a,s){v=e,g=t,this.rv=t,M=a,this.qupvt=a,w=s,n.setModules(M,w)},this.ms_convert=function(e,t){for(var a=0;a<576;++a){var s=e.tt[t][0].xr[a],n=e.tt[t][1].xr[a];e.tt[t][0].xr[a]=(s+n)*(.5*ee.SQRT2),e.tt[t][1].xr[a]=(s-n)*(.5*ee.SQRT2)}},this.init_xrpow=function(e,t,a){var s=0,n=0|t.max_nonzero_coeff;if(t.xrpow_max=0,Te.fill(a,n,576,0),1e-20<(s=function(e,t,a,s){for(var n=s=0;n<=a;++n){var r=Math.abs(e.xr[n]);s+=r,t[n]=Math.sqrt(r*Math.sqrt(r)),t[n]>e.xrpow_max&&(e.xrpow_max=t[n])}return s}(t,a,n,s))){var r=0;0!=(2&e.substep_shaping)&&(r=1);for(var i=0;iS&&_.global_gain<=g;)_.global_gain++;if(_.global_gain>g)break;if(0==f.over_count){for(;(_.part2_3_length=w.count_bits(i,s,_,c))>h&&_.global_gain<=g;)_.global_gain++;if(_.global_gain>g)break}if(M.calc_noise(_,a,l,d,c),d.bits=_.part2_3_length,0!=(B(t.block_type!=Pe.SHORT_TYPE?e.quant_comp:e.quant_comp_short,f,d,_,l)?1:0))h=t.part2_3_length,f=d,t.assign(_),b=0,$.arraycopy(s,0,o,0,576);else if(0==i.full_outer_loop){if(++b>v&&0==f.over_count)break;if(3==i.noise_shaping_amp&&m&&30r[f.VBR_max_bitrate]&&(_[p][v]*=r[f.VBR_max_bitrate],_[p][v]/=u),i[p][v]>_[p][v]&&(i[p][v]=_[p][v]);return h},this.bitpressure_strategy=function(e,t,a,s){for(var n=0;nZ.MAX_BITS_PER_CHANNEL&&(s[_][o]=Z.MAX_BITS_PER_CHANNEL),m+=s[_][o]}if(Z.MAX_BITS_PER_GRANULEZ.MAX_BITS_PER_CHANNEL&&(s[_][o]=Z.MAX_BITS_PER_CHANNEL),l+=s[_][o];if(l>r[0])for(_=0;_=s?(e.ATH.adjust*=.075*s+.925,e.ATH.adjust=s?e.ATH.adjust=s:e.ATH.adjust>1,u=(h=(c=s)<<1)+c,s=h<<1,r=(n=t)+m;M=e[n+0]-e[n+c],S=e[n+0]+e[n+c],A=e[n+h]-e[n+u],R=e[n+h]+e[n+u],e[n+h]=S-R,e[n+0]=S+R,e[n+u]=M-A,e[n+c]=M+A,M=e[r+0]-e[r+c],S=e[r+0]+e[r+c],A=ee.SQRT2*e[r+u],R=ee.SQRT2*e[r+h],e[r+h]=S-R,e[r+0]=S+R,e[r+u]=M-A,e[r+c]=M+A,r+=s,(n+=s)<_;);for(l=T[i+0],o=T[i+1],f=1;fO[u+3-2]?Q/=O[u+3-2]:Q=O[u+3-2]>10*Q?O[u+3-2]/(10*Q):0,C[u+3]=Q}if(e.analysis){var W=C[0];for(u=1;u<12;u++)WV&&(q[u/3]=u%3+1);for(u=1;u<4;u++){(N[u-1]>N[u]?N[u-1]/N[u]:N[u]/N[u-1])<1.7&&(q[u]=0,1==u&&(q[0]=0))}for(0!=q[0]&&0!=S.nsPsy.lastAttacks[c]&&(q[0]=0),3!=S.nsPsy.lastAttacks[c]&&q[0]+q[1]+q[2]+q[3]==0||((D=0)!=q[1]&&0!=q[0]&&(q[1]=0),0!=q[2]&&0!=q[1]&&(q[2]=0),0!=q[3]&&0!=q[2]&&(q[3]=0)),c<2?T[c]=D:0==D&&(T[0]=T[1]=0),o[c]=S.tot_ener[c],he(e,j,F,M,1&c,w,1&c,s,c,t,a),Me(S,j,R,Y,X),we(S,Y,X,y),v=0;v<3;v++){var J,$;for(ve(e,F,B,A,c,v),pe(S,B,A,c,v),b=0;b1.58*e.thm[1].l[t]||e.thm[1].l[t]>1.58*e.thm[0].l[t])){var a=e.mld_l[t]*e.en[3].l[t],s=Math.max(e.thm[2].l[t],Math.min(e.thm[3].l[t],a));a=e.mld_l[t]*e.en[2].l[t];var n=Math.max(e.thm[3].l[t],Math.min(e.thm[2].l[t],a));e.thm[2].l[t]=s,e.thm[3].l[t]=n}for(t=0;t1.58*e.thm[1].s[t][r]||e.thm[1].s[t][r]>1.58*e.thm[0].s[t][r]||(a=e.mld_s[t]*e.en[3].s[t][r],s=Math.max(e.thm[2].s[t][r],Math.min(e.thm[3].s[t][r],a)),a=e.mld_s[t]*e.en[2].s[t][r],n=Math.max(e.thm[3].s[t][r],Math.min(e.thm[2].s[t][r],a)),e.thm[2].s[t][r]=s,e.thm[3].s[t][r]=n)}(S),g=e.msfix,0g&&(s[o]=g),1a[o]&&(s[o]=a[o]),l.masking_lower<1&&(s[o]*=l.masking_lower)}for(;of&&(s[r]=f),1a[r]&&(s[r]=a[r]),e.masking_lower<1&&(s[r]*=e.masking_lower)}for(;rM[b+3-2]?E/=M[b+3-2]:E=M[b+3-2]>10*E?M[b+3-2]/(10*E):0,S[b+3]=E}for(b=0;b<3;++b){var P=M[3*b+3]+M[3*b+4]+M[3*b+5],I=1;6*M[3*b+5]A&&(o[m][b/3]=b%3+1);for(b=1;b<4;b++){var L=w[b-1],V=w[b];Math.max(L,V)<4e4&&L<1.7*V&&V<1.7*L&&(1==b&&o[m][0]<=o[m][b]&&(o[m][0]=0),o[m][b]=0)}o[m][0]<=c.nsPsy.lastAttacks[m]&&(o[m][0]=0),3!=c.nsPsy.lastAttacks[m]&&o[m][0]+o[m][1]+o[m][2]+o[m][3]==0||((k=0)!=o[m][1]&&0!=o[m][0]&&(o[m][1]=0),0!=o[m][2]&&0!=o[m][1]&&(o[m][2]=0),0!=o[m][3]&&0!=o[m][2]&&(o[m][3]=0)),m<2?l[m]=k:0==k&&(l[0]=l[1]=0),i[m]=c.tot_ener[m]}}(e,t,a,s,n,r,o,w,R,B),function(e,t){var a=e.internal_flags;e.short_blocks!=xe.short_block_coupled||0!=t[0]&&0!=t[1]||(t[0]=t[1]=0);for(var s=0;s=n&&(p=i*(l[t]-n)/(24-n)+r*(24-l[t])/(24-n)),c[t]=Math.pow(10,p/10),0=n&&(p=o*(l[t]-n)/(24-n)+_*(24-l[t])/(24-n)),c[t]=Math.pow(10,p/10),g=K.MAX_VALUE;for(v=0;va.npart_l-1&&(a.s3ind[M][1]=a.npart_l-1);var w=576*a.mode_gr/h;if(a.ATH.decay=Math.pow(10,-1.2*w),a.ATH.adjust=.01,-(a.ATH.adjustLimit=1)!=e.ATHtype){var R=e.out_samplerate/Pe.BLKSIZE,B=0;for(t=d=0;t=v)for(l=0;le.in_samplerate&&(e.lowpassfreq=e.in_samplerate/2),e.out_samplerate=(t=0|e.lowpassfreq,a=e.in_samplerate,s=44100,48e3<=a?s=48e3:44100<=a?s=44100:32e3<=a?s=32e3:24e3<=a?s=24e3:22050<=a?s=22050:16e3<=a?s=16e3:12e3<=a?s=12e3:11025<=a?s=11025:8e3<=a&&(s=8e3),-1==t?s:(t<=15960&&(s=44100),t<=15250&&(s=32e3),t<=11220&&(s=24e3),t<=9970&&(s=22050),t<=7230&&(s=16e3),t<=5420&&(s=12e3),t<=4510&&(s=11025),t<=3970&&(s=8e3),a=t.lowpass2&&(a=Math.min(a,r)),t.lowpass1t.highpass1?E((t.highpass2-l)/(t.highpass2-t.highpass1+1e-20)):1,o=t.lowpass2>t.lowpass1?E((l-t.lowpass1)/(t.lowpass2-t.lowpass1+1e-20)):1,t.amp_filter[r]=_*o}}(e),n.samplerate_index=P(e.out_samplerate,e),n.samplerate_index<0)return e.internal_flags=null,-1;if(e.VBR==ye.vbr_off){if(e.free_format)n.bitrate_index=0;else if(e.brate=I(e.brate,e.version,e.out_samplerate),n.bitrate_index=H(e.brate,e.version,e.out_samplerate),n.bitrate_index<=0)return e.internal_flags=null,-1}else n.bitrate_index=1;e.analysis&&(e.bWriteVbrTag=!1),null!=n.pinfo&&(e.bWriteVbrTag=!1),R.init_bit_stream_w(n);for(var c,h,u,m=n.samplerate_index+3*e.version+6*(e.out_samplerate<16e3?1:0),p=0;p=f){var M=i-u;if(0==i&&(M=0),(_=O(e,m[0],m[1],n,r,M))<0)return _;for(r+=_,u+=_,h.mf_size-=e.framesize,h.mf_samples_to_encode-=e.framesize,l=0;li&&(s.ResvMax=i),(s.ResvMax<0||e.disable_reservoir)&&(s.ResvMax=0);var _=t.bits*s.mode_gr+Math.min(s.ResvSize,s.ResvMax);return a<_&&(_=a),n.resvDrain_pre=0,null!=s.pinfo&&(s.pinfo.mean_bits=t.bits/2,s.pinfo.resvsize=s.ResvSize),_},this.ResvMaxBits=function(e,t,a,s){var n,r=e.internal_flags,i=r.ResvSize,_=r.ResvMax;0!=s&&(i+=t),0!=(1&r.substep_shaping)&&(_*=.9),a.bits=t,9*_<10*i?(n=i-9*_/10,a.bits+=n,r.substep_shaping|=128):(n=0,r.substep_shaping&=127,e.disable_reservoir||0!=(1&r.substep_shaping)||(a.bits-=.1*t));var o=i<6*r.ResvMax/10?i:6*r.ResvMax/10;return(o-=n)<0&&(o=0),o},this.ResvAdjust=function(e,t){e.ResvSize-=t.part2_3_length+t.part2_length},this.ResvFrameEnd=function(e,t){var a,s=e.l3_side;e.ResvSize+=t*e.mode_gr;var n=0;s.resvDrain_post=0,(s.resvDrain_pre=0)!=(a=e.ResvSize%8)&&(n+=a),0<(a=e.ResvSize-n-e.ResvMax)&&(n+=a);var r=Math.min(8*s.main_data_begin,n)/8;s.resvDrain_pre+=8*r,n-=8*r,e.ResvSize-=8*r,s.main_data_begin-=r,s.resvDrain_post+=n,e.ResvSize-=n}},m=new k,p=new function(){this.setModules=function(e,t,a){}},b=new function(){};n.setModules(r,i,_,o,l,f,c,h,b),i.setModules(r,b,c,f),h.setModules(i,c),_.setModules(n),l.setModules(i,u,o,m),o.setModules(m,u,n.enc.psy),u.setModules(i),m.setModules(o),f.setModules(n,i,c),a.setModules(p,b),p.setModules(c,h,_);var v=n.lame_init();v.num_channels=s,v.in_samplerate=e,v.out_samplerate=e,v.brate=t,v.mode=Ee.STEREO,v.quality=3,v.bWriteVbrTag=!1,v.disable_reservoir=!0,v.write_id3tag_automatic=!1,n.lame_init_params(v);var d=1152,g=0|1.25*d+7200,S=B(g);this.encodeBuffer=function(e,t){1==s&&(t=e),e.length>d&&(d=e.length,S=B(g=0|1.25*d+7200));var a=n.lame_encode_buffer(v,e,t,e.length,S,0,g);return new Int8Array(S.subarray(0,a))},this.flush=function(){var e=n.lame_encode_flush(v,S,0,g);return new Int8Array(S.subarray(0,e))}}}t(),Recorder.lamejs=t}(); \ No newline at end of file diff --git a/resources/assets/js/App.vue b/resources/assets/js/App.vue index 7d2f259de..9427a9868 100755 --- a/resources/assets/js/App.vue +++ b/resources/assets/js/App.vue @@ -9,6 +9,7 @@ + @@ -19,9 +20,10 @@ import RightBottom from "./components/RightBottom"; import PreviewImageState from "./components/PreviewImage/state"; import {mapState} from "vuex"; import NetworkException from "./components/NetworkException"; +import AudioManager from "./components/AudioManager"; export default { - components: {NetworkException, PreviewImageState, RightBottom, Spinner}, + components: {AudioManager, NetworkException, PreviewImageState, RightBottom, Spinner}, data() { return { diff --git a/resources/assets/js/components/AudioManager.vue b/resources/assets/js/components/AudioManager.vue new file mode 100644 index 000000000..2c514b63e --- /dev/null +++ b/resources/assets/js/components/AudioManager.vue @@ -0,0 +1,93 @@ + + + + diff --git a/resources/assets/js/directives/longpress.js b/resources/assets/js/directives/longpress.js deleted file mode 100755 index 60eeb63a0..000000000 --- a/resources/assets/js/directives/longpress.js +++ /dev/null @@ -1,46 +0,0 @@ -const isSupportTouch = "ontouchend" in document; -export default { - bind (el, binding) { - if (!isSupportTouch) { - return - } - let timer = 0; - el.__touchLongpressDown__ = e => { - timer = setTimeout(_ => { - timer = 0 - if (binding.expression) { - binding.value(e, el) - } - }, 600) - }; - el.__touchLongpressMove__ = _ => { - if (timer) { - clearTimeout(timer) - timer = 0 - } - }; - el.__touchLongpressUp__ = _ => { - if (timer) { - clearTimeout(timer) - timer = 0 - } - }; - el.addEventListener('touchstart', el.__touchLongpressDown__); - el.addEventListener('touchmove', el.__touchLongpressMove__); - el.addEventListener('touchend', el.__touchLongpressUp__); - }, - update () { - - }, - unbind (el) { - if (!isSupportTouch) { - return - } - el.removeEventListener('touchstart', el.__touchLongpressDown__); - el.removeEventListener('touchmove', el.__touchLongpressMove__); - el.removeEventListener('touchend', el.__touchLongpressUp__); - delete el.__touchLongpressDown__; - delete el.__touchLongpressMove__; - delete el.__touchLongpressUp__; - } -}; diff --git a/resources/assets/js/directives/touchmouse.js b/resources/assets/js/directives/touchmouse.js index 1bac59f2c..541f02fc7 100755 --- a/resources/assets/js/directives/touchmouse.js +++ b/resources/assets/js/directives/touchmouse.js @@ -1,33 +1,34 @@ const isSupportTouch = "ontouchend" in document; export default { bind (el, binding) { - let isMove = false; + let isTouch = false; el.__touchMouseDown__ = e => { - isMove = false; e.preventDefault(); + isTouch = true; + binding.value("down", e); }; - el.__touchMouseMove__ = _ => { - isMove = true; - }; - el.__touchMouseUp__ = e => { - if (isMove) { - return; + el.__touchMouseMove__ = e => { + if (isTouch) { + binding.value("move", e); } - if (binding.expression) { - binding.value(e); + }; + el.__touchMouseUp__ = _ => { + if (isTouch) { + isTouch = false; + binding.value("up"); } }; el.addEventListener(isSupportTouch ? 'touchstart' : 'mousedown', el.__touchMouseDown__); - el.addEventListener(isSupportTouch ? 'touchmove' : 'mousemove', el.__touchMouseMove__); - el.addEventListener(isSupportTouch ? 'touchend' : 'mouseup', el.__touchMouseUp__); + document.addEventListener(isSupportTouch ? 'touchmove' : 'mousemove', el.__touchMouseMove__); + document.addEventListener(isSupportTouch ? 'touchend' : 'mouseup', el.__touchMouseUp__); }, update () { }, unbind (el) { el.removeEventListener(isSupportTouch ? 'touchstart' : 'mousedown', el.__touchMouseDown__); - el.removeEventListener(isSupportTouch ? 'touchmove' : 'mousemove', el.__touchMouseMove__); - el.removeEventListener(isSupportTouch ? 'touchend' : 'mouseup', el.__touchMouseUp__); + document.removeEventListener(isSupportTouch ? 'touchmove' : 'mousemove', el.__touchMouseMove__); + document.removeEventListener(isSupportTouch ? 'touchend' : 'mouseup', el.__touchMouseUp__); delete el.__touchMouseDown__; delete el.__touchMouseMove__; delete el.__touchMouseUp__; diff --git a/resources/assets/js/pages/manage/components/ChatInput/index.vue b/resources/assets/js/pages/manage/components/ChatInput/index.vue index c4b552e59..90d7ef8cd 100755 --- a/resources/assets/js/pages/manage/components/ChatInput/index.vue +++ b/resources/assets/js/pages/manage/components/ChatInput/index.vue @@ -1,63 +1,104 @@ @@ -67,11 +108,12 @@ import Quill from 'quill'; import "quill-mention"; import ChatEmoji from "./emoji"; import touchmouse from "../../../../directives/touchmouse"; +import TransferDom from "../../../../directives/transfer-dom"; export default { name: 'ChatInput', components: {ChatEmoji}, - directives: {touchmouse}, + directives: {touchmouse, TransferDom}, props: { dialogId: { type: Number, @@ -126,7 +168,7 @@ export default { _content: '', _options: {}, - modeClass: '', + mentionMode: '', userList: null, taskList: null, @@ -138,6 +180,17 @@ export default { wrapperWidth: 0, editorHeight: 0, + recordReady: false, + recordRec: null, + recordState: "stop", + recordBlob: null, + recordWave: null, + recordDuration: 0, + + touchStart: {}, + touchLimitX: false, + touchLimitY: false, + isSpecVersion: this.checkIOSVersion(), }; }, @@ -179,6 +232,37 @@ export default { } else { return {}; } + }, + + boxClass() { + const array = []; + if (this.recordState === 'ing') { + array.push('record-ing'); + } + if (this.mentionMode) { + array.push(this.mentionMode); + } + return array + }, + + sendClass() { + if (this.value) { + return 'sender'; + } + if (this.recordReady) { + return 'recorder' + } + return '' + }, + + recordFormatDuration() { + const {recordDuration} = this; + let minute = Math.floor(recordDuration / 60000), + seconds = Math.floor(recordDuration / 1000) % 60, + millisecond = ("00" + recordDuration % 1000).substr(-2) + if (minute < 10) minute = `0${minute}` + if (seconds < 10) seconds = `0${seconds}` + return `${minute}:${seconds}″${millisecond}` } }, watch: { @@ -257,7 +341,7 @@ export default { shortKey: true, handler: _ => { if (!this.enterSend) { - this.send(); + this.onSend(); return false; } return true; @@ -268,7 +352,7 @@ export default { shiftKey: false, handler: _ => { if (this.enterSend) { - this.send(); + this.onSend(); return false; } return true; @@ -390,6 +474,27 @@ export default { return delta }) + // Load recorder + $A.loadScriptS([ + 'js/recorder/recorder.mp3.min.js', + 'js/recorder/lib.fft.js', + 'js/recorder/frequency.histogram.view.js', + ], (e) => { + if (e !== null || typeof window.Recorder !== 'function') { + return; + } + this.recordRec = window.Recorder({ + type: "mp3", + bitRate: 16, + sampleRate: 16000, + onProcess: (buffers, powerLevel, duration, sampleRate, newBufferIdx, asyncEnd) => { + this.recordWave.input(buffers[buffers.length - 1], powerLevel, sampleRate); + this.recordDuration = duration; + } + }) + this.recordReady = true; + }); + // Ready event this.$emit('on-ready', this.quill) }, @@ -439,18 +544,122 @@ export default { }) }, - send() { + clickSend(action, event) { if (this.loading) { return; } + switch (action) { + case 'down': + this.touchLimitX = false; + this.touchLimitY = false; + this.touchStart = event.type === "touchstart" ? event.touches[0] : event; + if (this.startRecord()) { + return; + } + break; + + case 'move': + const touchMove = event.type === "touchmove" ? event.touches[0] : event; + this.touchLimitX = (this.touchStart.clientX - touchMove.clientX) / window.innerWidth > 0.1 + this.touchLimitY = (this.touchStart.clientY - touchMove.clientY) / window.innerHeight > 0.1 + break; + + case 'up': + if (this.stopRecord(this.touchLimitY)) { + return; + } + if (this.touchLimitY || this.touchLimitX) { + return; // 移动了 X、Y 轴 + } + this.onSend() + break; + } + }, + + onSend() { + this.rangeIndex = 0 this.$emit('on-send') }, + startRecord() { + if (this.sendClass === 'recorder') { + this.recordState = "ready"; + this.recordRec.open(_ => { + if (this.recordState === "ready") { + this.recordState = "ing" + this.recordBlob = null + this.$nextTick(_ => { + this.$refs.recwave.innerHTML = ""; + this.recordWave = window.Recorder.FrequencyHistogramView({ + elem: this.$refs.recwave, + lineCount: 90, + position: 0, + minHeight: 1, + stripeEnable: false + }) + this.recordRec.start() + }) + } else { + this.recordRec.close(); + } + }, (msg) => { + $A.modalError(msg || '打开录音失败') + }); + return true; + } else { + return false; + } + }, + + stopRecord(isCancel) { + if (this.recordState === "ing") { + this.recordState = "stop"; + this.recordRec.stop((blob, duration) => { + this.recordRec.close(); + if (isCancel === true) { + return; + } + if (duration < 600) { + // 小于 600ms 不发送 + $A.messageWarning("说话时间太短") + } else { + this.recordBlob = blob; + this.uploadRecord(duration); + } + }, (msg) => { + this.recordRec.close(); + $A.modalError("录音失败: " + msg); + }); + return true; + } else { + this.recordState = "stop"; + return false; + } + }, + hidePopover() { this.showEmoji = false; this.showMore = false; }, + uploadRecord(duration) { + if (this.recordBlob === null) { + return; + } + const reader = new FileReader(); + reader.onloadend = () => { + this.$emit('on-send', { + type: 'record', + data: { + type: this.recordBlob.type, + base64: reader.result, + duration, + } + }) + }; + reader.readAsDataURL(this.recordBlob); + }, + onSelectEmoji(item) { if (!this.quill) { return; @@ -533,7 +742,7 @@ export default { return new Promise(resolve => { switch (mentionChar) { case "@": // @成员 - this.modeClass = "user-mention"; + this.mentionMode = "user-mention"; if (this.userList !== null) { resolve(this.userList) return; @@ -603,7 +812,7 @@ export default { break; case "#": // #任务 - this.modeClass = "task-mention"; + this.mentionMode = "task-mention"; if (this.taskList !== null) { resolve(this.taskList) return; diff --git a/resources/assets/js/pages/manage/components/DialogView.vue b/resources/assets/js/pages/manage/components/DialogView.vue index 863c055f0..215cca1d1 100644 --- a/resources/assets/js/pages/manage/components/DialogView.vue +++ b/resources/assets/js/pages/manage/components/DialogView.vue @@ -25,6 +25,13 @@ + +
+
+
{{recordDuration(msgData.msg.duration)}}
+
+
+
@@ -88,6 +95,7 @@