小程序getRecorderManager 录音mp3格式,
onFrameRecorded 返回片段数据
第二次录音(或者是第三次)
onFrameRecorded 返回片段数据异常
PCM格式录音片段不会有问题不管是第几次录音,MP3基本上第二次或者第三次就会提示录音片段数据不对
另外就是 PCM 利用audioCtx.decodeAudioData()绘制波形图可用,但是MP3返回数据全是128无法绘制波形图
async startRecord() {
const recorder = wx.getRecorderManager();
const audioCtx = wx.createWebAudioContext();
const analyser = audioCtx.createAnalyser();
const context = wx.createCanvasContext('waveformCanvas', this);
this.setData({
recorder,
audioCtx,
analyser,
context
})
const _this = this;
const _array: any[] = [];
//已录制完指定帧大小的文件事件的监听函数
recorder.onFrameRecorded((listener: { isLastFrame: any; frameBuffer: any; }) => {
const originalUint8View = new Uint8Array(listener.frameBuffer);
// 创建一个新的 ArrayBuffer 和 Uint8Array 视图
const newBuffer = new ArrayBuffer(listener.frameBuffer.byteLength);
const newUint8View = new Uint8Array(newBuffer);
// 复制数据
for (let i = 0; i < originalUint8View.length; i++) {
newUint8View[i] = originalUint8View[i];
}
// 用于讯飞实时语音识别
setAudioData(newUint8View)
// 绘制波形图
.....
})
const that = this
let recorderStatus = 0;
recorder.onStart(() => {
console.log('recorder start')
recorderStatus = 1
})
recorder.onError((err: any) => {
console.error('录音错误: ', err);
setLastFrame()
recorderStatus = 0
})
recorder.onStop(()=>{
setLastFrame()
recorderStatus = 0
})
await startUpRecord((textArr: any[])=>{
const text = textArr.join('')
console.log(text)
that.setData({
inputData: text
})
}, ()=>{
recorderStatus &&
recorder.stop()
})
recorder.start({
duration: 10000,
numberOfChannels: 1, //录音通道数
sampleRate: 16000, //采样率
encodeBitRate: 96000, //编码码率
format: 'mp3', //音频格式,有效值 PCM/mp3
frameSize: 1
//sampleRate: 16000, //采样率
//encodeBitRate: 96000, //编码码率
//format: 'PCM', //音频格式,有效值 PCM/mp3
//frameSize: 1
})
},
你好,麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)