博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java文本语音转换组件JTTS发布(eSpeak封装)
阅读量:2200 次
发布时间:2019-05-03

本文共 3095 字,大约阅读时间需要 10 分钟。

分享一下我老师大神的人工智能教程!零基础,通俗易懂!

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

下载地址:(含示例与源码,目前仅提供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项目地址如下:):
eSpeak是一款紧凑的开放源码软件的语音合成器,允许自行编辑与修改词库,算得上是一个性价比合理的开源TTS解决方案。它支持包括中文(含粤语)在内的多种语言(可惜标准中文词库与扩展词库都不全,发音也不太好听,想实用自己慢慢改吧,反正是开源的……),能够跨平台运行于Linux和Windows之上(需要分别编译)。值得一提的是,Google Android中所使用的TTS引擎,也是eSpeak。在如下地址:,可以下载到Android版的eSpeak封装项目。
关于jtts:
事实上,jtts只是将eSpeak进行简单封装后的“马甲引擎”(很奇怪,此前为什么没人发java版的封装,连php,python,ruby版的都有……),使用方法基本与eSpeak相同,不过具体实现却更为简单,也更方便对于C/C++不太熟悉的朋友们使用。
目前已封装eSpeak接口如下(未来有时间的话(目前业余以开发LGame为主),我会陆续添加更多的接口到jtts中,并逐渐扩展应用):
   

[java]
  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();   
static native int initialize(String path);    static native void synth(String text);    static native void setVoice(int gender, int age);    static native void setRate(int value);    static native int setWordgap(int value);    static native int setCapitals(int value);    static native void setVolume(int value);    static native void setPitch(int value);    static native String[] listVoiceNames();    static native void setVoiceByName(String voiceName);    static native void cancel();    static native boolean isPlaying();    static native void synchronize();    static native void terminate();    static native String info(); 
jtts基本使用示例如下:
[java]
  1. JTTS jtts = Engine.getTTS();  
  2.      jtts.setLanguage("zh");  
  3.      jtts.speak("吃葡萄不吐葡萄皮,不吃葡萄倒吐葡萄皮。");  
  4.      jtts.synchronize();  
  5.      jtts.speak("我是未婚男青年,别管我要压岁钱。");  
JTTS jtts = Engine.getTTS();     jtts.setLanguage("zh");     jtts.speak("吃葡萄不吐葡萄皮,不吃葡萄倒吐葡萄皮。");     jtts.synchronize();     jtts.speak("我是未婚男青年,别管我要压岁钱。");
下面是一个基于jtts的示例截图:

 

00

下载地址:(含示例与源码,目前仅提供dll封装
————————————
好吧,吾辈承认是想给看小说不能坚持看完全文的家伙们写个朗读工具……现在只是开端……

 

 

 

           

给我老师的人工智能教程打call!

这里写图片描述
你可能感兴趣的文章
夯实Java基础系列4:一文了解final关键字的特性、使用方法,以及实现原理
查看>>
Java 未来行情到底如何,来看看各界人士是怎么说的
查看>>
IntelliJ 平台 2020 年路线图
查看>>
走进JavaWeb技术世界8:浅析Tomcat9请求处理流程与启动部署过程
查看>>
微软宣布加入 OpenJDK,打不过就改变 Java 未来!
查看>>
MyBatis动态SQL(认真看看, 以后写SQL就爽多了)
查看>>
为什么强烈推荐 Java 程序员使用 Google Guava 编程!
查看>>
先搞清楚这些问题,简历上再写你熟悉Java!
查看>>
【数据库】关系数据库和非关系数据库的优缺点
查看>>
【数据结构】动态顺序表
查看>>
Markdown的基础使用
查看>>
Linux基础命令
查看>>
【C语言】交换两个数值的三种方法
查看>>
【数据结构】栈的简单理解以及对栈的基本操作
查看>>
【数据结构】简单不带环迷宫的实现(用栈实现)
查看>>
【C语言】简单的了解递归(求斐波那契,n的阶乘,字符串长度,把一个整型(无符号),转化为字符型并打印出来)
查看>>
【数据结构】动态栈的实现
查看>>
【数据结构】简单的迷宫(用递归实现)
查看>>
【数据结构】队列的基本认识和队列的基本操作
查看>>
【数据结构】循环队列的认识和基本操作
查看>>