解决使用 AVAudioRecorder 录音保存 .WAV 文件遇到的问题
问题背景
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 文件遇到的问题相关推荐
- ESP32+INMP441+DHT11+OLED+网页+Arduino——“智能”语音天气站(2):INMP441录音生成wav文件
参考视频: Recording using INMP441 参考代码:学会了代码复用 Recording using INMP441 知识 什么是wav文件 可以在维基百科找到wav文件的历史渊源.这 ...
- html手机录音为wav文件,【未解决】用WebAudioRecorder.js去实现录音并保存为wav格式...
折腾: 期间,看到这个库: 但是好像获取不到麦克风: 继续想办法看看: 还是:Could not get audio media device: TypeError: Failed to execut ...
- html手机录音为wav文件,怎么手机录音(WAV)格式音乐转换成MP3
春节节假日就这样过去了,你们都过得怎么样啊,这几天小编在家中听了很多音乐,但是发现有些音乐的格式不同意,而且这些歌曲还是小编最近比较喜欢听的,想下载下来在自己的手机里面播放,不巧的是手机设备不支持这种 ...
- WAV文件C++分析与显示
预备知识: WAV格式说明:http://baike.baidu.com/view/8033.htm 总体思路:分别建立与WAV格式相对应的类: struct RIFF_HEADER { char s ...
- 安卓Android开发:使用AudioRecord录音、将录音保存为wav文件、使用AudioTrack保存录音
一.使用AudioRrecord录音 1.1声明 首先需要声明一个AudioRecord类的实例.之所以需要事先声明,是因为在本例中,录音的启动和结束被封装在两个不同的方法里.而通常来讲," ...
- python tts 保存wav_C#文本转语音并保存wav和MP3文件
回顾上次写博客至今都有4个多月了,最近工作比较的忙没时间写博文.以后会多坚持写博文,与大家分享下最近遇到的问题.最近因为项目需要,研究了下用C#开发TTS.下面把大体的思路给大家说说,希望对大家有所帮 ...
- 单片机内部AD实现录音wav文件
1.硬件设计 声音采集采用最简单的驻极体麦克风,将信号进行放大滤波后输入到单片机内部AD端口.电路图如下,第一级运放用于放大,第二级为低通滤波.(电阻电容参数仅供参考). 单片机采集声音数据后,将数据 ...
- Windows Phone 8初学者开发—第21部分:永久保存Wav音频文件
第21部分:永久保存Wav音频文件 原文地址:http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Begi ...
- RAMdisk保存文件方案,解决关机后无盘镜像文件没了的方案
RAMdisk保存文件方案,解决关机后 无盘 镜像文件没了的方案 内存大了用不完 可以用ramdisk在内存中虚拟一个磁盘 把常用软件.系统缓存.浏览器缓存.bt下载都放到这个 虚拟磁盘 中 速度又快 ...
最新文章
- C# Keywords - is
- Sundown EK:漏洞利用工具中的抄袭大师
- python pandas for循环_python – 将一个for循环应用于Pandas中的多个DataFrame
- SQLite数据库损坏与修复
- 推荐VSCode多语言开发,支持一键JAVA
- 【补充一则】身份证校验的c#代码
- 201671010439-词频统计软件项目报告
- koa访问mysql数据库操作
- CentOS下MYSQL数据库的安装
- 在线工具(eda/画图[visio替代]/公式编辑/公式识别)
- 安卓 文本框怎么贴近边缘_【安卓,iOS】全网最火的充电提示音教程来啦
- 翻译: Revisiting Contrastive Methods for Unsupervised Learning of Visual Representations
- 黎活明8天快速掌握android视频教程--20_采用ContentProvider对外共享数据
- 解决aspx页面中关键词(keywords)和描述(descript)不显示问题
- 小程序体积优化(1)--优化大文本
- 一句话证明你在阿里待过!(这才是最真实的阿里)
- Pagedown learning notes
- 前端面试总结2020年9月12家面试
- 「斜」italics() //使用斜体显示字符串 20140817 ①文本处理
- VC++实现的基于人眼状态的疲劳驾驶识别系统