UNPKG

recorder-core-rlian

Version:

Recorder库:html5 js 录音 mp3 wav ogg webm amr 格式,支持pc和Android、ios部分浏览器、和Hybrid App(提供Android IOS App源码),微信也是支持的,提供H5版语音通话聊天示例 和DTMF编解码

69 lines (60 loc) 2.34 kB
/* webm编码器,beta版 https://github.com/xiangyuecn/Recorder 当然最佳推荐使用mp3、wav格式,代码也是优先照顾这两种格式 浏览器支持情况 https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats */ (function(){ "use strict"; var mime="audio/webm"; var support=window.MediaRecorder&&MediaRecorder.isTypeSupported(mime); Recorder.prototype.enc_webm={ stable:false ,testmsg:support?"只有比较新的浏览器支持,压缩率和mp3差不多。由于未找到对已有pcm数据进行快速编码的方法,只能按照类似边播放边收听形式把数据导入到MediaRecorder,有几秒就要等几秒。(想接原始录音Stream?我不给,哼!)输出音频虽然可以通过比特率来控制文件大小,但音频文件中的比特率并非设定比特率,采样率由于是我们自己采样的,到这个编码器随他怎么搞":"此浏览器不支持进行webm编码,未实现MediaRecorder" }; Recorder.prototype.webm=function(res,True,False){ //https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder/MediaRecorder //https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamAudioDestinationNode if(!support){ False("此浏览器不支持把录音转成webm格式"); return; }; var This=this, set=This.set,size=res.length,sampleRate=set.sampleRate; var ctx=Recorder.Ctx; var dest=ctx.createMediaStreamDestination(); dest.channelCount=1; //录音啦 var recorder = new MediaRecorder(dest.stream,{ mimeType:mime ,bitsPerSecond:set.bitRate*1000 }); var chunks = []; recorder.ondataavailable=function(e) { chunks.push(e.data); }; recorder.onstop=function(e) { True(new Blob(chunks,{type:mime})); }; recorder.onerror=function(e){ False("转码webm出错:"+e.message); }; recorder.start(); //声音源 var buffer=ctx.createBuffer(1,size,sampleRate); var buffer0=buffer.getChannelData(0); for(var j=0;j<size;j++){ var s=res[j]; s=s<0?s/0x8000:s/0x7FFF; buffer0[j]=s; }; var source=ctx.createBufferSource(); source.channelCount=1; source.buffer=buffer; source.connect(dest); if(source.start){source.start()}else{source.noteOn(0)}; source.onended=function(){ recorder.stop(); }; } })();