java离线语音识别代码 java语音识别开源

如何用pocketsphinx实现android离线语音识别1.搭建Android开发环境和NDK配置就不说了,网上教程很多 。
2.下载sphinxbase –snapshot,pocketsphinx – snapshot和PocketsphinxAndroidDemo– snapshot,然后吧sphinxbase和pocketsphinx放到同一个文件夹下,用./autogen.sh ./configuremakemakeinstall的方法先安装sphinxbase , 再安装pocketsphinx 。
3.把PocketSphinxDemo导入Eclipse , 进入PocketSphinxDemo/jni文件夹,把Android.mk里的SPHINX_PATH变量改成sphinxbase和pocketsphinx的父目录 。
4.在jni文件夹运行ndk-build命令 。(当然 , 需要先配置好ndk)
5.在Eclipse里 , PocketSphinxDemo项目的Properties中,选择Builders,可以看到SWIG和NDK,NDK的build其实可以通过4中的命令来完成,也可以通过eclipse自动完成 。选择NDK,点击Edit按钮,出现的框中,在Location区域选择ndk文件夹,然后点击Refresh选项卡 , 选择“Theproject containing the selected resource” , 点击Build Options选项卡,取消选择“Specifyworking set of relevant resources” 。选择SWIG , 点击Edit,在Refresh选项卡中选择 “The foldercontaining the selected resource” , 在Build Options选项卡中取消选择“Specifiy working set of relevant resources” 。
6.把手机和电脑连接,把pocketsphinx/model/hmm/en_US里的hub4wsj_sc_8k,hmm/en_US , lm/en_US放入手机的某个文件夹 , 如用adbpush把使手机存在如下文件或文件夹: /sdcard/Android/data/eduNaNu.pocketsphinx/hmm/en_US/hub4wsj_sc_8k /sdcard/Android/data/eduNaNu.pocketsphinx/lm/en_US/hub4.5000.dic /sdcard/Android/data/eduNaNu.pocketsphinx/lm/en_US/hub4.5000.DMP
7.在PocketSphinxDemo项目中使RecognizerTask.java里c.setString函数中的参数符合6中存放的文件和文件夹 。
8.构建运行 。
java可以实现语音识别吗这个是可以实现的 。
注:test.pcm是语音文件,可以用audacity软件打开,选择 文件-导入-裸数据 。设置采样率为8000Hz 。点击播放就能听见声音了 。
这个时候程序跑起来还有问题,需要将apiKey 以及secretKey填写上 。这两个值是你申请应用对应的分配好的 。
cuid填本机mac地址就可以了,这个值我试过好像无所谓没啥要求 。
程序能跑起来,并且按照正常返回识别的语音结果 。但是返回结果的编码为GBK,所以汉字显示为乱码,需要对其进行一次转码 。转码的代码是我自己加上去的
在java怎么调用julius做语音识别?。壳蠼涌诖?/h2>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
【java离线语音识别代码 java语音识别开源】*/
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= https://www.04ip.com/post/10107;/* 0x277B */
public static final int ERROR_INVALID_HANDLE= 10108;/* 0x277C */
public static final int ERROR_INVALID_DATA= https://www.04ip.com/post/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= https://www.04ip.com/post/10118;/* 0x2786 */
public static final int ERROR_NO_MORE_DATA= https://www.04ip.com/post/10119;/* 0x2787 */
public static final int ERROR_NO_RESPONSE_DATA= https://www.04ip.com/post/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 = https://www.04ip.com/post/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= https://www.04ip.com/post/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的语音识别是调用讯飞的dll文件,但怎么在此基础上编写一个离线的语音识别,求方法一般那种c#的dll是java不能直接调用的,但C\C可以,你可以使用JNI 。比如你要一个 public native void sengMsg(String msg); 来发送信息,先用native关键字声明这个函数,然后再类里面加一个静态块:
static { System.loadLibrary("msg"); } 这里的msg是你的后来编译的dll文件名,不是短信猫带的 。然后写其他的函数就可以调用这个方法了 , 写完后用javac编译,得到class文件,然后用 javah -jni 你的class文件 就会得到一个.h的头文件 , 用visual studio新建一个dll,把那个.h文件包含进去 , 用C\C调用你现有的dll,然后编译得到你的msg.dll,把它复制到你的class文件目录 , 然后就可以调试运行了 。
怎样用java做语音识别这块国内一般都用科大讯飞的语音云来做语音识别 。不过那个接口是c/c的,用JAVA来调用的话要通过java调用dll的技术,类似于 jni 或者 jna 都可以
java离线语音识别代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java语音识别开源、java离线语音识别代码的信息别忘了在本站进行查找喔 。

    推荐阅读