package com.cnblogs.htynkn;
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了龍沙免費(fèi)建站歡迎大家使用!
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ù),各個(gè)參數(shù)以“參數(shù)名=參數(shù)值”的形式出現(xiàn),大小寫不敏感,不同的參數(shù)之間以“
* ,”或“\n”隔開(kāi),不設(shè)置任何值時(shí)可以傳入NULL或空串:
* @return 如果函數(shù)調(diào)用成功返回MSP_SUCCESS,否則返回錯(cuò)誤代碼,錯(cuò)誤代碼參見(jiàn)msp_errors
*/
public int QISRInit(String configs);
/**
* 開(kāi)始一個(gè)ISR會(huì)話
*
* @param grammarList
* uri-list格式的語(yǔ)法,可以是一個(gè)語(yǔ)法文件的URL或者一個(gè)引擎內(nèi)置語(yǔ)法列表??梢酝瑫r(shí)指定多個(gè)語(yǔ)法,不同的語(yǔ)法之間以“,”
* 隔開(kāi)。進(jìn)行語(yǔ)音聽(tīng)寫時(shí)不需要語(yǔ)法,此參數(shù)設(shè)定為NULL或空串即可;進(jìn)行語(yǔ)音識(shí)別時(shí)則需要語(yǔ)法,語(yǔ)法可以在此參數(shù)中指定,
* 也可以隨后調(diào)用QISRGrammarActivate指定識(shí)別所用的語(yǔ)法。
* @param params
* 本路ISR會(huì)話使用的參數(shù),可設(shè)置的參數(shù)及其取值范圍請(qǐng)參考《可設(shè)置參數(shù)列表_MSP20.xls》,各個(gè)參數(shù)以“參數(shù)名=參數(shù)值”
* 的形式出現(xiàn),不同的參數(shù)之間以“,”或者“\n”隔開(kāi)。
* @param errorCode
* 如果函數(shù)調(diào)用成功則其值為MSP_SUCCESS,否則返回錯(cuò)誤代碼,錯(cuò)誤代碼參見(jiàn)msp_errors。幾個(gè)主要的返回值:
* MSP_ERROR_NOT_INIT 未初始化 MSP_ERROR_INVALID_PARA 無(wú)效的參數(shù)
* MSP_ERROR_NO_LICENSE 開(kāi)始一路會(huì)話失敗
* @return MSC為本路會(huì)話建立的ID,用來(lái)唯一的標(biāo)識(shí)本路會(huì)話,供以后調(diào)用其他函數(shù)時(shí)使用。函數(shù)調(diào)用失敗則會(huì)返回NULL。
*/
public String QISRSessionBegin(String grammarList, String params,
IntByReference errorCode);
/**
* 傳入語(yǔ)法
*
* @param sessionID
* 由QISRSessionBegin返回過(guò)來(lái)的會(huì)話ID。
* @param grammar
* 語(yǔ)法字符串
* @param type
* 語(yǔ)法類型,可以是uri-list、abnf、xml等
* @param weight
* 本次傳入語(yǔ)法的權(quán)重,本參數(shù)在MSP 2.0中會(huì)被忽略。
* @return 如果函數(shù)調(diào)用成功返回MSP_SUCCESS,否則返回錯(cuò)誤代碼,錯(cuò)誤代碼參見(jiàn)msp_errors
*/
public int QISRGrammarActivate(String sessionID, String grammar,
String type, int weight);
/**
* 寫入用來(lái)識(shí)別的語(yǔ)音
*
* @param sessionID
* 由QISRSessionBegin返回過(guò)來(lái)的會(huì)話ID。
* @param waveData
* 音頻數(shù)據(jù)緩沖區(qū)起始地址
* @param waveLen
* 音頻數(shù)據(jù)長(zhǎng)度,其大小不能超過(guò)設(shè)定的max_audio_size
* @param audioStatus
* 用來(lái)指明用戶本次識(shí)別的音頻是否發(fā)送完畢,可能值如下:
* MSP_AUDIO_SAMPLE_FIRST = 1 第一塊音頻
* MSP_AUDIO_SAMPLE_CONTINUE = 2 還有后繼音頻
* MSP_AUDIO_SAMPLE_LAST = 4 最后一塊音頻
* @param epStatus
* 端點(diǎn)檢測(cè)(End-point detected)器所處的狀態(tài),可能的值如下:
* MSP _EP_LOOKING_FOR_SPEECH = 0 還沒(méi)有檢測(cè)到音頻的前端點(diǎn)。
* MSP _EP_IN_SPEECH = 1 已經(jīng)檢測(cè)到了音頻前端點(diǎn),正在進(jìn)行正常的音頻處理。
* MSP _EP_AFTER_SPEECH = 3 檢測(cè)到音頻的后端點(diǎn),后繼的音頻會(huì)被MSC忽略。
* MSP _EP_TIMEOUT = 4 超時(shí)。
* MSP _EP_ERROR= 5 出現(xiàn)錯(cuò)誤。
* MSP _EP_MAX_SPEECH = 6 音頻過(guò)大。
* @param recogStatus
* 識(shí)別器所處的狀態(tài)
* @return
*/
public int QISRAudioWrite(String sessionID, Pointer waveData, int waveLen,
int audioStatus, IntByReference epStatus, IntByReference recogStatus);
/**
* 獲取識(shí)別結(jié)果
*
* @param sessionID 由QISRSessionBegin返回過(guò)來(lái)的會(huì)話ID。
* @param rsltStatus 識(shí)別結(jié)果的狀態(tài),其取值范圍和含義請(qǐng)參考QISRAudioWrite的參數(shù)recogStatus
* @param waitTime 與服務(wù)器交互的間隔時(shí)間,可以控制和服務(wù)器的交互頻度。單位為ms,建議取值為5000。
* @param errorCode 如果函數(shù)調(diào)用成功返回MSP_SUCCESS,否則返回錯(cuò)誤代碼,錯(cuò)誤代碼參見(jiàn)msp_errors
* @return 函數(shù)執(zhí)行成功并且獲取到識(shí)別結(jié)果時(shí)返回識(shí)別結(jié)果,函數(shù)執(zhí)行成功沒(méi)有獲取到識(shí)別結(jié)果時(shí)返回NULL
*/
public String QISRGetResult(String sessionID, IntByReference rsltStatus,
int waitTime, IntByReference errorCode);
/**
* 結(jié)束一路會(huì)話
*
* @param sessionID 由QISRSessionBegin返回過(guò)來(lái)的會(huì)話ID。
* @param hints 結(jié)束本次會(huì)話的原因描述,用于記錄日志,便于用戶查閱或者跟蹤某些問(wèn)題。
* @return
*/
public int QISRSessionEnd(String sessionID, String hints);
/**
* 獲取與識(shí)別交互相關(guān)的參數(shù)
*
* @param sessionID 由QISRSessionBegin返回過(guò)來(lái)的會(huì)話ID。
* @param paramName 要獲取的參數(shù)名稱;支持同時(shí)查詢多個(gè)參數(shù),查詢多個(gè)參數(shù)時(shí),參數(shù)名稱按“,” 或“\n”分隔開(kāi)來(lái)。
* @param paramValue 獲取的參數(shù)值,以字符串形式返回;查詢多個(gè)參數(shù)時(shí),參數(shù)值之間以“;”分開(kāi),不支持的參數(shù)將返回空的值。
* @param valueLen 參數(shù)值的長(zhǎng)度。
* @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é)束,用戶需要付費(fèi) */
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無(wú)效 */
public static final int ERROR_LOGIN_INVALID_PWD = 11006; /* 0x2AFE */ /* 用戶密碼無(wú)效 */
public static final int ERROR_LOGIN_SYSTEM_ERROR= 11099; /* 0x2B5B */ /* 系統(tǒng)錯(cuò)誤 */
/* 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 */
這個(gè)是可以實(shí)現(xiàn)的。
注:test.pcm是語(yǔ)音文件,可以用audacity軟件打開(kāi),選擇 文件-導(dǎo)入-裸數(shù)據(jù)。 設(shè)置采樣率為8000Hz。點(diǎn)擊播放就能聽(tīng)見(jiàn)聲音了。
這個(gè)時(shí)候程序跑起來(lái)還有問(wèn)題,需要將apiKey 以及secretKey填寫上。這兩個(gè)值是你申請(qǐng)應(yīng)用對(duì)應(yīng)的分配好的。
cuid填本機(jī)mac地址就可以了,這個(gè)值我試過(guò)好像無(wú)所謂沒(méi)啥要求。
程序能跑起來(lái),并且按照正常返回識(shí)別的語(yǔ)音結(jié)果。但是返回結(jié)果的編碼為GBK,所以漢字顯示為亂碼,需要對(duì)其進(jìn)行一次轉(zhuǎn)碼。轉(zhuǎn)碼的代碼是我自己加上去的
修改LogWriter類的靜態(tài)域即可隨意切換輸出了。main方法中代碼不用改變。
代碼如下:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class WriteOut {
public static void main(String[] args) throws IOException {
LogWriter.log("log info...");
}
}
class LogWriter {
// 可以寫作配置:true寫文件; false輸出控制臺(tái)
private static boolean fileLog = true;
private static String logFileName = "/tmp/log.log";
public static void log(String info) throws IOException {
OutputStream out = getOutputStream();
out.write(info.getBytes("utf-8"));
}
public static OutputStream getOutputStream() throws IOException {
if (fileLog) {
File file = new File(logFileName);
if (!file.exists())
file.createNewFile();
return new FileOutputStream(file);
} else {
return System.out;
}
}
}
這塊國(guó)內(nèi)一般都用科大訊飛的語(yǔ)音云來(lái)做語(yǔ)音識(shí)別。不過(guò)那個(gè)接口是c/c++的,用JAVA來(lái)調(diào)用的話要通過(guò)java調(diào)用dll的技術(shù),類似于 jni 或者 jna 都可以
NewPhone類
package?com.baidu.question;
public?class?NewPhone?extends?Phone?{
private?boolean?mute?=?true;
@Override
public?void?call()?{
if(mute){
super.call();
}else{
System.out.println("語(yǔ)音已關(guān)閉");
}
}
//這里是直接設(shè)置
public?void?setMute(boolean?mute){
this.mute=mute;
}
//擔(dān)心你的題目是要求兩種方法,寫的第二種,下面兩個(gè)方法負(fù)責(zé)開(kāi)關(guān)
public?void?openMute(){
this.mute=true;
/*
*?也可以這樣寫
*?setMute(true);
*?下邊的方法一樣
*?*/
}
public?void?closeMute(){
this.mute?=?false;
}
}
Phone類
package?com.baidu.question;
public?class?Phone?{
public?void?call(){
System.out.println("打電話");
}
}
測(cè)試類
package?com.baidu.question;
public?class?PhoneTest?{
public?static?void?main(String[]?args)?{
Phone?phone?=?new?Phone();
phone.call();
NewPhone?newPhone?=?new?NewPhone();
newPhone.call();
newPhone.setMute(false);
newPhone.call();
newPhone.openMute();
newPhone.call();
newPhone.closeMute();
newPhone.call();
}
}
測(cè)試結(jié)果
打電話
打電話
語(yǔ)音已關(guān)閉
打電話
語(yǔ)音已關(guān)閉
直接接入第三發(fā)的SDK就好,試試ZEGO即構(gòu)科技的語(yǔ)音SDK吧,直接通過(guò)四行代碼就可以接入,不用自己研發(fā),省時(shí)省力。
并且這個(gè)的語(yǔ)音通話功能很好,沒(méi)有卡頓、延遲、回聲等情況,音質(zhì)很細(xì)膩。