java通過jna調用科大訊飛語音雲實現語音識別功能


說明:寫本文時還沒有提供java平台的,現在官方有java平台的sdk了,可以直接使用。本文已經沒有太多實際意義了。

語音識別技術

語音識別就是讓機器通過識別和理解過程把語音信號轉變為相應的文本或命令。語音識別技術主要包括特征提取技術、模式匹配准則及模型訓練技術三個方面。說實話其中的技術比較多,要獨立開發新的基本上不現實。所以自然把目光放到開源項目或者其他公司的API上面了。開源項目我嘗試了SpeakRight和sphinx4,但是效果都是一般。AT&T的API老是申請不上,最后把目光放在科大訊飛上了。試用了一下,效果還行,但是它提供的Windows平台的API是C/C++的,我只懂點皮毛,所以稍微研究了一下通過Java調用它的語音雲SDK。

JNA

java調用.dll獲取.so一般通過JNI,但是JNI的使用比較復雜,需要用C另寫一個共享庫進行適配。而JNA是一個自動適配工具,通過它調用.dll只需要一個借口即可。

官網:https://github.com/twall/jna/

下載jna.jar即可。

編寫接口

科大訊飛語音雲主要提供語音合成和語音識別兩個方面的東西,我主要使用語音識別這塊的功能。

建立接口QTSR,繼承Library。

將msc.dll等文件復制到項目根目錄。

jna-yuyinshibie-01

加載msc.dll

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

然后來看一下msc.dll公開了哪些方法。首先是QISRInit,這是一個全局初始化函數。

jna-yuyinshibie-02

它的返回值為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=dev.voicecloud.cn, 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=dev.voicecloud.cn, 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會話。

jna-yuyinshibie-03

還是剛才的思路,char*對應java的String,但是注意一下int *errorCode。這個函數其實傳入兩個參數,傳出兩個參數。即本身返回的sessionId,還有errorCode。

這里的int*對應的是jna的IntByReference。所以添加方法:

public String QISRSessionBegin(String grammarList, String params,IntByReference errorCode);

 

同樣看看官方示例:

/* vad_timeout和vad_speech_tail兩個參數只有在打開VAD功能時才生效 */

const char*      params=

“ssm=1,sub=iat,aue=speex-wb;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-wb;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);

運行效果:

jna-yuyinshibie-04

其他的函數處理方式大致相同,這里貼上一個c和java在jna中的類型對應表:

Native Type Java Type
char byte
short short
wchar_t char
int int
int boolean
long NativeLong
long long long
float float
double double
char* String
void* Pointer

其中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。

完整代碼和文件

這個只是語音識別部分的,語音合成的話我記得有人做過jni接口的。

*QTSR.java

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;

/**
 * @author 夜明的孤行燈
 * @date 2012-7-5
 */

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;

/**
 * @author 夜明的孤行燈
 * @date 2012-7-5
 */

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 */
}

嫌復制粘貼麻煩的可以點擊下面的鏈接下載:

Msp_errors.java: http://www.t00y.com/file/8170772
QTSR.java: http://www.t00y.com/file/8170775


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM