用到了腾讯的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
代替,如果发现录制的声音不能播放,可能是这个问题导致的