[ios]ios tts的使用
参考:http://www.tekuba.net/program/327/
http://blog.sina.com.cn/s/blog_923fdd9b0101flx3.html
iOS平台由于本身不支持TTS,所以开发者如果想使自己的App具有TTS功能,首先要找到好用的TTS库。
根据特酷吧的了解,在iOS平台有以下几个选择:
1,OpenEars和FliteTTS
Google下很容易就会检索到这两个库:OpenEars和FliteTTS。OpenEars是开源的iOS库,支持离线的语音识别和TTS,但它主要是针对英语。而FliteTTS比较小巧,也不支持中文。如果做中文语音合成,这两个库根本用不上(网络上的广泛说法,特酷吧没有验证)。
2,Google的在线语音合成服务
还有一个选择就是Google的在线语音合成服务,请求格式为:
http://translate.google.com/translate_tts?tl=en&q=tekuba
如上示例会返回“tekuba”的英文读音文件的mp3。如果需要的是中文发音,可以修改tl参数为zh,如下示例:
http://translate.google.com/translate_tts?tl=zh&q=特酷吧
如果App中需要的是固定的语音播报,使用google的这个在线服务是个不错的选择,只需要一次请求,将返回的mp3保存在本地,以后直接读取本地mp3即可。但是大部分场景都是需要转换为语音的文本不固定,我们就只能选择别的办法了。
3,科大讯飞语音以及百度语音
目前,做中文语音合成的比较好的算是科大讯飞了,在语速,停顿上效果都不错。但是它提供的iOS版本的SDK只是支持在线的语音合成(和上面google的在线合成服务类似),目前不支持本地离线合成。特酷吧咨询了科大讯飞的技术人员,他们说支持离线语音合成的iOS版本SDK大概会在年中发布(特酷吧写本文时是2014年)。
另外百度也在2013年10月份开发了语音技术平台,不过现在使用还需要申请,特酷吧没有尝试,不知道它是否支持iOS的离线语音合成,如果哪位同学使用过,也可以分享下。
4,iOS7提供的AVSpeechSynthesizer等新特征
如果你的App仅支持iOS7系统的话,那么这个iOS7中为AVFoundation.Framework引入的新特征一定很适合你。
使用时导入#import <AVFoundation/AVSpeechSynthesis.h>,示例如下:
AVSpeechSynthesizer *av = [[AVSpeechSynthesizer alloc]init];
AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc]initWithString:@"特酷吧"]; //需要转换的文本
[av speakUtterance:utterance];
不过,据特酷吧测试,iOS7提供的这个接口合成的语音比较生硬且没有停顿。
我自己的小项目里需要用到 text to speech功能,就是把文字用语音读出来。一开始想用讯飞的云语音,但是每次发音都需要和讯飞的服务器通讯才能获取到音频。上网闲逛的时候发现ios7 新添加了这个功能,不需要联网,语音合成功能在手机上完成,这样在没有wifi与流量的情况下也可以使用了,就拿来试用一下,官方文档在此:苹果官方文档。
使用非常简单,代码就这么几行:
- AVSpeechUtterance *utterance = [AVSpeechUtterance
- speechUtteranceWithString:@"hello world"];
- AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc] init];
- [synth speakUtterance:utterance];
执行以上代码,ios设备就会读出初始化 AVSpeechUtterance 对象时所用的 NSString
对象,以上代码读出的是“hello world”。
AVSpeechUtterance
对象有一些属性,可以设置发出声音的效果:
可以修改速度、音量等。
我测试的时候发现读一个英文单词效果还可以,但是读好多词的英文句子的时候,上一个词还没读完,下一个词已经开始读了。也许还需要额外设置。
读中文的效果很好,是普通话发音,能读很长的句子,我试着读了一篇新闻,效果不错。
AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:"iOS7新特性"];
//设置语言类别(不能被识别,返回值为nil)
AVSpeechSynthesisVoice *voiceType = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN"];
utterance.voice = voiceType;
//设置语速快慢
utterance.rate *= 0.5;
//语音合成器会生成音频
[self.synthesizer speakUtterance:utterance];
语言类别
IOS7包含了一组可以用来合成的声音的嗓音,你可以自定义多种嗓音来合成。
"[AVSpeechSynthesisVoice 0x978a0b0] Language: th-TH",
"[AVSpeechSynthesisVoice 0x977a450] Language: pt-BR",
"[AVSpeechSynthesisVoice 0x977a480] Language: sk-SK",
"[AVSpeechSynthesisVoice 0x978ad50] Language: fr-CA",
"[AVSpeechSynthesisVoice 0x978ada0] Language: ro-RO",
"[AVSpeechSynthesisVoice 0x97823f0] Language: no-NO",
"[AVSpeechSynthesisVoice 0x978e7b0] Language: fi-FI",
"[AVSpeechSynthesisVoice 0x978af50] Language: pl-PL",
"[AVSpeechSynthesisVoice 0x978afa0] Language: de-DE",
"[AVSpeechSynthesisVoice 0x978e390] Language: nl-NL",
"[AVSpeechSynthesisVoice 0x978b030] Language: id-ID",
"[AVSpeechSynthesisVoice 0x978b080] Language: tr-TR",
"[AVSpeechSynthesisVoice 0x978b0d0] Language: it-IT",
"[AVSpeechSynthesisVoice 0x978b120] Language: pt-PT",
"[AVSpeechSynthesisVoice 0x978b170] Language: fr-FR",
"[AVSpeechSynthesisVoice 0x978b1c0] Language: ru-RU",
"[AVSpeechSynthesisVoice 0x978b210]Language: es-MX",
"[AVSpeechSynthesisVoice 0x978b2d0] Language: zh-HK",
"[AVSpeechSynthesisVoice 0x978b320] Language: sv-SE",
"[AVSpeechSynthesisVoice 0x978b010] Language: hu-HU",
"[AVSpeechSynthesisVoice 0x978b440] Language: zh-TW",
"[AVSpeechSynthesisVoice 0x978b490] Language: es-ES",
"[AVSpeechSynthesisVoice 0x978b4e0] Language: zh-CN",
"[AVSpeechSynthesisVoice 0x978b530] Language: nl-BE",
"[AVSpeechSynthesisVoice 0x978b580] Language: en-GB",
"[AVSpeechSynthesisVoice 0x978b5d0] Language: ar-SA",
"[AVSpeechSynthesisVoice 0x978b620] Language: ko-KR",
"[AVSpeechSynthesisVoice 0x978b670] Language: cs-CZ",
"[AVSpeechSynthesisVoice 0x978b6c0] Language: en-ZA",
"[AVSpeechSynthesisVoice 0x978aed0] Language: en-AU",
"[AVSpeechSynthesisVoice 0x978af20] Language: da-DK",
"[AVSpeechSynthesisVoice 0x978b810] Language: en-US",
"[AVSpeechSynthesisVoice 0x978b860] Language: en-IE",
"[AVSpeechSynthesisVoice 0x978b8b0] Language: hi-IN",
"[AVSpeechSynthesisVoice 0x978b900] Language: el-GR",
"[AVSpeechSynthesisVoice 0x978b950] Language: ja-JP"
[ios]ios tts的使用的更多相关文章
- [IOS]IOS UI指南
[IOS]IOS UI指南 众所周知,IOS的界面设计,越来越流行,可以说都形成了一个标准,搜集了一些资料,供自己以后学习使用! iOS Human Interface Guidelines (中文翻 ...
- iOS开发——TTS文本发音
iOS的文本转发音,从iOS7开始,iOS系统自带这个功能.能够实现中文.英文的发音.而且实现的起来非常方便.就像我看到有的博主说的三行代码搞定. (在iOS7之前(目前已不适配了),比如iOS6实现 ...
- iOS - iOS 应用
1.Xcode 项目属性 Product Name 软件名称.产品名称.项目名称 Organization Name 公司名称.组织名称 Organization Identifier 公司的唯一标识 ...
- iOS - iOS 适配
前言 什么是适配: 适应.兼容各种不同的情况. iOS 开发中,适配的常见种类: 1)系统适配, 针对不同版本的操作系统进行适配. 2)屏幕适配,针对不同大小的屏幕尺寸进行适配. iPhone 的尺寸 ...
- [ios]iOS 图形编程总结
转自:http://www.cocoachina.com/ios/20141104/10124.html iOS实现图形编程可以使用三种API(UIKIT.Core Graphics.OpenGL E ...
- [充电][ios]ios充电接口
知乎推荐:http://www.zhihu.com/topic/19693633/top-answers 外文教学网站: http://www.raywenderlich.com/ 著作权归作者所有. ...
- 【学习总结】OS X , IOS , IOS SDK , XCode之间的关系
几个基本的概念 : OS X : 属于桌面PC级别(IMac,MacPro等)对应安装的操作系统 IOS : 属于移动设备级别(Iphone,Ipad等)对应安装的操作系统 XCode: 是一个IDE ...
- iOS iOS与html进行交互
实现的 效果就是上边那样:首先通过webview 进行网络请求 然后进行显示. 然后点击下一页的按钮 通过js的响应显示另一个网页 最后通过下一页的按钮可以返回到首页. 本文仅仅是h5跟ios 的交互 ...
- 【Xamarin 开发 IOS --IOS ViewController生命周期】
ViewController ViewController是IOS开发中MVC模式中的C,ViewController是view的controller,ViewController的职责主要包括管理内 ...
随机推荐
- python的三种字符串格式化方法
1.最方便的 print 'hello %s and %s' % ('df', 'another df') 但是,有时候,我们有很多的参数要进行格式化,这个时候,一个一个一一对应就有点麻烦了,于是就有 ...
- 实现对多维数组按照某个键值排序的两种方法(array_multisort和array_sort)
实现对多维数组按照某个键值排序的两种解决方法(array_multisort和array_sort): 第一种:array_multisort()函数对多个数组或多维数组进行排序. //对数组$ ...
- 远程桌面时出现身份验证错误,要求的函数不正确,这可能是由于CredSSP加密Oracle修正
问题如下: 那么解决办法如下:
- 机器学习中的范数规则化 L0、L1与L2范数 核范数与规则项参数选择
http://blog.csdn.net/zouxy09/article/details/24971995 机器学习中的范数规则化之(一)L0.L1与L2范数 zouxy09@qq.com http: ...
- readyState与status
XMLHttpRequest对象(Ajax)的状态码(readystate) 当一个XMLHttpRequest初次创建时,这个属性的值是从0开始,知道接收完整的HTTP响应,这个值增加到4.有五种状 ...
- 论文笔记:语音情感识别(三)手工特征+CRNN
一:Emotion Recognition from Human Speech Using Temporal Information and Deep Learning(2018 InterSpeec ...
- js valueOf()函数用于返回指定对象的原始值
valueOf()函数用于返回指定对象的原始值. 该方法属于Object对象,由于所有的对象都"继承"了Object的对象实例,因此几乎所有的实例对象都可以使用该方法. 对象 返回 ...
- Linux基础命令---which
which 在环境变量PATH中搜索某个命令,返回命令的执行文件或者脚本位置,默认只显示第一个结果.这需要一个或多个参数.对于它的每个参数,它会打印出当在shell提示符下输入该参数时将执行的可执行文 ...
- [转载]论asp.net out、ref、return
论asp.net out.ref.return ref(引用类型) ref引用类型进出都必须赋值,赋值后会改变类型原来的指针. out(值类型) out值类型进可以不赋值,出必须赋值. r ...
- docker简单操作
下载镜像docker pull httpd(镜像名) 查看镜像:docker images 做容器 docker run -ti -v(映射)/www:发布目录的路径 -p 80:80 --name ...