语音引擎java(语音引擎哪个好)

今天给各位分享语音引擎java的知识,其中也会对语音引擎哪个好进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、文本转语音MP3,JAVA怎么实现,用什么技术2、Firefox里面哪些插件需要安装?多了速度慢:哪些比较有用和必要?3、求教:javaWeb,添加语音输入的功能实现方法4、在java怎么调用julius做语音识别啊?求接口代码5、在java程序中加入语音功能,例如给段字符串“A101”,就能发出声音,请大家帮帮忙,谢谢6、java使用freeTTS,怎么能让机器输出中文语言

文本转语音MP3,JAVA怎么实现,用什么技术

文本转换语音可以用框架+语音引擎来实现,mp3转语音只需安装个插件

Firefox里面哪些插件需要安装?多了速度慢:哪些比较有用和必要?

你好,1.firefox不是ie核心,即使说firefox与windows不会有很大关联,即使firefox崩溃了也不会牵连系统,这就是firefox很安全的原因;

2.它属于web 2.0的浏览器,支持rss,当然还有ipv6;

3.所有maxthon有的功能他都有,没有的也有,因为它的插件很多,如此强的原因也很简单,maxthon都是学的firefox,而且ie7也越发像firefox了,你可以下载firefox 1.5来当作ie7感受一下;

4。ie已被firefox击败,最新的ie7里面的rss图标简直用的firefox;

5,这也是firefox成名的原因,它速度很快,比ie快上1~2倍;

当然也有缺点,大多网页都是ie标准,因此有些网也不能正常显示,但此问题可以使用插件ie tab解决;另外启动慢(楼下说的),这是插件造成的,也可以用插件解决(fasterfox)。

插件包括:

adblock :能够根据过滤词来阻止显示网页上的广告,装好后会在”工具”菜单中生成一个子菜单项,在里面进行过滤 的设定。

anidisable :现在不少网站上都使用了大量的动画GIF文件,有时候真的叫人看得头都晕了,而这个插件则在右�说ブ猩�梢桓鲎硬说ハ睢D憧?以在里面设置这些图片是显示还是不显示,还可以选择动画只显示一次。实在是个好东西。

autofill:一个帮你自动填表的插件,你把你的个人信息填在里面以后,他就可以帮助你自动地对网页中的字段进行填充。当然 现在还没有完全十全十美的填表软件,这个插件可以将它能自动填充的项目以你指定的样式显示出来。

autohide:喜欢全屏浏览的朋友有福了,通过这个插件让你可以在全屏浏览时,指定菜单,工具条和状态栏是否显示。非常方便 。

close-tab-on-dblclick:双击标签以关闭标签页。现在的Tab浏览插件基本上都支持这个功能了,似乎有点多 余了。

compact:可以定制Firefox的菜单项哪些显示哪些不显示,你甚至可以用一个图标来代替菜单,点击这个图标,你会发现 Firefox系统菜单成了这个工具按钮的弹出菜单了。

copyplaintext:将你选择的网页内容复制成纯文本放在剪贴板中。需要大量摘引用网页内容的朋友,赶快笑吧。

cuneAform2-WYSIWYG:这也是个非常Cool的插件,它为你提供了一个所见即所得的HTML文本编辑器,比Fi refox中文论坛的编辑器强大多了,你可以在这个编辑器中编辑复杂点的Html内容,然后直接复制粘贴到发帖区就OK了。

cutemenus04:是不是觉得Firefox的右键菜单很单调?这个插件能够给你的右键菜单加上图标。

Download_Sort_2.0.3:能够根据你下载的文件的扩展名不同而将其放置到不同的目录中。

Download_Statusbar:能够在一个自动隐含的状态条里面显示下载信息。

fireftp:Firefox的FTP插件,但是我还是觉得不怎么好用,玩玩还是不错的。

flashblock:屏蔽掉网页中的Flash,在原来显示Falsh的地方显示一个按钮,只有当你点击这个按钮的时候Fal sh才会播放。一个非常有用的东西。

flashgot:可以用你指定的软件来打开网页中的链接。

FoxyVoice:可以用微软的语音引擎来朗读网页,可惜不支持中文朗读。。。。。

gm-notifier:Gmail邮件通知,不用去Google的页面就可以知道你的邮箱里面是不是有新邮件。

ieview:可以选择用IE来打开选中的页面。

imagetoolbar:鼠标停在图片上面时,在图片左上方显示一个Toolbar,可以进行保存复制该图片等操作。

Imagezoom:在图片右键菜单中增加项目,你可以调整该图片的显示大小。

inforss:可以显示RSS的信息。

jslib_current:js库插件,有不少插件都要依靠他才能正常运行。

maf:这个插件可以让你保存网页的时候像IE一样可以只保存成一个mht文档,而且它还提供maff和ZIP maff格式供你选择。

magpie:这个插件干什么用的忘了,以后想起来了再补上。

menuedit:可以允许你编辑你的右键菜单

minimizetotray:让Firefox在最小化的时候从任务栏上隐藏到系统托盘区域里。

mozgest:忘了,想起来再写。

moztweaks:自动隐藏Sidebar

prefbar:这个真的是我要对你强力推荐的强力插件,它给你提供一个文本的工具条,在这个工具条里面你可以随做许多意想不到 的事情。当你打开设置再一看的时候,你才会发现原来他能做的事情还隐藏了这么多在这里!!!

QuickNote:这个也是一个及其好用的插件,安装后生成一个工具栏按钮,可以给你提供一个方便的随手贴,你还可以将你在网 页上选择的内容发送到QuickNote里面,并且可以加上链接页面的名字。

ReloadEvery:可以选择定时重载某个页面。

Sage:这个就不多说了,可以将你的Firefox扩展成一个强大的RSS聚合新闻阅读器。

Searchstatus:可以在状态栏里显示你当前所浏览页面的PageRank和Aleax评分。

ShowScreencap:显示某个链接的Google的页面快照。

SuperDrag:你可以通过拖动一个链接来打开一个网页。

SwitchProxy:提供快速交换代理的功能,再也不用辛辛苦苦跑到Option里面去改了,你可以设定若干个常用的代理, 然后在状态栏里轻松点击即时切换。教育网和经常上国外网站的朋友有福了。

TabClickingoptions:可以设定在Tab标签条上的鼠标点击事件,单击双击,左键右键中键都可以自由设定。

TabExtensions:不多说了,方便的Tab浏览插件。

Tabprefs:另一个Tab浏览插件的选择。

tabX:可以在Tab标签条上加一个关闭按钮。

titletweak:可以自由设定Firefox的标题。

tongwen:可以指定中文页面在简体和繁体之间切换。

tweak:调整许多Firefox的内部隐藏网络设置,可以大幅度提高对某些网站的浏览速度。

undoclodetab:重新打开关闭的标签页。不用怕误关页面了。

Weatherfox:显示你所在城市的天气信息,非常好用而且准确。选定城市时记得输入拼音,比如成都就要输入chengdu ,china。

到这里自己选:

25583希望对你有帮助!

求教:javaWeb,添加语音输入的功能实现方法

[javascript] view plain copy print?

button ng-click=”startRecognize()”

i class=”icon ion-mic-a ” /i

/button

//语音识别

$rootScope.startRecognize = function() {

var speech;

var options = {}; //语音识别参数,用于控制语音引擎的各种技术参数

options.engine = ‘iFly’;

options.userInterface = ‘false’;

text = “”;

plus.speech.startRecognize(options, function(s) {

text += s;

console.log(text);

text = text.replace(‘,’, ”).replace(‘。’, ”).replace(‘?’, ”);

$scope.$apply(function() {

$rootScope.medname= text;

$scope.searchMed(2, $rootScope.medname)

});

}, function(e) {

$ionicLoading.show({

template: “语音输入失败,请重新尝试”

});

setTimeout(function() {

$ionicLoading.hide();

}, 2000);

});

setTimeout(function() {

plus.speech.stopRecognize();

}, 10000); //超时语音结束

}

其中涉及到使用ionic框架中的按钮组件。

其云端打包授权功能需要到第三方开发平台申请应用后获取相关配置参数。集成过程与微信授权认证差不多。

添加第三方登录模块

可视化界面配置

首先是需要添加第三方登录模块,双击应用的manifest.json文件:

切换到“模块权限配置”项,在“未选模块”中选择“Speech(语音输入)”添加到“已选模块”:

代码视图配置

切换到“代码视图”项,在permissions节点下添加如下Speech节点数据:

“Speech”: {“description”: “语音输入”}

效果如下所示:

        

(说明:点击“语音输入按钮”后,弹出录音识别界面,在说出“感冒”一词后将识别出的文字填充在输入栏中,同时搜索相关药品,搜索结果如上图右所示。)

优化

优化点主要存在两个地方:

1.icon图标过于丑陋

2.将语音输入icon集成进input输入栏,如下图所示(UC Browser):

3.存在版本兼容问题。有些手机不支持此插件。

首先第一个问题属于美工干的活。但自己似乎应该给其预留出应有的填补空间才对。优化后的效果如下图所示(感觉还是很丑):

第二个问题,解决起来似乎有一定的难度。自己只能够慢慢摸索。

第三个问题暂时得不到解决。

附:button设置图片

[html] view plain copy print?

button style=”width:40px; height:38px; white-space: normal; padding:12px; padding-left:20px; background:none; background: url(img/btnbg.png) no-repeat -2px -2px;” ng-click=”startRecognize()”

!–i class=”icon ion-mic-a ” /i–

/button

在java怎么调用julius做语音识别啊?求接口代码

package com.cnblogs.htynkn;

import com.sun.jna.Library;

import com.sun.jna.Native;

import com.sun.jna.Pointer;

import com.sun.jna.ptr.IntByReference;

public interface QTSR extends Library {

QTSR INSTANCE = (QTSR) Native.loadLibrary(“msc”, QTSR.class);

/**

* 初始化MSC的ISR部分

*

* @param configs

* 初始化时传入的字符串,以指定合成用到的一些配置参数,各个参数以“参数名=参数值”的形式出现,大小写不敏感,不同的参数之间以“

* ,”或“\n”隔开,不设置任何值时可以传入NULL或空串:

* @return 如果函数调用成功返回MSP_SUCCESS,否则返回错误代码,错误代码参见msp_errors

*/

public int QISRInit(String configs);

/**

* 开始一个ISR会话

*

* @param grammarList

* uri-list格式的语法,可以是一个语法文件的URL或者一个引擎内置语法列表。可以同时指定多个语法,不同的语法之间以“,”

* 隔开。进行语音听写时不需要语法,此参数设定为NULL或空串即可;进行语音识别时则需要语法,语法可以在此参数中指定,

* 也可以随后调用QISRGrammarActivate指定识别所用的语法。

* @param params

* 本路ISR会话使用的参数,可设置的参数及其取值范围请参考《可设置参数列表_MSP20.xls》,各个参数以“参数名=参数值”

* 的形式出现,不同的参数之间以“,”或者“\n”隔开。

* @param errorCode

* 如果函数调用成功则其值为MSP_SUCCESS,否则返回错误代码,错误代码参见msp_errors。几个主要的返回值:

* MSP_ERROR_NOT_INIT 未初始化 MSP_ERROR_INVALID_PARA 无效的参数

* MSP_ERROR_NO_LICENSE 开始一路会话失败

* @return MSC为本路会话建立的ID,用来唯一的标识本路会话,供以后调用其他函数时使用。函数调用失败则会返回NULL。

*/

public String QISRSessionBegin(String grammarList, String params,

IntByReference errorCode);

/**

* 传入语法

*

* @param sessionID

* 由QISRSessionBegin返回过来的会话ID。

* @param grammar

* 语法字符串

* @param type

* 语法类型,可以是uri-list、abnf、xml等

* @param weight

* 本次传入语法的权重,本参数在MSP 2.0中会被忽略。

* @return 如果函数调用成功返回MSP_SUCCESS,否则返回错误代码,错误代码参见msp_errors

*/

public int QISRGrammarActivate(String sessionID, String grammar,

String type, int weight);

/**

* 写入用来识别的语音

*

* @param sessionID

* 由QISRSessionBegin返回过来的会话ID。

* @param waveData

* 音频数据缓冲区起始地址

* @param waveLen

* 音频数据长度,其大小不能超过设定的max_audio_size

* @param audioStatus

* 用来指明用户本次识别的音频是否发送完毕,可能值如下:

* MSP_AUDIO_SAMPLE_FIRST = 1 第一块音频

* MSP_AUDIO_SAMPLE_CONTINUE = 2 还有后继音频

* MSP_AUDIO_SAMPLE_LAST = 4 最后一块音频

* @param epStatus

* 端点检测(End-point detected)器所处的状态,可能的值如下:

* MSP _EP_LOOKING_FOR_SPEECH = 0 还没有检测到音频的前端点。

* MSP _EP_IN_SPEECH = 1 已经检测到了音频前端点,正在进行正常的音频处理。

* MSP _EP_AFTER_SPEECH = 3 检测到音频的后端点,后继的音频会被MSC忽略。

* MSP _EP_TIMEOUT = 4 超时。

* MSP _EP_ERROR= 5 出现错误。

* MSP _EP_MAX_SPEECH = 6 音频过大。

* @param recogStatus

* 识别器所处的状态

* @return

*/

public int QISRAudioWrite(String sessionID, Pointer waveData, int waveLen,

int audioStatus, IntByReference epStatus, IntByReference recogStatus);

/**

* 获取识别结果

*

* @param sessionID 由QISRSessionBegin返回过来的会话ID。

* @param rsltStatus 识别结果的状态,其取值范围和含义请参考QISRAudioWrite的参数recogStatus

* @param waitTime 与服务器交互的间隔时间,可以控制和服务器的交互频度。单位为ms,建议取值为5000。

* @param errorCode 如果函数调用成功返回MSP_SUCCESS,否则返回错误代码,错误代码参见msp_errors

* @return 函数执行成功并且获取到识别结果时返回识别结果,函数执行成功没有获取到识别结果时返回NULL

*/

public String QISRGetResult(String sessionID, IntByReference rsltStatus,

int waitTime, IntByReference errorCode);

/**

* 结束一路会话

*

* @param sessionID 由QISRSessionBegin返回过来的会话ID。

* @param hints 结束本次会话的原因描述,用于记录日志,便于用户查阅或者跟踪某些问题。

* @return

*/

public int QISRSessionEnd(String sessionID, String hints);

/**

* 获取与识别交互相关的参数

*

* @param sessionID 由QISRSessionBegin返回过来的会话ID。

* @param paramName 要获取的参数名称;支持同时查询多个参数,查询多个参数时,参数名称按“,” 或“\n”分隔开来。

* @param paramValue 获取的参数值,以字符串形式返回;查询多个参数时,参数值之间以“;”分开,不支持的参数将返回空的值。

* @param valueLen 参数值的长度。

* @return

*/

public int QISRGetParam(String sessionID, String paramName,

String paramValue, IntByReference valueLen);

/**

* 逆初始化MSC的ISR部分

*

* @return

*/

public int QISRFini();

}

*Msp_errors

?

package com.cnblogs.htynkn;

import com.sun.jna.win32.StdCallLibrary;

public interface Msp_errors extends StdCallLibrary {

public static final int MSP_SUCCESS = 0;

public static final int ERROR_FAIL = -1;

public static final int ERROR_EXCEPTION= -2;

public static final int ERROR_GENERAL= 10100; /* 0x2774 */

public static final int ERROR_OUT_OF_MEMORY= 10101; /* 0x2775 */

public static final int ERROR_FILE_NOT_FOUND= 10102; /* 0x2776 */

public static final int ERROR_NOT_SUPPORT= 10103; /* 0x2777 */

public static final int ERROR_NOT_IMPLEMENT= 10104; /* 0x2778 */

public static final int ERROR_ACCESS= 10105; /* 0x2779 */

public static final int ERROR_INVALID_PARA= 10106; /* 0x277A */

public static final int ERROR_INVALID_PARA_VALUE= 10107; /* 0x277B */

public static final int ERROR_INVALID_HANDLE= 10108; /* 0x277C */

public static final int ERROR_INVALID_DATA= 10109; /* 0x277D */

public static final int ERROR_NO_LICENSE= 10110; /* 0x277E */

public static final int ERROR_NOT_INIT= 10111; /* 0x277F */

public static final int ERROR_NULL_HANDLE= 10112; /* 0x2780 */

public static final int ERROR_OVERFLOW= 10113; /* 0x2781 */

public static final int ERROR_TIME_OUT= 10114; /* 0x2782 */

public static final int ERROR_OPEN_FILE= 10115; /* 0x2783 */

public static final int ERROR_NOT_FOUND= 10116; /* 0x2784 */

public static final int ERROR_NO_ENOUGH_BUFFER= 10117; /* 0x2785 */

public static final int ERROR_NO_DATA= 10118; /* 0x2786 */

public static final int ERROR_NO_MORE_DATA= 10119; /* 0x2787 */

public static final int ERROR_NO_RESPONSE_DATA= 10120; /* 0x2788 */

public static final int ERROR_ALREADY_EXIST= 10121; /* 0x2789 */

public static final int ERROR_LOAD_MODULE= 10122; /* 0x278A */

public static final int ERROR_BUSY = 10123; /* 0x278B */

public static final int ERROR_INVALID_CONFIG= 10124; /* 0x278C */

public static final int ERROR_VERSION_CHECK= 10125; /* 0x278D */

public static final int ERROR_CANCELED= 10126; /* 0x278E */

public static final int ERROR_INVALID_MEDIA_TYPE= 10127; /* 0x278F */

public static final int ERROR_CONFIG_INITIALIZE= 10128; /* 0x2790 */

public static final int ERROR_CREATE_HANDLE= 10129; /* 0x2791 */

public static final int ERROR_CODING_LIB_NOT_LOAD= 10130; /* 0x2792 */

/* Error codes of network 10200(0x27D8)*/

public static final int ERROR_NET_GENERAL= 10200; /* 0x27D8 */

public static final int ERROR_NET_OPENSOCK= 10201; /* 0x27D9 */ /* Open socket */

public static final int ERROR_NET_CONNECTSOCK= 10202; /* 0x27DA */ /* Connect socket */

public static final int ERROR_NET_ACCEPTSOCK = 10203; /* 0x27DB */ /* Accept socket */

public static final int ERROR_NET_SENDSOCK= 10204; /* 0x27DC */ /* Send socket data */

public static final int ERROR_NET_RECVSOCK= 10205; /* 0x27DD */ /* Recv socket data */

public static final int ERROR_NET_INVALIDSOCK= 10206; /* 0x27DE */ /* Invalid socket handle */

public static final int ERROR_NET_BADADDRESS = 10207; /* 0x27EF */ /* Bad network address */

public static final int ERROR_NET_BINDSEQUENCE= 10208; /* 0x27E0 */ /* Bind after listen/connect */

public static final int ERROR_NET_NOTOPENSOCK= 10209; /* 0x27E1 */ /* Socket is not opened */

public static final int ERROR_NET_NOTBIND= 10210; /* 0x27E2 */ /* Socket is not bind to an address */

public static final int ERROR_NET_NOTLISTEN = 10211; /* 0x27E3 */ /* Socket is not listening */

public static final int ERROR_NET_CONNECTCLOSE= 10212; /* 0x27E4 */ /* The other side of connection is closed */

public static final int ERROR_NET_NOTDGRAMSOCK= 10213; /* 0x27E5 */ /* The socket is not datagram type */

public static final int ERROR_NET_DNS= 10214; /* 0x27E6 */ /* domain name is invalid or dns server does not function well */

/* Error codes of mssp message 10300(0x283C) */

public static final int ERROR_MSG_GENERAL= 10300; /* 0x283C */

public static final int ERROR_MSG_PARSE_ERROR= 10301; /* 0x283D */

public static final int ERROR_MSG_BUILD_ERROR= 10302; /* 0x283E */

public static final int ERROR_MSG_PARAM_ERROR= 10303; /* 0x283F */

public static final int ERROR_MSG_CONTENT_EMPTY= 10304; /* 0x2840 */

public static final int ERROR_MSG_INVALID_CONTENT_TYPE = 10305; /* 0x2841 */

public static final int ERROR_MSG_INVALID_CONTENT_LENGTH = 10306; /* 0x2842 */

public static final int ERROR_MSG_INVALID_CONTENT_ENCODE = 10307; /* 0x2843 */

public static final int ERROR_MSG_INVALID_KEY= 10308; /* 0x2844 */

public static final int ERROR_MSG_KEY_EMPTY= 10309; /* 0x2845 */

public static final int ERROR_MSG_SESSION_ID_EMPTY= 10310; /* 0x2846 */

public static final int ERROR_MSG_LOGIN_ID_EMPTY= 10311; /* 0x2847 */

public static final int ERROR_MSG_SYNC_ID_EMPTY= 10312; /* 0x2848 */

public static final int ERROR_MSG_APP_ID_EMPTY= 10313; /* 0x2849 */

public static final int ERROR_MSG_EXTERN_ID_EMPTY= 10314; /* 0x284A */

public static final int ERROR_MSG_INVALID_CMD= 10315; /* 0x284B */

public static final int ERROR_MSG_INVALID_SUBJECT= 10316; /* 0x284C */

public static final int ERROR_MSG_INVALID_VERSION= 10317; /* 0x284D */

public static final int ERROR_MSG_NO_CMD= 10318; /* 0x284E */

public static final int ERROR_MSG_NO_SUBJECT= 10319; /* 0x284F */

public static final int ERROR_MSG_NO_VERSION= 10320; /* 0x2850 */

public static final int ERROR_MSG_MSSP_EMPTY= 10321; /* 0x2851 */

public static final int ERROR_MSG_NEW_RESPONSE= 10322; /* 0x2852 */

public static final int ERROR_MSG_NEW_CONTENT= 10323; /* 0x2853 */

public static final int ERROR_MSG_INVALID_SESSION_ID = 10324; /* 0x2854 */

/* Error codes of DataBase 10400(0x28A0)*/

public static final int ERROR_DB_GENERAL= 10400; /* 0x28A0 */

public static final int ERROR_DB_EXCEPTION= 10401; /* 0x28A1 */

public static final int ERROR_DB_NO_RESULT= 10402; /* 0x28A2 */

public static final int ERROR_DB_INVALID_USER= 10403; /* 0x28A3 */

public static final int ERROR_DB_INVALID_PWD= 10404; /* 0x28A4 */

public static final int ERROR_DB_CONNECT= 10405; /* 0x28A5 */

public static final int ERROR_DB_INVALID_SQL= 10406; /* 0x28A6 */

public static final int ERROR_DB_INVALID_APPID= 10407; /* 0x28A7 */

/* Error codes of Resource 10500(0x2904)*/

public static final int ERROR_RES_GENERAL= 10500; /* 0x2904 */

public static final int ERROR_RES_LOAD = 10501; /* 0x2905 */ /* Load resource */

public static final int ERROR_RES_FREE = 10502; /* 0x2906 */ /* Free resource */

public static final int ERROR_RES_MISSING = 10503; /* 0x2907 */ /* Resource File Missing */

public static final int ERROR_RES_INVALID_NAME = 10504; /* 0x2908 */ /* Invalid resource file name */

public static final int ERROR_RES_INVALID_ID = 10505; /* 0x2909 */ /* Invalid resource ID */

public static final int ERROR_RES_INVALID_IMG = 10506; /* 0x290A */ /* Invalid resource image pointer */

public static final int ERROR_RES_WRITE= 10507; /* 0x290B */ /* Write read-only resource */

public static final int ERROR_RES_LEAK = 10508; /* 0x290C */ /* Resource leak out */

public static final int ERROR_RES_HEAD = 10509; /* 0x290D */ /* Resource head currupt */

public static final int ERROR_RES_DATA = 10510; /* 0x290E */ /* Resource data currupt */

public static final int ERROR_RES_SKIP = 10511; /* 0x290F */ /* Resource file skipped */

/* Error codes of TTS 10600(0x2968)*/

public static final int ERROR_TTS_GENERAL= 10600; /* 0x2968 */

public static final int ERROR_TTS_TEXTEND = 10601; /* 0x2969 */ /* Meet text end */

public static final int ERROR_TTS_TEXT_EMPTY= 10602; /* 0x296A */ /* no synth text */

/* Error codes of Recognizer 10700(0x29CC) */

public static final int ERROR_REC_GENERAL= 10700; /* 0x29CC */

public static final int ERROR_REC_INACTIVE= 10701; /* 0x29CD */

public static final int ERROR_REC_GRAMMAR_ERROR= 10702; /* 0x29CE */

public static final int ERROR_REC_NO_ACTIVE_GRAMMARS = 10703; /* 0x29CF */

public static final int ERROR_REC_DUPLICATE_GRAMMAR= 10704; /* 0x29D0 */

public static final int ERROR_REC_INVALID_MEDIA_TYPE = 10705; /* 0x29D1 */

public static final int ERROR_REC_INVALID_LANGUAGE= 10706; /* 0x29D2 */

public static final int ERROR_REC_URI_NOT_FOUND= 10707; /* 0x29D3 */

public static final int ERROR_REC_URI_TIMEOUT= 10708; /* 0x29D4 */

public static final int ERROR_REC_URI_FETCH_ERROR= 10709; /* 0x29D5 */

/* Error codes of Speech Detector 10800(0x2A30) */

public static final int ERROR_EP_GENERAL= 10800; /* 0x2A30 */

public static final int ERROR_EP_NO_SESSION_NAME= 10801; /* 0x2A31 */

public static final int ERROR_EP_INACTIVE = 10802; /* 0x2A32 */

public static final int ERROR_EP_INITIALIZED = 10803; /* 0x2A33 */

/* Error codes of TUV */

public static final int ERROR_TUV_GENERAL= 10900; /* 0x2A94 */

public static final int ERROR_TUV_GETHIDPARAM = 10901; /* 0x2A95 */ /* Get Busin Param huanid*/

public static final int ERROR_TUV_TOKEN= 10902; /* 0x2A96 */ /* Get Token */

public static final int ERROR_TUV_CFGFILE= 10903; /* 0x2A97 */ /* Open cfg file */

public static final int ERROR_TUV_RECV_CONTENT = 10904; /* 0x2A98 */ /* received content is error */

public static final int ERROR_TUV_VERFAIL = 10905; /* 0x2A99 */ /* Verify failure */

/* Error codes of IMTV */

public static final int ERROR_LOGIN_SUCCESS= 11000; /* 0x2AF8 */ /* 成功 */

public static final int ERROR_LOGIN_NO_LICENSE = 11001; /* 0x2AF9 */ /* 试用次数结束,用户需要付费 */

public static final int ERROR_LOGIN_SESSIONID_INVALID = 11002; /* 0x2AFA */ /* SessionId失效,需要重新登录通行证 */

public static final int ERROR_LOGIN_SESSIONID_ERROR= 11003; /* 0x2AFB */ /* SessionId为空,或者非法 */

public static final int ERROR_LOGIN_UNLOGIN = 11004; /* 0x2AFC */ /* 未登录通行证 */

public static final int ERROR_LOGIN_INVALID_USER = 11005; /* 0x2AFD */ /* 用户ID无效 */

public static final int ERROR_LOGIN_INVALID_PWD = 11006; /* 0x2AFE */ /* 用户密码无效 */

public static final int ERROR_LOGIN_SYSTEM_ERROR= 11099; /* 0x2B5B */ /* 系统错误 */

/* Error codes of HCR */

public static final int ERROR_HCR_GENERAL= 11100;

public static final int ERROR_HCR_RESOURCE_NOT_EXIST = 11101;

public static final int ERROR_HCR_CREATE= 11102;

public static final int ERROR_HCR_DESTROY= 11103;

public static final int ERROR_HCR_START= 11104;

public static final int ERROR_HCR_APPEND_STROKES= 11105;

public static final int ERROR_HCR_GET_RESULT= 11106;

public static final int ERROR_HCR_SET_PREDICT_DATA= 11107;

public static final int ERROR_HCR_GET_PREDICT_RESULT = 11108;

/* Error codes of http 12000(0x2EE0) */

public static final int ERROR_HTTP_BASE= 12000; /* 0x2EE0 */

/*Error codes of ISV */

public static final int ERROR_ISV_NO_USER = 13000; /* 32C8 */ /* the user doesn’t exist */

/* Error codes of Lua scripts */

public static final int ERROR_LUA_BASE= 14000; /* 0x36B0 */

public static final int ERROR_LUA_YIELD= 14001; /* 0x36B1 */

public static final int ERROR_LUA_ERRRUN= 14002; /* 0x36B2 */

public static final int ERROR_LUA_ERRSYNTAX= 14003; /* 0x36B3 */

public static final int ERROR_LUA_ERRMEM= 14004; /* 0x36B4 */

public static final int ERROR_LUA_ERRERR= 14005; /* 0x36B5 */

语音引擎java(语音引擎哪个好)

在java程序中加入语音功能,例如给段字符串“A101”,就能发出声音,请大家帮帮忙,谢谢

为应用程序加上语音能力有什么好处呢?粗略地讲,是为了趣味,它适合所有注重趣味的应用,比如游戏。当然,从更严肃的角度来讲,它还涉及到应用的可用性问题。注意,这里我考虑的不仅是可视化界面固有的不足,而且还有这样一些情形:一些时候,让双眼离开当前的工作很不方便,甚至是不合法的。比如,假设有一个带语音功能的浏览器,你就可以在外出散步或开车上班的同时,用听的方式浏览自己喜爱的网站。从目前来看,邮件阅读器或许是语音技术更实际的应用,在JavaMail API的帮助下,这一切已经可能。邮件阅读器可以定期地检查收件箱,然后用语音“You have new mail, would you like me to read it to you?”引起你的注意。按照类似的思路,我们还可以考虑一个带语音功能的提醒器,把它连接到一个日历应用:它会及时地提醒你“Don’t forget your meeting with the boss in 10 minutes!”。 也许你已经被这些主意吸引,或者有了自己更好的主意,现在让我们继续。首先我将介绍如何启用本文提供的语音引擎,这样,如果你认为语音引擎的实现细节过于复杂,就可以直接使用它而忽略其实现细节。

一、试用语音引擎 要使用这个语音引擎,你必须在CLASSPATH中加入本文提供的javatalk.jar文件,然后从命令行运行(或者从Java程序调用)com.lotontech.speech.Talker类。如果从命令行运行,则命令为: java com.lotontech.speech.Talker “h|e|l|oo” 如果从Java程序调用,则代码为: com.lotontech.speech.Talker talker=new com.lotontech.speech.Talker(); talker.sayPhoneWord(“h|e|l|oo”); 现在,对于在命令行上(或者调用sayPhoneWord()方法时)提供的“h|e|l|oo”字符串,你或许有所不解。下面我就来解释一下。 语音引擎的工作原理是把细小的声音样本连接起来,每一个样本都是人的语言发音(英语)的一个最小单位。这些声音样本称为音素(allophone)。每一个因素对应一个、二个或者三个字母。从前面“hello”的语音表示可以看出,一些字母组合的发音显而易见,还有一些却不是很明显: h — 读音显而易见 e — 读音显而易见 l — 读音显而易见,但注意两个“l”被简缩成了一个“l”。 OO — 应该读作“hello”中的读音,不应读作“bot”、“too”中的读音。 下面是一个有效音素的清单: a : 如cat b : 如cab c : 如cat d : 如dot e : 如bet f : 如frog g : 如frog h : 如hog i : 如pig j : 如jig k : 如keg l : 如leg m : 如met n : 如begin o : 如not p : 如pot r : 如rot s : 如sat t : 如sat u : 如put v : 如have w : 如wet y : 如yet z : 如zoo aa : 如fake ay : 如hay ee : 如bee ii : 如high oo : 如go bb : b的变化形式,重音不同 dd : d的变化形式,重音不同 ggg : g的变化形式,重音不同 hh : h的变化形式,重音不同 ll : l的变化形式,重音不同 nn : n的变化形式,重音不同 rr : r的变化形式,重音不同 tt : t的变化形式,重音不同 yy : y的变化形式,重音不同 ar : 如car aer : 如care ch : 如which ck : 如check ear : 如beer er : 如later err : 如later (长音) ng : 如feeding or : 如law ou : 如zoo ouu : 如zoo (长音) ow : 如cow oy : 如boy sh : 如shut th : 如thing dth : 如this uh : u 的变化形式 wh : 如where zh : 如Asian 人说话的时候,语音在整个句子之内起落变化。语调变化使得语音更自然、更富有感染力,使得问句和陈述句能够相互区别。请考虑下面两个句子: It is fake — f|aa|k Is it fake? — f|AA|k 也许你已经猜想到,提高语调的方法是使用大写字母。 以上就是使用该软件时你需要了解的东西。如果你对其后台实现细节感兴趣,请继续阅读。

二、实现语音引擎 语音引擎的实现只包括一个类,四个方法。它利用了J2SE 1.3包含的Java Sound API。在这里,我不准备全面地介绍这个API,但你可以通过实例学习它的用法。Java Sound API并不是一个特别复杂的API,代码中的注释将告诉你必须了解的知识。 下面是Talker类的基本定义: package com.lotontech.speech; import javax.sound.sampled.*; import java.io.*; import java.util.*; import java.net.*; public class Talker { private SourceDataLine line=null; } 如果从命令行执行Talker,下面的main()方法将作为入口点运行。main()方法获取第一个命令行参数,然后把它传递给sayPhoneWord()方法: /* * 读出在命令行中指定的表示读音的字符串 */ public static void main(String args[]) { Talker player=new Talker(); if (args.length0) player.sayPhoneWord(args[0]); System.exit(0); }

sayPhoneWord()方法既可以通过上面的main()方法调用,也可以在Java程序中直接调用。从表面上看,sayPhoneWord()方法比较复杂,其实并非如此。实际上,它简单地遍历所有单词的语音元素(在输入字符串中语音元素以“|”分隔),通过一个声音输出通道一个元素一个元素地播放出来。为了让声音更自然一些,我把每一个声音样本的结尾和下一个声音样本的开头合并了起来: /* * 读出指定的语音字符串 */ public void sayPhoneWord(String word) { // 为上一个声音构造的模拟byte数组 byte[] previousSound=null; // 把输入字符串分割成单独的音素 StringTokenizer st=new StringTokenizer(word,”|”,false); while (st.hasMoreTokens()) { // 为音素构造相应的文件名字 String thisPhoneFile=st.nextToken(); thisPhoneFile=”/allophones/”+thisPhoneFile+”.au”; // 从声音文件读取数据 byte[] thisSound=getSound(thisPhoneFile); if (previousSound!=null) { // 如果可能的话,把前一个音素和当前音素合并 int mergeCount=0; if (previousSound.length=500 thisSound.length=500) mergeCount=500; for (int i=0; i { previousSound[previousSound.length-mergeCount+i] =(byte)((previousSound[previousSound.length -mergeCount+i]+thisSound[i])/2); } // 播放前一个音素 playSound(previousSound); // 把经过截短的当前音素作为前一个音素 byte[] newSound=new byte[thisSound.length-mergeCount]; for (int ii=0; ii newSound[ii]=thisSound[ii+mergeCount]; previousSound=newSound; } else previousSound=thisSound; } // 播放最后一个音素,清理声音通道 playSound(previousSound); drain(); } 在sayPhoneWord()的后面,你可以看到它调用playSound()输出单个声音样本(即一个音素),然后调用drain()清理声音通道。下面是playSound()的代码: /* * 该方法播放一个声音样本 */ private void playSound(byte[] data) { if (data.length0) line.write(data, 0, data.length); } 下面是drain()的代码: /* * 该方法清理声音通道 */ private void drain() { if (line!=null) line.drain(); try {Thread.sleep(100);} catch (Exception e) {} }

现在回过头来看sayPhoneWord(),这里还有一个方法我们没有分析,即getSound()方法。 getSound()方法从一个au文件以字节数据的形式读入预先录制的声音样本。要了解读取数据、转换音频格式、初始化声音输出行(SouceDataLine)以及构造字节数据的详细过程,请参考下面代码中的注释: /* * 该方法从文件读取一个音素, * 并把它转换成byte数组 */ private byte[] getSound(String fileName) { try { URL url=Talker.class.getResource(fileName); AudioInputStream stream = AudioSystem.getAudioInputStream(url); AudioFormat format = stream.getFormat(); // 把一个ALAW/ULAW声音转换成PCM以便回放 if ((format.getEncoding() == AudioFormat.Encoding.ULAW) || (format.getEncoding() == AudioFormat.Encoding.ALAW)) { AudioFormat tmpFormat = new AudioFormat( AudioFormat.Encoding.PCM_SIGNED, format.getSampleRate(), format.getSampleSizeInBits() * 2, format.getChannels(), format.getFrameSize() * 2, format.getFrameRate(), true); stream = AudioSystem.getAudioInputStream(tmpFormat, stream); format = tmpFormat; } DataLine.Info info = new DataLine.Info( Clip.class, format, ((int) stream.getFrameLength() * format.getFrameSize())); if (line==null) { // 输出线还没有实例化 // 是否能够找到合适的输出线类型? DataLine.Info outInfo = new DataLine.Info(SourceDataLine.class, format); if (!AudioSystem.isLineSupported(outInfo)) { System.out.println(“不支持匹配” + outInfo + “的输出线”); throw new Exception(“不支持匹配” + outInfo + “的输出线”); } // 打开输出线 line = (SourceDataLine) AudioSystem.getLine(outInfo); line.open(format, 50000); line.start(); } int frameSizeInBytes = format.getFrameSize(); int bufferLengthInFrames = line.getBufferSize() / 8; int bufferLengthInBytes = bufferLengthInFrames * frameSizeInBytes; byte[] data=new byte[bufferLengthInBytes]; // 读取字节数据,并计数 int numBytesRead = 0; if ((numBytesRead = stream.read(data)) != -1) { int numBytesRemaining = numBytesRead; } // 把字节数据切割成合适的大小 byte[] newData=new byte[numBytesRead]; for (int i=0; i newData[i]=data[i]; return newData; } catch (Exception e) { return new byte[0]; } } 这就是全部的代码,包括注释在内,一个大约150行代码的语音合成器。

三、文本-语音转换 以语音元素的格式指定待朗读的单词似乎过于复杂,如果要构造一个能够朗读文本(比如Web页面或Email)的应用,我们希望能够直接指定原始的文本。 深入分析这个问题之后,我在本文后面的ZIP文件中提供了一个试验性的文本-语音转换类。运行这个类,它将显示出分析结果。文本-语音转换类可以从命令行执行,如下所示: java com.lotontech.speech.Converter “hello there” 输出结果类如: hello – h|e|l|oo there – dth|aer 如果运行下面这个命令: java com.lotontech.speech.Converter “I like to read JavaWorld” 则输出结果为: i – ii like – l|ii|k to – t|ouu read – r|ee|a|d java – j|a|v|a world – w|err|l|d 这个转换类是如何工作的呢?实际上,我的方法相当简单,转换过程就是以一定的次序应用一组文本替换规则。例如对于单词“ant”、“want”、“wanted”、“unwanted”和“unique”,则我们想要应用的替换规则可能依次为: 用“|y|ou|n|ee|k|”替换“*unique*” 用“|w|o|n|t|”替换“*want*” 用“|a|”替换“*a*” 用“|e|”替换“*e*” 用“|d|”替换“*d*” 用“|n|”替换“*n*” 用“|u|”替换“*u*” 用“|t|”替换“*t*” 对于“unwanted”,输出序列为: unwanted un[|w|o|n|t|]ed (规则2) [|u|][|n|][|w|o|n|t|][|e|][|d|] (规则4、5、6、7) u|n|w|o|n|t|e|d (删除多余的符之后) 你将看到包含字母“wont”的单词和包含字母“ant”的单词以不同的方式发音,还将看到在特例规则的作用下,“unique”作为一个完整单词优先于其他规则,从而“unique”这个单词读作“y|ou…”而不是“u|n…”。

java使用freeTTS,怎么能让机器输出中文语言

FreeTTS可以输出中文语言过程:

①导入Java 语音API包

②为语音合成器声明实例变量

③语音合成器的初始化

初始化是FreeTTS应用中关键的部分。首先需要建立一个SynthesizerModeDesc 对象,该对象用于指明语音合成器的属性,包括语音引擎的的名称、语音引擎的操作模式、支持的语言、语音引擎的运行状态以及其发音能力等。

④创建语音合成器

创建语言合成器时需要用到Cen t ral 类, 其作用是提供用来访问所有语音输入和输出的能力, 同时也可以定为语言引擎, 根据描述符所定义的属性集合选择匹配的引擎, 从而创建语音识别器和语音合成器。语音合成器的创建需使用Central类的createSynthesizer方法,该方法接受一个SynthesizerModeDesc描述符并返回同描述符中所指定属性相匹配的一个Synthesizer对象,用以实现语音合成。

⑤准备用于朗读的Synthesizer 对象

该部分通过Synthesizer对象的allocate和resume方法分配语音引擎所需要的资源并取得可用于朗读的语音合成器。实现较为简单:speechSynthesizer1allocate();speechSynthesizer1resume();

⑥设置Syn thesizer 对象的属性

利用getSynthesizerProperties 方法可以获得Synthesizer对象的属性,其返回值是与语音合成器相关联的SynthesizerProperties对象,该对象包含语音合成器的多种属性, 每种属性可以通过setProperties方法设置。例如: setSpeakingRate方法可设置speakingRate属性,实现每分钟朗读单词速率的控制。

⑦事件处理程序设计

speak ingRate 属性, 实现每分钟朗读单词速率的控制。完成应用程序界面中JButton“读出号码”的事件程序设计, 首先通过JComboBox(选择人名的下拉列表)取得人名(namesArray)的一个索引,该索引与电话号码索引(numbersArray)保持对应,然后调用Synthesizer对象speakingPlainText方法朗读整理后的电话号码字符串。

语音引擎java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于语音引擎哪个好、语音引擎java的信息别忘了在本站进行查找喔。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月4日 07:11:58
下一篇 2024年4月4日 07:21:12

相关推荐

  • 深入java虚拟机pdf,深入java虚拟机 中村成洋 pdf

    在linux环境下,java怎么实现从word格式转换为pdf格式 //设置当前使用的打印机,我的Adobe Distiller打印机名字为 Adobe PDF wordCom.setProperty( ActivePrinter , new Variant( Adobe PDF ));//设置printout的参数,将word文档打印为postscript…

    2024年5月23日
    4400
  • java截取指定长度字符串,java截取指定字符串之后的

    java中如何截取字符串中的指定一部分 第一个参数是开始截取的字符位置。(从0开始)第二个参数是结束字符的位置+1。(从0开始)indexof函数的作用是查找该字符串中的某个字的位置,并且返回。 int end);截取s中从begin开始至end结束时的字符串,并将其赋值给s;split讲解:java.lang.string.split split 方法 将…

    2024年5月23日
    4200
  • java绑定一个端口,java使用端口

    java如何多个service共用一个端口 你如果有多个项目的话,你可以把多个项目放到一个tomcat里面,这样端口相同使用项目名称来进行区分项目。你如果非要使用同一个,你也可以配置不同的域名导向不同的项目。就是访问的域名不同转接到的项目不同。 如果需要同时启动多个程序,要么修改tomcat的配置文件中的监听端口。要么修改jar包程序的监听端口。不能在一台服…

    2024年5月23日
    3400
  • java多线程并发编程基础,Java多线程并发执行返回

    电脑培训分享Java并发编程:核心理论 电脑培训发现本系列会从线程间协调的方式(wait、notify、notifyAll)、Synchronized及Volatile的本质入手,详细解释JDK为我们提供的每种并发工具和底层实现机制。 人们开始意识到了继承的众多缺点,开始努力用聚合代替继承。软件工程解决扩展性的重要原则就是抽象描述,直接使用的工具就是接口。接…

    2024年5月23日
    4600
  • 自学java找工作,自学java找工作需要包装简历吗

    自学java学多久可以找到工作 1、自学Java至少需要一年以上的时间才能达到找工作的水平。报班培训四到六个月的时间就可以找到一份不错的工作。 2、自学Java至少需要一年以上的时间才能达到找工作的水平。 3、如果要想找到一份Java相关的工作,需要至少学习5-6个月时间才能就业。Java开发需要掌握一些基础的编程语言知识,比如掌握面向对象的编程思想、基本的…

    2024年5月23日
    4300
  • java左移右移,java 左移

    java位移问题 1、思路:直接用Integer类的bit运算操作。 2、移位操作:左移:向左移位,符号后面的数字是移了多少位,移的位用0补齐,例如2进制数01111111左移一位后变为11111110,移位是字节操作。 3、Java 位运算 Java 位运算[转]一,Java 位运算表示方法: 在Java语言中,二进制数使用补码表示,最高位为符号位,正数的…

    2024年5月23日
    4200
  • java技术规范,java规范性要求

    现在主流的JAVA技术是什么? java最流行开发技术程序员必看 1 、Git Git一直是世界上最受欢迎的Java工具之一,也是Java开发人员最杰出的工具之一。Git是一个开源工具,是-种出色的分布式版本控制解决方案。 (1).Java基础语法、数组、类与对象、继承与多态、异常、范型、集合、流与文件、反射、枚举、自动装箱和注解。(2).Java面向对象编…

    2024年5月23日
    4000
  • javasocket编程,Java socket编程中,禁用nagle算法的参数

    Java进行并发多连接socket编程 1、Java可利用ServerSocket类对外部客户端提供多个socket接口。基本的做法是先创建一个ServerSocket实例,并绑定一个指定的端口,然后在这个实例上调用accept()方法等待客户端的连接请求。 2、Socket socket=server.accept(0;Thread handleThrea…

    2024年5月23日
    4600
  • java死亡,java死代码是什么意思

    我的世界传送回死亡点指令是什么? 1、下面就让我们一起来了解一下吧:我的世界回到死的地方的指令是输入/back,就可以回到死亡地点了,当然也可以看信标,因为死亡后会有一道光集中在死亡点,只要循着光就可以找到目的地了。 2、在服务器中的指令 首先打开指令台,在指令行输入“/back”就可以回到自己的死亡地点了。在单人游戏中的指令 在单人游戏中,您无法直接返回到…

    2024年5月23日
    4800
  • myeclipse能部署java工程么,myeclipse支持jdk18

    myeclipse如何建java文件 1、点击【File】—【New】–【Class】在如下界面,输入Class的名字,如Test,点击【Finish】。Test.java文件创建成功。 2、点击【File】—【New】–【Class】 在如下界面,输入Class的名字,如Test,点击【Finish】。 Te…

    2024年5月23日
    3900

发表回复

登录后才能评论



关注微信