• [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与流量的情况下也可以使用了,就拿来试用一下,官方文档在此:苹果官方文档

    使用非常简单,代码就这么几行:

    1. AVSpeechUtterance *utterance = [AVSpeechUtterance  
    2.                                     speechUtteranceWithString:@"hello world"];  
    3.     AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc] init];  
    4.     [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"

  • 相关阅读:
    微信小程序wx.request请求用POST后台得不到传递数据
    小程序的movable-view怎么持续移动
    当inline-block或者float失效的时候怎么弄
    js中如何删除json对象的某一个选项
    情非得已
    框架变量的问题
    隐式等待写法__和显示等待对比问题___及误区
    显式等待大结局___封装成API方便控制层调用
    显式等待第二集____灵活写法__
    显式等待__第一集___追加了误区
  • 原文地址:https://www.cnblogs.com/lyggqm/p/4800064.html
Copyright © 2020-2023  润新知