首页
关于视觉癖
设计服务
热门主题
投稿通道
设计师入驻
设计师招聘
在线留言
联系我们

热门主题

当前位置:视觉癖 > 热门主题 >

text-to-speech(属性及用法)

发布时间:2021-02-01 14:23 所属分类:热门主题 浏览次数:
  text-to-speech
  TTS是TextToSpeech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话。
  它是同时运用语言学和心理学的杰出之作,在内置芯片的支撑之下,经过神经网络的设计,把文字智能地转化为天然语音流。TTS技术对文本文件进行实时转化,转化时刻之短能够秒核算。在其特有智能语音控制器作用下,文本输出的语音音律流通,使得听者在听取信息时感觉天然,毫无机器语音输出的冷酷与生涩感。TTS语音组成技术[1]行将覆盖国标一、二级汉字,具有英文接口,自动辨认中、英文,支撑中英文混读。所有声响采用真人普通话为规范发音,完成了120-150个汉字/分钟的快速语音组成,朗诵速度达3-4个汉字/秒,使用户能够听到明晰动听的音质和连接流通的语调。有少部分MP3随身听具有了TTS功能。
  TTS是语音组成使用的一种,它将储存于电脑中的文件,如帮助文件或者网页,转化成天然语音输出。TTS不仅能帮助有视觉妨碍的人阅读核算机上的信息,更能添加文本文档的可读性。TTS使用包含语音驱动的邮件以及声响敏感体系,并常与声响辨认程序一同使用。
  有很多TTS的产品,包含语音组成帮手,PDFMarkupCloud,PDF大师[2],ReadPlease2000,ProverbeSpeechUnit,以及NextUpTechnology的TextAloud。朗讯、Elan、以及AT&T都有自己的语音组成产品。
text-to-speech
  text-to-speech属性及用法
  TextToSpeech简称TTS,是Android1.6版本中比较重要的新功用。将所指定的文本转成不同言语音频输出。它能够便利的嵌入到游戏或许使用程序中,增强用户体会。
  在讲解TTSAPI和将这项功用使用到你的实际项目中的办法之前,先对这套TTS引擎有个初步的了解。
  对TTS资源的大体了解:
  TTSengine依托于当时AndroidPlatform所支撑的几种首要的言语:English、French、German、Italian和Spanish五大言语(暂时没有我们巨大的中文,至少Google的科学家们还没有把中文玩到登峰造极的地步,先易后难也是天经地义。)TTS能够将文本随意的转换成以上任意五种言语的语音输出。与此一起,关于单个的言语版本将取决于不同的时区,例如:关于English,在TTS中能够分别输出美式和英式两种不同的版本(由此看出Google的干事风格真够详尽,而正因为如此估量Google不参加中文的别的一种理由是中文的方言太多了)。
  能支撑如此巨大的数据量,TTS引擎关于资源的优化采取预加载的办法。根据一系列的参数信息(参数的用法将在后边有具体的介绍)从库中提取相应的资源,并加载到当时体系中。
  尽管当时大部分加载有Android操作体系的设备都经过这套引擎来供给TTS功用,但因为一些设备的存储空间非常有限而影响到TTS无法最大极限的发挥功用,算是当时的一个瓶颈。为此,开发小组引进了检测模块,让使用这项技术的使用程序或许游戏针关于不同的设备能够有相应的优化调整,从而防止因为此项功用的限制,影响到整个使用程序的使用。比较保险的做法是让用户自行挑选是否有足够的空间或许需求来加载此项资源,下边给出一个规范的检测办法:
  1.IntentcheckIntent=newIntent();
  2.checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
  3.startActivityForResult(checkIntent,MY_DATA_CHECK_CODE);
  假如当时体系允许创立一个“android.speech.tts.TextToSpeech”的Object,阐明现已供给TTS功用的支撑,将检测回来成果中给出“CHECK_VOICE_DATA_PASS”的符号。假如体系不支撑这项功用,那么用户能够挑选是否加载这项功用,从而让设备支撑输出多国言语的语音功用“Multi-lingualTalking”。“ACTION_INSTALL_TTS_DATA”intent将用户引进Androidmarket中的TTS下载界面。下载完结后将主动完结装置,下边是完结这一进程的完整代码(androidres.com):
text-to-speech属性及用法
  01.privateTextToSpeechmTts;
  02.protectedvoidonActivityResult(
  03.intrequestCode,intresultCode,Intentdata){
  04.if(requestCode==MY_DATA_CHECK_CODE){
  05.if(resultCode==TextToSpeech.Engine.CHECK_VOICE_DATA_PASS){
  06.//success,createtheTTSinstance
  07.mTts=newTextToSpeech(this,this);
  08.}else{
  09.//missingdata,installit
  10.IntentinstallIntent=newIntent();
  11.installIntent.setAction(
  12.TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
  13.startActivity(installIntent);
  14.}
  15.}
  16.}
  TextToSpeech实体和OnInitListener都需求引用当时Activity的Context作为结构参数。OnInitListener()的用途是告诉体系当时TTSEngine现已加载完结,并处于可用状况。
  根据需求设置言语参数:
  早在GoogleI/O大会上,官方给出了一段关于使用这项功用的鲜活体会,将翻译成果直接经过五种不同国家言语的语音输出。加载言语的办法非常简单:
  1.mTts.setLanguage(Locale.US);
  上边代码表明当时TTS实体加载美式英语。其参数并没有指示某种言语的称号,而是使用国家代码来表明,这样做的好处是不但能够确认言语的挑选,而且能够根据区域的不同而有所区别。例如:英语作为最广泛被使用的语种,在多个不同的区域都有必定的差别。判别当时体系是否支撑某个区域的言语资源,能够经过调用isLanguageAvailable()办法的回来值,根据回来值的描绘来挑选正确的处理办法。让使用某些绚丽功用的使用程序愈加健壮,这个是贯穿整个开发进程都要考虑的技术环节。下边是一些使用实例(androidres.com):
  1.mTts.isLanguageAvailable(Locale.UK))
  2.mTts.isLanguageAvailable(Locale.FRANCE))
  3.mTts.isLanguageAvailable(newLocale("spa","ESP")))
  假如回来值是“TextToSpeech.LANG_COUNTRY_AVAILABLE”阐明所挑选的区域被包含在当时TTS体系中。假如体系中现已创立了TTS实体,那么能够使用isLanguageAvailable()办法来代替Start“ACTION_CHECK_TTS_DATA”intent检测。当无法找到任何可用资源匹配所指定的参数时,将会回来“TextToSpeech.LANG_MISSING_DATA”的成果。下边给出别的两个回来其它不同状况信息的比如:
  1.mTts.isLanguageAvailable(Locale.CANADA_FRENCH))
  2.mTts.isLanguageAvailable(newLocale("spa"))
  两个句子的回来值均为“TextToSpeech.LANG_AVAILABLE”。第一个是检测当时体系是否支撑加拿大法语,因为体系在资源库中无法找到这个区域的法语分支,其意义是仅支撑这项言语(法语),而不支撑当时区域的言语分支。
  别的,比较于上面强制用户使用预订的语音设置,愈加发起使用Locale.getDefault()办法根据用户默认的区域设置来挑选合适的言语库。
  履行Speak的具体办法:
  根据上边的介绍,基本完结了TextToSpeech的初始化和参数配置。下面是一个有关闹钟的使用实例,使用Speak()办法能够直接在使用程序中发挥强壮的语音功用。没错,用起来就是这么简单:
  1.StringmyText1="ThisTranslationisfromandroidRes.com";
  2.StringmyText2="Ihopeso,becauseit'stimetowakeup.";
  3.mTts.speak(myText1,TextToSpeech.QUEUE_FLUSH,null);
  4.mTts.speak(myText2,TextToSpeech.QUEUE_ADD,null);
  TTSEngine的作业原理:
  每个独立的使用程序都能够独自创立一个TTS实体,而他们需求履行的语音消息列队(Queue)都统一由TTSEngine办理和语音组成。
  名词解释:
  synthesize[?s?nθ?sa?z]DJ['s?nθ??sa?z]KK:toproducesounds,musicorspeechusingelectronicequipment(音响)组成
  utterances[??t?r?ns]DJ[??t?r?ns]KK:说话办法,语音/语调。
  每个独立的TTS实例办理语音消息列队请求的优先级和顺序等。当引用“TextToSpeech.QUEUE_FLUSH”调用Speak()办法时,会中断当时实例正在运转的使命(也能够理解为清除当时语音使命,转而履行新的列队使命)。引用“TextToSpeech.QUEUE_ADD”标签的发音使命将被添加到当时使命列队之后。
  为语音使命相关StreamType:
  在Android操作体系中所有的AudioStream使命都是经过AudioManager类来完结,而它会针对不同的StreamType来改动语音的播映形式。StreamType能够理解为语音的播映特点,这个特点是用户根据自己的需求在体系中配置的使用方案。假如将语音使命都清楚的分门别类,能够便利的统一办理相同类别使命的特点。根据上一个AlarmClock比如的基础上,将Speak()办法的最后一个Null参数替换成具有实际意义的数值。这个参数的类型是HashMap,假如希望将当时的StreamType设置为体系中Alarm类型,对上一个比如稍作改动:
  1.HashMapmyHashAlarm=newHashMap();
  2.myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM,
  3.String.valueOf(AudioManager.STREAM_ALARM));
  4.mTts.speak(myText1,TextToSpeech.QUEUE_FLUSH,myHashAlarm);
  5.mTts.speak(myText2,TextToSpeech.QUEUE_ADD,myHashAlarm);
  使用语音功用的CompletionCallback:
  TTS中的Speak()的是异步调用,无论使用QUEUE_FLUSH或许QUEUE_ADD作为参数都能够经过界说Listener监听当时使命的完结状况。能够使用这个办法追加Speak()履行之后的一些额定操作。下接下来的比如中,当完结第2次Speak()办法调用之后,使用OnUtteranceCompletedListener接口来调用其它办法:
  1.mTts.setOnUtteranceCompletedListener(this);
  2.myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM,
  3.String.valueOf(AudioManager.STREAM_ALARM));
  4.mTts.speak(myText1,TextToSpeech.QUEUE_FLUSH,myHashAlarm);
  5.myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,
  6."endofwakeupmessageID");
  7.//myHashAlarmnowcontainstwooptionalparameters
  8.mTts.speak(myText2,TextToSpeech.QUEUE_ADD,myHashAlarm);
  下边是界说Listener的代码,相似与监听按钮或许其它ViewEvents的办法。在这里将会把Speak()中HashMap参数传进Listener中,作为条件的判别根据:
  1.publicvoidonUtteranceCompleted(StringuttId){
  2.if(uttId=="endofwakeupmessageID"){
  3.playAnnoyingMusic();
  4.}
  5.}
  “烘焙”当时实时的语音数据:
  看到烘焙两个字,就会让人联想到香馥馥的面包。软件开发要关注于是否能够最大极限的完结资源的复用,特别是针对资源有限的手机使用渠道。那么关于TTS这么奢侈的使用怎么才能更高效的使用资源呢?这次一起来体会比烘焙面包愈加让人激动的功用,将TTSEngine输出的AudioStream作为永久的音频文件保存在当时的存储空间中(SDCard)。这样能够对需求重复播映的某些语音内容完结快速的回放功用,从而完结国际倡导的“减排”意图,能省就省吧!在下边的比如用经过TTS的synthesizeToFile办法,将组成的语音Stream保存在参数所指定的地址中。
  1.HashMapmyHashRender=newHashMap();
  2.StringwakeUpText="Areyouupyet?";
  3.StringdestFileName="/sdcard/myAppCache/wakeUp.wav";
  4.myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,wakeUpText);
  5.mTts.synthesizeToFile(wakuUpText,myHashRender,destFileName);
  当完结以上操作之后会收到体系的完结告诉,一起能够像其它音频资源一样,经过android.media.MediaPlayer办法来播映。但这有悖于TextToSpeech的使用流程,能够将刚刚输出的语音资源经过addSpeech()的办法将其语音和文字描绘一起存储于TTS库中。
  1.mTts.addSpeech(wakeUpText,destFileName);
  在当时的TTSInstance中,任何使用Speak()办法履行相同内容的调用都将复用刚刚所生成的音频文件。假如资源丢掉或许SDCard等存储设备移除,那么体系将再次经过TTSEngine组成所指定的语音内容。
  1.mTts.speak(wakeUpText,TextToSpeech.QUEUE_ADD,myHashAlarm);
  回收TTS:
  当确认使用程序不再需求TTS的相关功用后,能够在Activity的OnDestroy()办法中调用shutDown()开释当时TTS实体所占用的资源。
  杂谈:
  想必在你的脑袋中现已冒出很多能够很好使用这个功用的Idea!那么现在就停止幻想,开端付诸于行动吧!无论是给手机用户带来便利,或是提升游戏体会等。Let’smove!
作品标签: text-to-speech

评论列表(共104人参与)参与讨论或分享设计作品获得视觉癖积分奖励

用户头像图片
    面前,不拍注册会员
    2021-02-01 10:18:27

    物建立系统和纹路制造东西包,可以经过mentalray软件无限自在的烘托。3dmax2010因其随时可以运用的根据模板的人物建立系统、强大的建模和纹路制造东西包以及经过集成的men用了Metro规划。 今后的微软产品中将更多的能看到Metro的影

    回复
用户头像图片
    好? 许注册会员
    2021-02-01 9:4:7

    v> 二、室内楼梯的宽度 梯段宽度一般由通行人流来决议,以确保通行顺利为原则。单人通行的梯段宽度一般应为800-900text-to-speech(属性及用以极简、亲和心爱的形象变化去招引年轻化、个性化的消费集体,提。。。

      用户头像图片
        图形用户注册会员
        2021-02-01 14:24:53

        @好? 许:text-to-speech(属性 400px;" /> 4.普通的日子,因为有你而精彩。 5.一人,一屋,一狗,足以。 ~~~

    回复
用户头像图片
    尔滨当地互联游客
    2021-02-01 21:37:4

    游客80023:text-to-speech(属oads/allimg/210207/1-21020F94R3.jpg" style="height: 300px; width: 400px;" /> 标志性标志便写店肆的主营类目、店肆的称号、上传店肆Logo。 挑选主营类目:请依据实际运营类目【主营类目】,最多三个(注意不要只选&ldq

    回复
用户头像图片
    ,才智农注册会员
    2021-02-01 22:7:38

    ,毫无机器语音输出的冷酷与生涩感。TTS语音组成技术[1]行将覆盖国标一、二级汉字,具有英文接口,自规划师AdrianFreudiger被聘请去为巴黎戴高乐机场规划标识。虽然Adrian现已规划出一套成功的字体族Univers,可是他仍然决定为此专门规划一套全

    回复