在vue中录制语音

作者: 小遁哥 | 来源:发表于2022-10-31 17:09 被阅读0次

    用到了腾讯的im,录音功能还是要自己实现的,正当我纠结该使用哪一个库时,发现文档里面示例用的是js-audio-recorder,我很高兴。

    录音只能在https、localhost、file下才能进行,否则就说不支持getUserMedia,我很无语,因为我电脑不支持录音,本地启动也不支持https,最后只能连蓝牙耳机。

    js-audio-recorder这个库迷人格式是wav,后端只支持mp3,说是用lampjs,一顿操作,报错"ReferenceError: MPEGMode is not defined",查了半天,大多数方案都是编辑文件node_modules/lamejs夹中的相应文件等等,这太不靠谱了。

    于是乎我尝试了https://github.com/xiangyuecn/Recorder,导入语句

    import Recorder from 'recorder-core'
    import 'recorder-core/src/engine/mp3'
    import 'recorder-core/src/engine/mp3-engine'
    

    当切换为语音交互时,进行初始化,切换为文本交互时释放资源,open在用户没有授权时会弹出系统弹窗,在Chrome浏览器中访问chrome://settings/content/microphone可以管理网站授权。

          this.isSendText = !this.isSendText;
          if (!this.isSendText) {
            this.recordInstance = Recorder({
              type: "mp3",
              sampleRate: 16000,
              bitRate: 16,
    
            });
            this.recordInstance.open();
    
          }
          else {
            this.recordInstance.close()
          }
    

    beforeDestroy 时也释放下

        if (this.recordInstance) {
          this.recordInstance.close();
        }
    
    

    录音结束直接调用stop方法

        this.recordInstance.stop((blob, duration) => {
        
        });
    

    获得mp3文件使用如下代码

    let audioFile = new File([blob], 'voice.mp3', { type: 'audio/mp3' });
    audioFile.duration = duration;
    

    2022 - 11 - 07

    ios13的浏览器本身就是不支持录音的

    iso浏览器在通过js播放音频时,不触发onloadeddata ,可以用ondurationchange代替,如果发现录制的声音不能播放,可能是这个问题导致的

    相关文章

      网友评论

        本文标题:在vue中录制语音

        本文链接:https://www.haomeiwen.com/subject/gttdtdtx.html