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
JavaScript
/*
webm编码器,beta版
https://github.com/xiangyuecn/Recorder
当然最佳推荐使用mp3、wav格式,代码也是优先照顾这两种格式
浏览器支持情况
https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats
*/
(function(){
;
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();
};
}
})();