Java文本语音转换组件JTTS发布

来源:互联网 发布:windows欢迎界面 编辑:程序博客网 时间:2024/05/01 06:50
Java文本语音转换组件JTTS发布
标签: javatts引擎androidgoogle语言
3664人阅读 评论(11)收藏举报
本文章已收录于:
分类:
作者同类文章X

    下载地址:http://greenvm.googlecode.com/files/JTTSEngine.7z (含示例与源码,目前仅提供dll封装)

     

    众所周知,所谓TTS即Text To Speech的英文缩写,也就是“从文本转换到语音”。

    TTS技术的主要作用在于利用计算机合成人语,并将文字信息转化为语音信息进行播放。简单点说,TTS技术赋予了计算机“开口说人话”的能力。

    作为一项历史悠久的计算机技术,TTS的应用领域可谓非常之广阔。不但可以用来阅读电子邮件,进行IVR系统(Interactive Voice Response)的语音提示,也可以很方便的嵌入到游戏或者其它类型的应用程序当中,增强用户体验。尤其重要的是,在某些无法够获得详细文字咨询的场合(譬如声讯台或者盲人服务),TTS技术具有其它技术无法替代的关键作用。

    针对于TTS需求所要实现的功能,主要包含如下几个部分: 

    1、文本分析:对输入文本进行语言学分析,逐句进行词汇的、语法的和语义的分析,以确定句子的低层结构和每个字的音素的组成,包括文本的断句、字词切分、多音字的处理、数字的处理、缩略语的处理等。

    2、语音合成:把处理好的文本所对应的单字或短语从语音合成库中提取,把语言学描述转化成言语波形。

    3、韵律处理:用以控制语音合成系统所输出的语音的质量,一般可从清晰度、自然度和连贯性等方面进行主观评价。

    但是,即便上述所讲从纯技术角度来说并不很难,开发TTS引擎仍然是件非常让人头痛的事情。

    因为除去核心架构的开发之外,TTS应用还存在有大量针对具体文字、词组、固定语句的采样、归类、矫正的工作要做,否则就无法满足其“拟人”的最基本需求。从某种意义上讲,这些非常耗时的重复性工作,其本质似乎更贴近体力劳动,而非严格意义上的技术领域。因此,对于TTS引擎的制造者而言,所需付出的体力劳动强度,将远远超出脑力劳动所应付出的代价(如果不是这样,那些收费TTS引擎的开发商都要饿死了……)。

    万幸的是,我们生活在一个越来越倾向开源的国际大环境下,即使你一字不动,一笔不写,也有数之不尽的现成轮子可供驱策,并不一定要花钱购买昂贵的商业引擎,也不必皓首穷经的自己从头写起。

    比如本次发布的Java版TTS组件JTTS,就是基于著名开源TTS组件eSpeak封装而来。(吾辈并没狂妄(有瘾)到想要(能够)独立开发TTS引擎的境界,所以效法Google对eSpeak进行jni封装……)

    关于eSpeak(eSpeak项目地址如下:http://espeak.sourceforge.net ): 

    eSpeak是一款紧凑的开放源码软件的语音合成器,允许自行编辑与修改词库,算得上是一个性价比合理的开源TTS解决方案。它支持包括中文(含粤语)在内的多种语言(可惜标准中文词库与扩展词库都不全,发音也不太好听,想实用自己慢慢改吧,反正是开源的……),能够跨平台运行于Linux和Windows之上(需要分别编译)。值得一提的是,Google Android中所使用的TTS引擎,也是eSpeak。在如下地址:http://eyes-free.googlecode.com,可以下载到Android版的eSpeak封装项目。

    关于jtts: 

    事实上,jtts只是将eSpeak进行简单封装后的“马甲引擎”(很奇怪,此前为什么没人发java版的封装,连php,python,ruby版的都有……),使用方法基本与eSpeak相同,不过具体实现却更为简单,也更方便对于C/C++不太熟悉的朋友们使用。

    目前已封装eSpeak接口如下(未来有时间的话(目前业余以开发LGame为主),我会陆续添加更多的接口到jtts中,并逐渐扩展应用):

       

    [java] view plaincopy
    1. static native int initialize(String path);  
    2.     static native void synth(String text);  
    3.     static native void setVoice(int gender, int age);  
    4.     static native void setRate(int value);  
    5.     static native int setWordgap(int value);  
    6.     static native int setCapitals(int value);  
    7.     static native void setVolume(int value);  
    8.     static native void setPitch(int value);  
    9.     static native String[] listVoiceNames();  
    10.     static native void setVoiceByName(String voiceName);  
    11.     static native void cancel();  
    12.     static native boolean isPlaying();  
    13.     static native void synchronize();  
    14.     static native void terminate();  
    15.     static native String info();   


    jtts基本使用示例如下:

    [java] view plaincopy
    1. JTTS jtts = Engine.getTTS();  
    2.      jtts.setLanguage("zh");  
    3.      jtts.speak("吃葡萄不吐葡萄皮,不吃葡萄倒吐葡萄皮。");  
    4.      jtts.synchronize();  
    5.      jtts.speak("我是未婚男青年,别管我要压岁钱。");  


    下面是一个基于jtts的示例截图:

     




    下载地址:http://greenvm.googlecode.com/files/JTTSEngine.7z ( 含示例与源码,目前仅提供dll封装 


    1
    0


    0 0
    原创粉丝点击