问题背景

App 实现录音保存音频文件,并实现本地语音识别匹配功能。

通过网络请求上传通过语音匹配的音频文件。

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

本地识别没有任何问题,上传到服务器的文件无法识别,微软库直接报错。猜测上传的音频个是问题,导致的问题。

问题代码

- (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 来解决这个问题。代码如下:

- (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;
}

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

  1. ESP32+INMP441+DHT11+OLED+网页+Arduino——“智能”语音天气站(2):INMP441录音生成wav文件

    参考视频: Recording using INMP441 参考代码:学会了代码复用 Recording using INMP441 知识 什么是wav文件 可以在维基百科找到wav文件的历史渊源.这 ...

  2. html手机录音为wav文件,【未解决】用WebAudioRecorder.js去实现录音并保存为wav格式...

    折腾: 期间,看到这个库: 但是好像获取不到麦克风: 继续想办法看看: 还是:Could not get audio media device: TypeError: Failed to execut ...

  3. html手机录音为wav文件,怎么手机录音(WAV)格式音乐转换成MP3

    春节节假日就这样过去了,你们都过得怎么样啊,这几天小编在家中听了很多音乐,但是发现有些音乐的格式不同意,而且这些歌曲还是小编最近比较喜欢听的,想下载下来在自己的手机里面播放,不巧的是手机设备不支持这种 ...

  4. WAV文件C++分析与显示

    预备知识: WAV格式说明:http://baike.baidu.com/view/8033.htm 总体思路:分别建立与WAV格式相对应的类: struct RIFF_HEADER { char s ...

  5. 安卓Android开发:使用AudioRecord录音、将录音保存为wav文件、使用AudioTrack保存录音

    一.使用AudioRrecord录音 1.1声明 首先需要声明一个AudioRecord类的实例.之所以需要事先声明,是因为在本例中,录音的启动和结束被封装在两个不同的方法里.而通常来讲," ...

  6. python tts 保存wav_C#文本转语音并保存wav和MP3文件

    回顾上次写博客至今都有4个多月了,最近工作比较的忙没时间写博文.以后会多坚持写博文,与大家分享下最近遇到的问题.最近因为项目需要,研究了下用C#开发TTS.下面把大体的思路给大家说说,希望对大家有所帮 ...

  7. 单片机内部AD实现录音wav文件

    1.硬件设计 声音采集采用最简单的驻极体麦克风,将信号进行放大滤波后输入到单片机内部AD端口.电路图如下,第一级运放用于放大,第二级为低通滤波.(电阻电容参数仅供参考). 单片机采集声音数据后,将数据 ...

  8. Windows Phone 8初学者开发—第21部分:永久保存Wav音频文件

    第21部分:永久保存Wav音频文件 原文地址:http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Begi ...

  9. RAMdisk保存文件方案,解决关机后无盘镜像文件没了的方案

    RAMdisk保存文件方案,解决关机后 无盘 镜像文件没了的方案 内存大了用不完 可以用ramdisk在内存中虚拟一个磁盘 把常用软件.系统缓存.浏览器缓存.bt下载都放到这个 虚拟磁盘 中 速度又快 ...

最新文章

  1. C# Keywords - is
  2. Sundown EK:漏洞利用工具中的抄袭大师
  3. python pandas for循环_python – 将一个for循环应用于Pandas中的多个DataFrame
  4. SQLite数据库损坏与修复
  5. 推荐VSCode多语言开发,支持一键JAVA
  6. 【补充一则】身份证校验的c#代码
  7. 201671010439-词频统计软件项目报告
  8. koa访问mysql数据库操作
  9. CentOS下MYSQL数据库的安装
  10. 在线工具(eda/画图[visio替代]/公式编辑/公式识别)
  11. 安卓 文本框怎么贴近边缘_【安卓,iOS】全网最火的充电提示音教程来啦
  12. 翻译: Revisiting Contrastive Methods for Unsupervised Learning of Visual Representations
  13. 黎活明8天快速掌握android视频教程--20_采用ContentProvider对外共享数据
  14. 解决aspx页面中关键词(keywords)和描述(descript)不显示问题
  15. 小程序体积优化(1)--优化大文本
  16. 一句话证明你在阿里待过!(这才是最真实的阿里)
  17. Pagedown learning notes
  18. 前端面试总结2020年9月12家面试
  19. 「斜」italics() //使用斜体显示字符串 20140817 ①文本处理
  20. VC++实现的基于人眼状态的疲劳驾驶识别系统

热门文章

  1. Python使用镜像的方法
  2. 使用纹理(Textures)
  3. web前端-vue element UI el-table,el-table-column表格添加行点击事件
  4. 百度携手长安汽车,Apollo生态引领自动驾驶进入量产时代
  5. 网络故障简单分析指导
  6. 公共租赁住房新系统图文教程
  7. 定压补水真空脱气机组
  8. 希望你活出从容不迫的优雅
  9. 《Android移动应用基础教程》(Android Studio)(第二版)黑马教程 课后题答案第2章 Android常见界面布局
  10. 恒压供水全套 海利普变频器 恒压供水 海利普变频器