pengcheng933
pengcheng933
  • 发布:2023-09-13 10:10
  • 更新:2023-09-15 09:38
  • 阅读:440

【报Bug】使用录音管理器uni.getRecorderManager 录音后再iphone13机型上没得声音,生成的文件是一个4KB无效文件

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: macbook

HBuilderX类型: 正式

HBuilderX版本号: 3.8.12

手机系统: iOS

手机系统版本号: iOS 15

手机厂商: 苹果

手机机型: iPhone13,iPhone13 pro,iPhone13 mini

页面类型: vue

vue版本: vue3

打包方式: 离线

项目创建方式: HBuilderX

示例代码:
const recorderManager = uni.getRecorderManager()   
recorderManager.start({  
    sampleRate: 16000,  
    numberOfChannels: 1,  
    format: 'wav',  
    encodeBitRate: 96000, // 编码码率  
    duration: countTime.value * 1000 // 倒计时时间  
  })  
recorderManager.onStop((res) => {  
  voicePath.value = res.tempFilePath  
 // 上传语音到oss  上报道父组建,然后就到阿里云了  
  emit('recordOssAddress', {  
    voicePath: voicePath.value,  
    durationTime: durationTime,  
    repeatedStatus: 0  
  })  
})

操作步骤:

开始录音,完成后通过临时路径调用uni
.uploadFile上传到阿里云

预期结果:

录音有声音,本地和阿里云文件都能播放

实际结果:

没得声音,一个空的4KB录音文件

bug描述:

有一个请求用户录音的功能,在获取用户麦克风权限后,开始录音,录入完后上传阿里云,阿里云的到的是一个空的语音文件,用户反馈本地语音也不能播放,iPhone13机型都有这个问题,别的机型未见反馈

2023-09-13 10:10 负责人:无 分享
已邀请:
pengcheng933

pengcheng933 (作者)

问题已解决
补充场景:这里是一个对话功能,对方说一句,然后你回答一句,在说话时虽然掉了播放声音停止API,但这是一个异步操作,在IOS部分机型里面可能没有完全停止,这造成语音播放和录音冲突
代码修改 监听播放停止后再录音


class VideoClass {  
  constructor() {  
      this.innerAudioContext = uni.createInnerAudioContext()  
      innerAudioContext.onStop(() => {  
       console.log('stop')  
       if (this.stopSucessResolve) {  
        setTimeout(() => {  
          this.stopSucessResolve()  
          this.stopSucessxResolve = null  
        })  
      }  
    })  
  }  
 stopAll() {  
    return new Promise((resolve) => {  
        this.stopSucessResolve = resolve  
        this.innerAudioContext.stop()  
    })  
  }  
}  
const recorderManager = uni.getRecorderManager()     
async function start(){  
await new VideoClass().stopAll()  
recorderManager.start({    
    sampleRate: 16000,    
    numberOfChannels: 1,    
    format: 'wav',    
    encodeBitRate: 96000, // 编码码率    
    duration: countTime.value * 1000 // 倒计时时间    
  })    
}  

recorderManager.onStop((res) => {    
  voicePath.value = res.tempFilePath    
 // 上传语音到oss  上报道父组建,然后就到阿里云了    
  emit('recordOssAddress', {    
    voicePath: voicePath.value,    
    durationTime: durationTime,    
    repeatedStatus: 0    
  })    
})

要回复问题请先登录注册