前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决使用 AVAudioRecorder 录音保存 .WAV 文件遇到的问题

解决使用 AVAudioRecorder 录音保存 .WAV 文件遇到的问题

作者头像
Swift社区
发布2022-05-19 08:24:13
1.1K0
发布2022-05-19 08:24:13
举报
文章被收录于专栏:Swift社区

问题背景

服务器接收到文件并进行语音识别,使用的是微软语音,只支持 PCM 数据源的 WAV 格式。

问题代码

代码语言:javascript
复制
- (NSDictionary *)getAudioSetting {
    NSMutableDictionary *dicM=[NSMutableDictionary dictionary];
    //设置录音格式
    [dicM setObject:@(kAudioFormatLinearPCM) forKey:AVFormatIDKey];
    //设置录音采样率,8000是电话采样率,对于一般录音已经够了
    [dicM setObject:@(16000) forKey:AVSampleRateKey];
    //设置通道,这里采用单声道 1 2
    [dicM setObject:@(2) forKey:AVNumberOfChannelsKey];
    //每个采样点位数,分为8、16、24、32
    [dicM setObject:@(16) forKey:AVLinearPCMBitDepthKey];
    //是否使用浮点数采样
    [dicM setObject:@(NO) forKey:AVLinearPCMIsFloatKey];
    //....其他设置等
    return dicM;
}

在没有使用微软语音识别库之前,使用上面的代码没有任何问题。识别库更新之后,不识别上传的的音频文件。

一开始以为是因为没有使用浮点数采样导致音频文件被压缩。修改后依然没有解决问题。

经过和服务器的联调,发现 .wav 音频文件的头不信息服务区无法识别。

解决方案

当音频文件保存为 .wav 格式的时候,iOS11 以下的系统,.wav 文件的头部信息是没问题,但是在 iOS11+ .wav 文件的头部信息服务区识别不了。

需要设置 AVAudioFileTypeKey 来解决这个问题。代码如下:

代码语言:javascript
复制
- (NSDictionary *)getAudioSetting {
    NSMutableDictionary *dicM=[NSMutableDictionary dictionary];
    //设置录音格式
    [dicM setObject:@(kAudioFormatLinearPCM) forKey:AVFormatIDKey];
    if (@available(iOS 11.0, *)) {
        [dicM setObject:@(kAudioFileWAVEType) forKey:AVAudioFileTypeKey];
    } else {
        // Fallback on earlier versions
    }
    //设置录音采样率,8000是电话采样率,对于一般录音已经够了
    [dicM setObject:@(16000) forKey:AVSampleRateKey];
    //设置通道,这里采用单声道 1 2
    [dicM setObject:@(2) forKey:AVNumberOfChannelsKey];
    //每个采样点位数,分为8、16、24、32
    [dicM setObject:@(16) forKey:AVLinearPCMBitDepthKey];
    //是否使用浮点数采样
    [dicM setObject:@(NO) forKey:AVLinearPCMIsFloatKey];
    //....其他设置等
    return dicM;
}

- EOF -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Swift社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题背景
  • 问题代码
  • 解决方案
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档