uni-app uni.getRecorderManager()录制的音频文件,选择wav格式后,文件内容的head显示amr

uni-app uni.getRecorderManager()录制的音频文件,选择wav格式后,文件内容的head显示amr

类别 信息
产品分类 uniapp/App
PC开发环境 Windows
PC版本号 x64
HBuilderX类型 正式
HBuilderX版本 4.08
手机系统 Android
手机版本号 Android 12
手机厂商 华为
手机机型 mate20
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

// 点击开始按钮的操作
handleConfirm() {
    //console.log('开始按钮被点击');
    recorderManager.start({
        format: 'wav',
        sampleRate: 16000
    });
    this.isloading = true
    this.end_record = false
},

操作步骤:

handleConfirm() {
    recorderManager.start({
        format: 'wav',
        sampleRate: 16000
    });
    this.isloading = true
    this.end_record = false
},

预期结果:

文件为wav且可以被后端检验通过

实际结果:

文件后缀为arm但解析头部为amr格式

bug描述:

uni.getRecorderManager()录制的音频文件,选择wav格式后,上传到服务器文件后缀为.wav,但文件内解析的head显示amr,后端无法识别为wav文件,导致无法进行语音识别,语音识别只能使用wav,包括pmc格式也显示为arm-wb。


更多关于uni-app uni.getRecorderManager()录制的音频文件,选择wav格式后,文件内容的head显示amr的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

哎,找了一圈,都没人解决,楼主有方案没

更多关于uni-app uni.getRecorderManager()录制的音频文件,选择wav格式后,文件内容的head显示amr的实战教程也可以访问 https://www.itying.com/category-93-b0.html


有效格式只有aac/mp3,填其他任何文件格式都是amr的,没办法

回复 1***@qq.com: 为什么我用aac格式的上传到后端语音识别接口,还是不行,无返回

楼主,解决了吗

uniapp的安卓底层对wav进行了压缩,导致成了arm 传过去后端没办法识别,苦死我了,现在准备给后端传MP3,让后端去处理转换

在 uni-app 中使用 uni.getRecorderManager() 录制音频时,如果你选择了 wav 格式,但文件内容的头部显示为 AMR,这可能是由于以下原因:

1. 格式支持问题

  • uni.getRecorderManager() 在某些平台(如微信小程序)可能默认支持 amr 格式,而不是 wav 格式。
  • 即使你指定了 format: 'wav',底层实现可能仍然使用 amr 格式进行录制,导致文件头部显示为 AMR

2. 平台限制

  • 不同平台对音频格式的支持不同。例如,微信小程序可能更倾向于使用 amr 格式,因为它更适合移动端,文件体积较小。
  • 如果你在微信小程序中使用 uni.getRecorderManager(),它可能会忽略 wav 格式的设置,默认使用 amr

3. 文件头信息错误

  • 可能是文件头信息写入错误,导致文件虽然以 wav 格式保存,但头部信息却是 AMR。这种情况比较少见,但可能由于底层实现的问题导致。

解决方法:

  1. 检查平台支持

    • 确认你使用的平台是否支持 wav 格式。如果不支持,可能需要使用 amr 格式。
  2. 手动转换格式

    • 如果平台不支持 wav 格式,你可以录制 amr 格式的音频,然后在后端或前端使用工具将其转换为 wav 格式。
  3. 使用其他插件或工具

    • 如果 uni.getRecorderManager() 无法满足需求,可以考虑使用其他第三方插件或工具来录制 wav 格式的音频。
  4. 检查代码

    • 确保你正确设置了 format 参数:
      const recorderManager = uni.getRecorderManager();
      recorderManager.start({
        format: 'wav',
        // 其他参数
      });
回到顶部