java语音识别别开发是使用什么语言,java还是C

科大讯飞语音云java版语音识别sdk的简单使用示例 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 20时,
结合官方的示例,做了一个小小的封装。就是说一句,返回String类型的识别句子。需要用到msc64/32.dll和json-jena-1.0.jar,Msc.jar。这些在SDK包中都有。/index.php/manage/sdk
代码片段(1)
1.&[代码][Java]代码&&&&
import java.util.ArrayL
import com.iflytek.speech.RecognizerL
import com.iflytek.speech.RecognizerR
import com.iflytek.speech.SpeechE
import com.iflytek.speech.SpeechR
public class TestXF {
* 这里需要改成你自己的实际appid
private String version = 改成你自己实际的
private SpeechR
private StringBuffer rStr = new StringBuffer();
* 初始化声音组件
if (SpeechRecognizer.getRecognizer() == null)
SpeechRecognizer.createRecognizer("appid=" + version);
recognizer = SpeechRecognizer.getRecognizer();
public String listen() {
if (rStr.length() != 0)
rStr.setLength(0);
// 开始监听语音输入,sms表示文本,vad_eos表示用户停止说话后多长时间表示结束
recognizer.startListening(resultListener, "sms",
"vad_bos =10000,vad_eos=2000", null);
while (true) {
if (recognizer.isAvaible())
return rStr.toString();
private RecognizerListener resultListener = new RecognizerListener() {
public void onCancel() {
public void onEnd(SpeechError mLastError) {
public void onBeginOfSpeech() {
public void onEndOfSpeech() {
* 获取识别结果. 获取ArrayList类型的识别结果,并对结果进行累加,显示到Area里
public void onResults(ArrayList results, boolean islast) {
String text = "";
for (int i = 0; i & results.size(); i++) {
RecognizerResult result = (RecognizerResult) results.get(i);
text += result.
rStr.append(text);
public void onVolumeChanged(int volume) {
if (volume == 0)
volume = 1;
else if (volume &= 6)
volume = 6;
public static void main(String[] args) {
TestXF t = new TestXF();
System.out.println("我刚才说的:" + t.listen());
System.out.println("第二句---------------");
System.out.println("我刚才说的:" + t.listen());
开源中国-程序员在线工具:
相关的代码(409)
没有key 可以搞么
2楼:小雪爱乌云 发表于
引用来自“蘑菇喵”的评论没有key 可以搞么这个注册一下,就有KEY了啊。他们的申请流程非常简单的哦~~
3楼:liuyk1990 发表于
你好,请问讯飞语音识别引擎支不支持读入一个音频文件,然后输出识别结果的文本文件?谢谢
4楼:chenxiao60 发表于
java版讯飞语音sdk刚刚上路,希望多多交流。
我不知道怎么搞……
开源从代码分享开始
小雪爱乌云的其它代码> 我的C语言之路------codeblock的安装和使用做JAVA开发快3年了,做的时间越长就越想
我的C语言之路------codeblock的安装和使用做JAVA开发快3年了,做的时间越长就越想
qidongtangxiaoji & &
发布时间: & &
浏览:1 & &
回复:0 & &
悬赏:0.0希赛币
我的C语言之路 ------ code block的安装和使用
  做JAVA开发快3年了,做的时间越长就越想了解底层的东西。刚好目前事情还不算多,所以最近一直在学习C/C++语言。
  因为有JAVA的基础,学习语法方面感觉还好,语言都是相同的,明显感觉到比之前学习JAVA要轻松许多了,看了一段时间的语法之后,就想弄点什么出来,于是开始装IDE,C/C++IDE还挺多的,之前对vs有些了解,当是因为需要注册码,比较反感,其实最让人忍不了的是安装包太大了,vs2008 有3.7个G之多。
  有幸知道了另外一个IDE----code block 他可以支持N种平台的C/C++开发,好处不多说了,我今天主要是想把我今天遇到的问题记录下。
  下载安装自不用说,不过有个地方是选择MinGW,如果没有的话下载 code block 的时候 一起下下来吧。
  安装之后一直配置,我是根据百度文库上的一篇文档安装的:地址为: from=rec&pos=0&weight=582&lastweight=66&count=5
  谢谢这位兄弟了。
  一直跟下来没有问题的。
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&您所在的位置: &
Java通过jna调用实现语音识别功能(1)
Java通过jna调用实现语音识别功能(1)
夜明的孤行灯
夜明的孤行灯的博客
java调用.dll获取.so一般通过JNI,但是JNI的使用比较复杂,需要用C另写一个共享库进行适配。而JNA是一个自动适配工具,通过它调用.dll只需要一个借口即可。
语音识别技术
语音识别就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令。语音识别技术主要包括特征提取技术、模式匹配准则及模型训练技术三个方面。说实话其中的技术比较多,要独立开发新的基本上不现实。所以自然把目光放到开源项目或者其他公司的API上面了。开源项目我尝试了SpeakRight和sphinx4,但是效果都是一般。AT&T的API老是申请不上,最后把目光放在科大讯飞上了。试用了一下,效果还行,但是它提供的Windows平台的API是C/C++的,我只懂点皮毛,所以稍微研究了一下通过Java调用它的语音云SDK。
java调用.dll获取.so一般通过JNI,但是JNI的使用比较复杂,需要用C另写一个共享库进行适配。而JNA是一个自动适配工具,通过它调用.dll只需要一个借口即可。
官网:。下载jna.jar即可。
科大讯飞语音云主要提供语音合成和语音识别两个方面的东西,我主要使用语音识别这块的功能。
建立接口QTSR,继承Library。
将msc.dll等文件复制到项目根目录。
加载msc.dll
QTSR&INSTANCE&=&(QTSR)&Native.loadLibrary(&msc&,&QTSR.class);&
然后来看一下msc.dll公开了哪些方法。首先是QISRInit,这是一个全局初始化函数。
它的返回值为int,参数是const char*。int还是java的int,但是char*就对应的是java的String了。
所以在QTSR中添加方法:
public&int&QISRInit(String&configs);&
返回值在msp_errors.h中定义,等一下我们还是要弄在java里面去。
继续看QISRInit函数,在官方文档中有调用示例:
const&char*&configs=&server_url=,&timeout=10000,&vad_enable=true&;&&& &int&&&ret&=&QISRInit(&configs&);&&& &if(MSP_SUCCESS&!=&ret&)&&& &{&&& &&&&&&&&&printf(&&QISRInit&failed,&error&code&is:&%d&,&ret&);&&& &}&
对应的在java中的调用代码如下:
String&config&=&&server_url=,&timeout=10000,&vad_enable=true&;& &int&code&=&QTSR.INSTANCE.QISRInit(config);& &if&(code&!=&0)&{& &&&System.out.println(&QISRInit&failed,&error&code&is:&&+&code);& &}&
我们在看一个函数:QISRSessionBegin,这个开始一路ISR会话。
还是刚才的思路,char*对应java的String,但是注意一下int *errorCode。这个函数其实传入两个参数,传出两个参数。即本身返回的sessionId,还有errorCode。
这里的int*对应的是jna的IntByReference。所以添加方法:
public&String&QISRSessionBegin(String&grammarList,&String&params,IntByReference&errorCode);&
同样看看官方示例:
&const&char*&&&&&&params=&&& &&ssm=1,sub=iat,aue=speex-7,auf=audio/L16;rate=16000,ent=sms16k,rst=plain,vad_timeout=1000,vad_speech_tail=1000&;& &int&ret&=&MSP_SUCCESS;&&& &const&char*&&&&&session_id&=&QISRSessionBegin(&NULL,&params,&&ret&);&&& &if(MSP_SUCCESS&!=&ret&)&&& &{&&& &&&&&&&&&printf(&&QISRSessionBegin&failed,&error&code&is:&%d&,&ret&);&&& &}&
在java这样写:
String&params&=&&ssm=1,sub=iat,aue=speex-7,auf=audio/L16;rate=16000,ent=sms16k,rst=plain,vad_timeout=1000,vad_speech_tail=1000&;& &IntByReference&errorCode&=&new&IntByReference();& &String&sessionId&=&QTSR.INSTANCE.QISRSessionBegin(null,&params,errorCode);& &
运行效果:
其他的函数处理方式大致相同,这里贴上一个c和java在jna中的类型对应表:
其中Unsigned类型和signed在java中对应是一样的。
.h文件和常量处理
在SDK的include目录有4个.h文件,定义了一些常量,比如上面一节中的0其实是msp_errors.h中MSP_SUCCESS。
我以msp_errors.h为例,建立一个接口Msp_errors,继承StdCallLibrary。
照着msp_errors.h中的定义在Msp_errors中进行定义。
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;&&&& &public&static&final&int&ERROR_OUT_OF_MEMORY=&10101;&&&&&& &public&static&final&int&ERROR_FILE_NOT_FOUND=&10102;&&&&& &public&static&final&int&ERROR_NOT_SUPPORT=&10103;&&&&&
使用很简单的,比如MSP_SUCCESS 就是Msp_errors.MSP_SUCCESS。
内容导航&第 1 页: &第 2 页:
关于的更多文章
又是一周匆匆而过。上周五、周六两天,2013年51CTO云计算架构师
Flash即将彻底退休,企业用户该如何自处?
流火过,金秋来,在学校开学之前的最后一周,终于凉快
又到了一周的末尾,闷热过后,这周的温度算是降下来了
掌握一门技术,首要的是掌握其基础。笔者从事.NET相关
一个网站,无论视觉上多美观或者内容多丰富,如果它不能适应各种浏览情况并能面向尽可能广泛的用户群,那它就不算是真正成功的网
51CTO旗下网站Our features included there
北京市海淀区上地九街中关村软件园4号楼云基地4层405A
想了解我们的最新消息和产品版本,可与我们第一时间邮件通信。}

我要回帖

更多关于 语音识别 语言模型 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信