收藏
回答

小程序录音mp3格式onFrameRecorded片段数据不正确?

小程序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

      })

    },




回答关注问题邀请回答
收藏

2 个回答

  • 社区技术运营专员--许涛
    社区技术运营专员--许涛
    02-07

    你好,麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)

    02-07
    有用
    回复
  • 智能回答 智能回答 该问答由AI生成
    01-13
    有用
登录 后发表内容