cocoa_chen

iOS之语音转文字的功能实现

2016-03-28

前言

这周做了一个类似于微信语音转文字的功能,过程中踩了几个坑,在这里记录一下以供参考。

项目简介:

我们项目中语音录制和播放分别用的是AVAudioRecorder和AVAudioPlayer。AVAudioRecorder录制后会保存为wav文件,因为wav文件体积比较大,为了节省流量和传输时间,会先转成amr文件再发送;用户在收到语音消息后会先将接收到的amr文件转成wav文件然后再使用AVAudioPlayer播放。

方案选择:

1.微信语音:从这里下载Demo和文档熟悉,发现不支持以文件格式识别,因为目前项目都是先把语音文件下载下来再进行识别,故放弃使用微信语音。
2.讯飞语音:从这里下载语音识别的SDK,运行Demo,语音识别的主要代码在MSCDemo->MSCDemo->business->isr->IATViewController.m中,SDK支持实时录制转文字和音频流转文字功能,将音频流识别的主要代码迁移到项目中来实现语音转文字功能。

问题汇总

1.第一个遇到的大问题便是解析出来的跟实际说话的内容偏差太大,而使用官方MSCDemo则没有这种情况出现,将自己项目中录制完的语音放到MSCDemo中解析也是一样的结果。后来咨询了下讯飞的技术人员,发现是采样率设置的问题。讯飞对语音流的要求是必须是单通道,16位,16000/8000采样率的音频格式,讯飞SDK默认识别的采样率是16000,而我们项目中录制的语音是8000的采样率,所以导致识别出来的语义偏差了很多,通过下列代码指定为8000的SampleRate后测试发现一切正常了。

1
2
3
4
5
6
//生成识别对象
_iFlySpeechRecognizer = [IFlySpeechRecognizer sharedInstance];
//设置音频数据模式为音频流
[_iFlySpeechRecognizer setParameter:IFLY_AUDIO_SOURCE_STREAM forKey:@"audio_source"];
//设置采样率,这里使用聊天语音中使用的8000
[_iFlySpeechRecognizer setParameter:@"8000" forKey:[IFlySpeechConstant SAMPLE_RATE]];

这里附上AVAudioRecorder录制语音时的参数配置做对比

1
2
3
4
5
6
NSDictionary * recordSetting = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithFloat: 8000],AVSampleRateKey, //采样率
[NSNumber numberWithInt: kAudioFormatLinearPCM],AVFormatIDKey,
[NSNumber numberWithInt:16],AVLinearPCMBitDepthKey,//采样位数,默认16位
[NSNumber numberWithInt: 1], AVNumberOfChannelsKey,//设置为单通道
nil];

2.讯飞SDK默认只支持pcm和wav格式的音频文件,所以我们需要将之前的amr文件转成wav格式再进行识别。
3.讯飞默认语音识别是添加标点符号的,如果不想要,可以通过下行代码禁用标点

1
2
//禁用标点
[_iFlySpeechRecognizer setParameter:@"0" forKey:[IFlySpeechConstant ASR_PTT]];

4.讯飞语音识别默认是同时只能识别一个音频流,如果你想识别另外一个音频流,需要先将之前的stop掉才可以继续新的语音识别。
5.讯飞的AppKey在下载Demo的时候会生成到项目中,文件地址是sample->MSCDemo->MSCDemo->Definition.h,打开复制APPID_VALUE的宏定义值到自己的项目中即可。这里有一点需要注意,AppKey和lib文件夹中的iflyMSC.framework是绑定的,如果更换了AppKey,那么同样需要替换项目中的iflyMSC.framework。期间我修改AppKey为另外一个已经审核通过的key,其余未做修改,进行语音识别的时候会报“登录失败”的error,更换为另外一个key对应的iflyMSC.framework之后就不再报错,显示正常了。
6.在线语音识别是免费的,未审核的话会有每天500次的请求限制,审核通过后就会去除限制。审核还是很快的,提交了之后联系相关的技术支持,几分钟就可以通过审核了,还是比较方便的。

总结

花了一天时间将讯飞语音识别集成和UI搞定,接触了一些坑,也了解了一些自己之前并不是很熟悉的内容,在这里记录一下解决方案,希望对你有用。

Tags: iOS
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章