Myna.js 4.78 KB
!function(t){t.URL=t.URL||t.webkitURL,navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia;var e=function(e,r){r=r||{},r.sampleBits=r.sampleBits||16,r.sampleRate=r.sampleRate||44100;var i=new(t.webkitAudioContext||t.AudioContext),o=i.createMediaStreamSource(e),n=i.createScriptProcessor||i.createJavaScriptNode,s=n.apply(i,[4096,1,1]),l={size:0,buffer:[],inputSampleRate:i.sampleRate,inputSampleBits:16,outputSampleRate:r.sampleRate,oututSampleBits:r.sampleBits,input:function(t){this.buffer.push(new Float32Array(t)),this.size+=t.length},compress:function(){for(var t=new Float32Array(this.size),e=0,a=0;a<this.buffer.length;a++)t.set(this.buffer[a],e),e+=this.buffer[a].length;for(var r=parseInt(this.inputSampleRate/this.outputSampleRate),i=t.length/r,o=new Float32Array(i),n=0,s=0;n<i;)o[n]=t[s],s+=r,n++;return o},encodeWAV:function(){var t=Math.min(this.inputSampleRate,this.outputSampleRate),e=Math.min(this.inputSampleBits,this.oututSampleBits),a=this.compress(),r=a.length*(e/8),i=new ArrayBuffer(44+r),o=new DataView(i),n=1,s=0,l=function(t){for(var e=0;e<t.length;e++)o.setUint8(s+e,t.charCodeAt(e))};if(l("RIFF"),s+=4,o.setUint32(s,36+r,!0),s+=4,l("WAVE"),s+=4,l("fmt "),s+=4,o.setUint32(s,16,!0),s+=4,o.setUint16(s,1,!0),s+=2,o.setUint16(s,n,!0),s+=2,o.setUint32(s,t,!0),s+=4,o.setUint32(s,n*t*(e/8),!0),s+=4,o.setUint16(s,n*(e/8),!0),s+=2,o.setUint16(s,e,!0),s+=2,l("data"),s+=4,o.setUint32(s,r,!0),s+=4,8===e)for(var c=0;c<a.length;c++,s++){var u=Math.max(-1,Math.min(1,a[c])),p=u<0?32768*u:32767*u;p=parseInt(255/(65535/(p+32768))),o.setInt8(s,p,!0)}else for(var c=0;c<a.length;c++,s+=2){var u=Math.max(-1,Math.min(1,a[c]));o.setInt16(s,u<0?32768*u:32767*u,!0)}return new Blob([o],{type:"audio/wav"})}};this.start=function(){o.connect(s),s.connect(i.destination)},this.stop=function(){s.disconnect()},this.getBlob=function(){return this.stop(),l.encodeWAV()},this.play=function(e){console.log(t.URL.createObjectURL(this.getBlob())),e.src=t.URL.createObjectURL(this.getBlob())},this.download=function(e){var a=t.URL.createObjectURL(this.getBlob());console.log(a),e.href=a,e.download="output.wav"},this.upload=function(t,e){var r=l.encodeWAV();console.log(r);var i=1048576,o=5*i,n=new Date,s=n.getFullYear(),c=n.getMonth()+1,u=n.getDate(),p="uploads/programming_audio/link/"+String(s).substr(2)+"/"+(1==String(c).length?"0"+c:c)+"/"+u+"/",d={filename:"asdfas",filesize:r.size,filetype:r.type,isPart:!1,uploadId:"",isCompleted:!1,prefix:p,bucket:"gxb-file",defaultChunkSize:o||0,isVideoConvert:!1,isClassCover:!1},h=JSON.stringify(d);console.log(h),gxb._.ajax(gxb_api+"/s3",{type:"POST",contentType:"application/json",data:h,crossDomain:!0,success:function(t){console.log(t),successUrl=t;var e=[];if(d.isPart===!0){var i=[],o=utils.toJsonObj(t)[0];d.uploadId=o.upload_id;var n={md5:d.md5,loadedNum:"0",total:o.multi_list[o.multi_list.length-1].part_end,partsLen:o.multi_list.length,successNum:o.successNum,succesUrl:successUrl,file:r,max_size:5,coment_size:0,errorNum:0};uploadArr.push(n);for(var s=0;s<o.total_num;s++){var l=o.multi_list[s];console.log(l.part_url),console.log(l.part_begin+" -> "+l.part_end);var c=0;l&&1!=l.isSuccess?(e.push(l),c=0):c=l.upload_len;var u={loaded:c,part_idx:l.part_idx};i.push(u)}i.reverse(),e.reverse()}else a(!1,$this,r,r,t,successUrl,d)}})},s.onaudioprocess=function(t){l.input(t.inputBuffer.getChannelData(0))}},a=function(e,a,r,i,o,n,s,l,c,u,p){var d={"x-amz-acl":"public-read"};d=1==e?{"Access-Control-Allow-Origin":"http://"+t.location.host}:{"x-amz-acl":"public-read"},console.log(o),o="https"+o.split("http")[1],$.ajax({url:o,type:"PUT",data:i,headers:d,contentType:r.type,processData:!1,crossDomain:!0,beforeSend:function(){},success:function(t){$("#uploading").css("display","none");var e=getCDNFile(o);console.log(e),$(".audio-url").val(e),$("#savecorde").trigger("click")},error:function(t){$(".upload-tip").hide(),alert("音频保存失败..."),console.log(t)}})};e.throwError=function(t){throw alert(t),new function(){this.toString=function(){return t}}},e.canRecording=null!=navigator.getUserMedia,e.get=function(t,a){if(t){if(!navigator.getUserMedia)return void e.throwErr("当前浏览器不支持录音功能。");navigator.getUserMedia({audio:!0},function(r){var i=new e(r,a);t(i)},function(t){switch($(".error").css("display","block"),$(".error-btn").click(function(){$(".error").hide()}),t.code||t.name){case"PERMISSION_DENIED":case"PermissionDeniedError":e.throwError("用户拒绝提供信息。");break;case"NOT_SUPPORTED_ERROR":case"NotSupportedError":e.throwError("浏览器不支持硬件设备。");break;case"MANDATORY_UNSATISFIED_ERROR":case"MandatoryUnsatisfiedError":e.throwError("无法发现指定的硬件设备。");break;default:e.throwError("无法打开麦克风。异常信息:"+(t.code||t.name))}})}},t.HZRecorder=e}(window);