js实现录音

一、通过MediaRecorder实现

if(navigator.mediaDevices) {
    // 获取打开麦克风权限,以及stream对象
    navigator.mediaDevices.getUserMedia({audio: true})
    .then((stream) => {
        var chunks = [];
        // 创建MediaRecorder对象,需要传入stream对象
        var mediaRecorder = new MediaRecorder(stream);

        var startBtn = document.createElement('button');
        var stopBtn = document.createElement('button');
        document.body.append(startBtn);
        document.body.append(stopBtn);
        startBtn.innerText = '开始';
        stopBtn.innerText = '结束';
        
        // 开始
        startBtn.onclick = () => {
            // 开始录音 
            mediaRecorder.start();
        }
        // 结束
        stopBtn.onclick = () => {
            // 停止录音
            mediaRecorder.stop();
        }

        // 添加事件监听
        mediaRecorder.onstart = () => {
            console.log('start', mediaRecorder.state);
        }
        mediaRecorder.onstop = () => {
            console.log('stop', mediaRecorder.state);
            // 数据块合成blob对象
            var blob = new Blob(chunks, {type: 'audio/webm;codecs=opus'});
            console.log(blob)
            
            var audio = document.createElement('audio');
            var url = (window.URL || webkitURL).createObjectURL(blob);
            audio.src = url;
            audio.controls = true;
            document.body.appendChild(audio);
            console.log(audio, url)
        }
        mediaRecorder.ondataavailable = (e) => {
            console.log('data');
            console.log(e);
            chunks.push(e.data);
        }
    }).catch((e) => {
            console.log(e);
    })
}

二、通过recorder.js实现

插件地址https://github.com/xiangyuecn/Recorder

  1. 引入recorder
<script src="https://cdn.jsdelivr.net/gh/xiangyuecn/Recorder@latest/recorder.mp3.min.js"></script> <!--已包含recorder-core和mp3格式支持-->
  1. API
// 创建Recorder对象
rec = Recorder({
    type:"mp3",
    sampleRate:16000,
    bitRate:16
});

// 调用open方法进行授权
rec.open(function () {
    alert('授权成功');
    //rec.start() 此处可以立即开始录音,但不建议这样编写,因为open是一个延迟漫长的操作,通过两次用户操作来分别调用open和start是推荐的最佳流程
    },function(msg,isUserNotAllow){//用户拒绝未授权或不支持
        //dialog&&dialog.Cancel(); 如果开启了弹框,此处需要取消
}, function (msg) {
    alert(msg);
});

// 开始录音
rec.start();

// 停止录音
rec.stop(function (blob, duration) {
    console.log('blob:', blob);
    // 创建指向音频文件的URL
    var audioURL = (window.URL || webkitURL).createObjectURL(blob);

    var audio = document.createElement('audio');
    audio.src = audioURL;
    audio.controls = true;
    document.body.appendChild(audio);
    // 简单利用URL生成播放地址,注意不用了时需要revokeObjectURL,否则霸占内存
    (window.URL||webkitURL).revokeObjectURL(audioURL);
}, function (msg) {
    alert(msg);
}, function () {
    // 释放录音资源
    rec.close();
    rec = null;
});
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容