可以實現(xiàn),參考如下代碼:
創(chuàng)新互聯(lián)云計算的互聯(lián)網(wǎng)服務(wù)提供商,擁有超過13年的服務(wù)器租用、雅安機(jī)房托管、云服務(wù)器、網(wǎng)絡(luò)空間、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗,已先后獲得國家工業(yè)和信息化部頒發(fā)的互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)許可證。專業(yè)提供云主機(jī)、網(wǎng)絡(luò)空間、域名與空間、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
package?com.lolo;
import?java.io.File;
import?java.io.IOException;
import?javax.sound.sampled.AudioSystem;
import?javax.sound.sampled.LineUnavailableException;
import?javax.sound.sampled.UnsupportedAudioFileException;
import?javax.sound.sampled.AudioInputStream;
import?javax.sound.sampled.AudioFormat;
import?javax.sound.sampled.SourceDataLine;
import?javax.sound.sampled.DataLine;
public?class?PlayMusic?{
//????程序退出時執(zhí)行的代碼
public?void?doShutDownWork()?{
Runtime.getRuntime().addShutdownHook(new?Thread()?{
public?void?run()?{
try?{
//Toolkit.getDefaultToolkit().beep();
Play();
Play();
}?catch?(Exception?ex)?{
}
}
});
}
//播放音頻文件
public?void?Play(){
String?fileurl?=?"file/tada.wav";
try{
AudioInputStream?ais?=?AudioSystem.getAudioInputStream(new?File(fileurl));
AudioFormat?aif?=?ais.getFormat();
SourceDataLine?sdl?=?null;
DataLine.Info?info?=?new?DataLine.Info(SourceDataLine.class,aif);
sdl?=?(SourceDataLine)AudioSystem.getLine(info);
sdl.open(aif);
sdl.start();
//play
int?nByte?=?0;
byte[]?buffer?=?new?byte[128];
while(nByte?!=?-1){
nByte?=?ais.read(buffer,0,128);
if(nByte?=?0){
int?oByte?=?sdl.write(buffer,?0,?nByte);
//System.out.println(oByte);
}
}
sdl.stop();
}catch(UnsupportedAudioFileException?e){
e.printStackTrace();
}?catch?(IOException?e)?{
//?TODO?自動產(chǎn)生?catch?區(qū)塊
e.printStackTrace();
}?catch?(LineUnavailableException?e)?{
//?TODO?自動產(chǎn)生?catch?區(qū)塊
e.printStackTrace();
}
}
}
為什么audioFormat.getChannels(), 一次后還要再一個audioFormat.getChannels()*2
每聲道每幀字節(jié)數(shù)2字節(jié),再加上雙聲道所以用聲道數(shù)(2)*字節(jié)數(shù)(2) = 每幀的總字節(jié)數(shù)
看來你的audioFormat不是從AudioInputStream中產(chǎn)生的?。縿偛呕卮鹉愕膯栴}我還沒注意。原來audioFormat也可以new出來的啊,嘿嘿。
您好,1 雙方之間的網(wǎng)絡(luò)連接
Java在這方面有其獨特的優(yōu)勢,Java提供了豐富的網(wǎng)絡(luò)類庫的支持,可以輕松編寫多種類型的網(wǎng)絡(luò)通信程序。在我下面的例子中我就使用了TCP/IP協(xié)議,通過Java的Socket類進(jìn)行編程。
2 音頻信號的采集和回放以及音頻數(shù)字信號的編碼與解碼
在解決這兩個問題的時候,在網(wǎng)上很幸運地通過一些文章的介紹,找到了Answer Machine 演示程序的源代碼(由of jsresources.org的Florian Bomers 和Matthias Pfisterer編寫,網(wǎng)址)。在這個程序代碼中,有幾個解決我們問題所需要的類,而且作者將這些類封裝的很好,我們基本不需要做什么改動,只需要屏蔽其中的調(diào)試信息的輸出就行了,更可貴的是它還封裝了幾種常見的音頻格式。其中的GSM格式(Global System for Mobile Telecommunications)就是我們下面例子中采用的壓縮格式,GSM格式可以將128kbps 的音頻數(shù)據(jù)流 (16bit通過8k Hz的音頻采樣) 壓縮為13kbps 的音頻數(shù)據(jù)流,非常適合語音信號的傳送,所以可謂是一石二鳥。
我分析過這幾個類的源代碼,不得不佩服它的作者,每個類的源代碼都很精煉,大家可以自己分析一下。好了下面就給大家講講這幾個類,并且將它們用到的Java Sound API中的類和函數(shù)等一并做個簡單介紹,讓大家對Java Sound API中常用的類也有個大致的了解。由于Java Sound API中的類比較多。限于篇幅無法對所有用到的類做詳盡的解釋,以下內(nèi)容只是簡單提及了各個類的用途和使用規(guī)范,有關(guān)Java Sound API中類的具體介紹請大家訪問這里, 查找javax.sound.sampled的相關(guān)內(nèi)容。
以下的提到幾個文件是從Answer Machine 演示程序的源代碼中提取出來的,由于是開放源代碼的程序,大家在使用的時候請注意相關(guān)的公共協(xié)議。
① AMAudioFormat類(封裝在AMAudioFormat.java文件中)
AMAudioFormat類封裝了CD、FM、TELEPHONE、GSM這四種質(zhì)量的音頻格式的參數(shù),使用起來也非常簡單,這樣我們在使用Java Sound API時就不用自己去寫那些復(fù)雜的代碼了,但為了明白Java Sound API的原理,我們需要對它的代碼做一下分析。它使用了Java Sound API中的AudioFormat這個類,這個類非常重要,在Java中對任何音頻數(shù)據(jù)的使用都要實現(xiàn)通過它指定所需要使用的音頻格式,AudioFormat類有一個嵌套的類AudioFormat.Encoding,實際上大部分對AudioFormat類的使用都是使用的這個嵌套的類。
AMAudioFormat類的重要方法:
名稱:getLineAudioFormat
調(diào)用格式:getLineAudioFormat(整型音頻格式代號)
返回值: 根據(jù)傳遞音頻格式代號生成的AudioFormat對象。
說道這里大家可能要問了,那么通過Java Sound API可以直接使用GSM格式嗎?答案是比較復(fù)雜,但同樣有解決的辦法,作者在這里使用了另外的開源程序的類庫-tritonus的GSM編碼解碼庫。大家需要在這里下載tritonous_share.jar和tritonus_gsm.jar兩個文件,并在AMAudioFormat類中引用,這樣就完成了GSM格式的設(shè)置。需要告訴大家的是在對AMAudioFormat.java這個類進(jìn)行編譯后,我們的程序運行的時候就可以不需要tritonous_share.jar和tritonus_gsm.jar這兩個文件的支持了。
② AudioCapture類(封裝在AudioCapture.java文件中)
AudioCapture類封裝了從音頻硬件捕獲音頻數(shù)據(jù)并自動編碼為GSM音頻壓縮數(shù)據(jù)的過程,并且通過它的getAudioInputStream()方法提供給我們一個音頻數(shù)據(jù)輸入流,我們就可以直接將這個流發(fā)送到網(wǎng)絡(luò)中。
AudioCapture 類的重要方法:
名稱:getAudioInputStream
調(diào)用格式:getAudioInputStream()
返回值:AudioInputStream對象
AudioCapture 類使用了Java Sound API中的AudioInputStream、AudioFormat、AudioSystem這幾個類和TargetDataLine、LineListener接口。除了AudioFormat類我再簡單介紹一下其他的類:
AudioInputStream 類是帶有特殊音頻格式和長度的InputStream類,它有兩個構(gòu)造方法,分別是AudioInputStream(InputStream stream, AudioFormat format,long length)和AudioInputStream(TargetData -Line line)。
TargetDataLine 接口是DataLine接口的一種,通過它就可以直接從音頻硬件獲取數(shù)據(jù)了,它有幾個常用的方法,分別是:open(AudioFormat format)、void open(AudioFormat format, int bufferSize)、int read(byte[] b, int off, int len)。
AudioSystem 類是Java標(biāo)準(zhǔn)音頻系統(tǒng)的入口點,在AudioSystem 類中使用他的getLine() 方法創(chuàng)建TargetDataLine對象。
LineListener接口用來對線路狀態(tài)改變的時間進(jìn)行監(jiān)聽,他的重要的方法是update(LineEvent event)方法。
③ AudioPlayStream類(封裝在AudioPlayStream.java文件中)
AudioPlayStream類與AudioCapture類剛好相反,它封裝了GSM壓縮音頻數(shù)據(jù)的解碼和音頻信號的回放過程,提供給我們一個音頻信號輸出流。AudioCapture類用到的Java Sound API中的類它也基本都用到了,只是它使用了SourceDataLine接口而不是TargetDataLine接口
④ Debug類(封裝在Debug.java文件中)
Debug類主要用來在調(diào)試時輸出訊息,代碼很少,后來我把其中輸出信息的語句都屏蔽了,對程序運行沒有影響。
為了方便使用以上的幾個類,我們需要對它們進(jìn)行編譯和打包,編譯時需要設(shè)置相關(guān)的編譯環(huán)境,以下是我們需要用到的命令行
set CLASSPATH=%CLASSPATH%;.;tritonus_gsm.jar;tritonus_share.jar
javac am*.java amaudio*.java
jar cmf packagingmanifest.mf am.jar am*.class
amaudio*.class
說明一下,我將以上提到的Java源碼文件放在了am目錄下,編譯之后可以得到一個8k的am.jar文件,我們下一步所需要做的就是在我們的程序中引用這個包。
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
* 初始化時傳入的字符串,以指定合成用到的一些配置參數(shù),各個參數(shù)以“參數(shù)名=參數(shù)值”的形式出現(xiàn),大小寫不敏感,不同的參數(shù)之間以“
* ,”或“\n”隔開,不設(shè)置任何值時可以傳入NULL或空串:
* @return 如果函數(shù)調(diào)用成功返回MSP_SUCCESS,否則返回錯誤代碼,錯誤代碼參見msp_errors
*/
public int QISRInit(String configs);
/**
* 開始一個ISR會話
*
* @param grammarList
* uri-list格式的語法,可以是一個語法文件的URL或者一個引擎內(nèi)置語法列表。可以同時指定多個語法,不同的語法之間以“,”
* 隔開。進(jìn)行語音聽寫時不需要語法,此參數(shù)設(shè)定為NULL或空串即可;進(jìn)行語音識別時則需要語法,語法可以在此參數(shù)中指定,
* 也可以隨后調(diào)用QISRGrammarActivate指定識別所用的語法。
* @param params
* 本路ISR會話使用的參數(shù),可設(shè)置的參數(shù)及其取值范圍請參考《可設(shè)置參數(shù)列表_MSP20.xls》,各個參數(shù)以“參數(shù)名=參數(shù)值”
* 的形式出現(xiàn),不同的參數(shù)之間以“,”或者“\n”隔開。
* @param errorCode
* 如果函數(shù)調(diào)用成功則其值為MSP_SUCCESS,否則返回錯誤代碼,錯誤代碼參見msp_errors。幾個主要的返回值:
* MSP_ERROR_NOT_INIT 未初始化 MSP_ERROR_INVALID_PARA 無效的參數(shù)
* MSP_ERROR_NO_LICENSE 開始一路會話失敗
* @return MSC為本路會話建立的ID,用來唯一的標(biāo)識本路會話,供以后調(diào)用其他函數(shù)時使用。函數(shù)調(diào)用失敗則會返回NULL。
*/
public String QISRSessionBegin(String grammarList, String params,
IntByReference errorCode);
/**
* 傳入語法
*
* @param sessionID
* 由QISRSessionBegin返回過來的會話ID。
* @param grammar
* 語法字符串
* @param type
* 語法類型,可以是uri-list、abnf、xml等
* @param weight
* 本次傳入語法的權(quán)重,本參數(shù)在MSP 2.0中會被忽略。
* @return 如果函數(shù)調(diào)用成功返回MSP_SUCCESS,否則返回錯誤代碼,錯誤代碼參見msp_errors
*/
public int QISRGrammarActivate(String sessionID, String grammar,
String type, int weight);
/**
* 寫入用來識別的語音
*
* @param sessionID
* 由QISRSessionBegin返回過來的會話ID。
* @param waveData
* 音頻數(shù)據(jù)緩沖區(qū)起始地址
* @param waveLen
* 音頻數(shù)據(jù)長度,其大小不能超過設(shè)定的max_audio_size
* @param audioStatus
* 用來指明用戶本次識別的音頻是否發(fā)送完畢,可能值如下:
* MSP_AUDIO_SAMPLE_FIRST = 1 第一塊音頻
* MSP_AUDIO_SAMPLE_CONTINUE = 2 還有后繼音頻
* MSP_AUDIO_SAMPLE_LAST = 4 最后一塊音頻
* @param epStatus
* 端點檢測(End-point detected)器所處的狀態(tài),可能的值如下:
* MSP _EP_LOOKING_FOR_SPEECH = 0 還沒有檢測到音頻的前端點。
* MSP _EP_IN_SPEECH = 1 已經(jīng)檢測到了音頻前端點,正在進(jìn)行正常的音頻處理。
* MSP _EP_AFTER_SPEECH = 3 檢測到音頻的后端點,后繼的音頻會被MSC忽略。
* MSP _EP_TIMEOUT = 4 超時。
* MSP _EP_ERROR= 5 出現(xiàn)錯誤。
* MSP _EP_MAX_SPEECH = 6 音頻過大。
* @param recogStatus
* 識別器所處的狀態(tài)
* @return
*/
public int QISRAudioWrite(String sessionID, Pointer waveData, int waveLen,
int audioStatus, IntByReference epStatus, IntByReference recogStatus);
/**
* 獲取識別結(jié)果
*
* @param sessionID 由QISRSessionBegin返回過來的會話ID。
* @param rsltStatus 識別結(jié)果的狀態(tài),其取值范圍和含義請參考QISRAudioWrite的參數(shù)recogStatus
* @param waitTime 與服務(wù)器交互的間隔時間,可以控制和服務(wù)器的交互頻度。單位為ms,建議取值為5000。
* @param errorCode 如果函數(shù)調(diào)用成功返回MSP_SUCCESS,否則返回錯誤代碼,錯誤代碼參見msp_errors
* @return 函數(shù)執(zhí)行成功并且獲取到識別結(jié)果時返回識別結(jié)果,函數(shù)執(zhí)行成功沒有獲取到識別結(jié)果時返回NULL
*/
public String QISRGetResult(String sessionID, IntByReference rsltStatus,
int waitTime, IntByReference errorCode);
/**
* 結(jié)束一路會話
*
* @param sessionID 由QISRSessionBegin返回過來的會話ID。
* @param hints 結(jié)束本次會話的原因描述,用于記錄日志,便于用戶查閱或者跟蹤某些問題。
* @return
*/
public int QISRSessionEnd(String sessionID, String hints);
/**
* 獲取與識別交互相關(guān)的參數(shù)
*
* @param sessionID 由QISRSessionBegin返回過來的會話ID。
* @param paramName 要獲取的參數(shù)名稱;支持同時查詢多個參數(shù),查詢多個參數(shù)時,參數(shù)名稱按“,” 或“\n”分隔開來。
* @param paramValue 獲取的參數(shù)值,以字符串形式返回;查詢多個參數(shù)時,參數(shù)值之間以“;”分開,不支持的參數(shù)將返回空的值。
* @param valueLen 參數(shù)值的長度。
* @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 */ /* 試用次數(shù)結(jié)束,用戶需要付費 */
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 */ /* 系統(tǒng)錯誤 */
/* 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 */