[TOC]
## 使用麥克風當音聽寫示例
~~~
//1.創建SpeechRecognizer對象
SpeechRecognizer mIat= SpeechRecognizer.createRecognizer( );
//2.設置聽寫參數,詳見《MSC Reference Manual》SpeechConstant類
mIat.setParameter(SpeechConstant.DOMAIN, "iat");
mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
mIat.setParameter(SpeechConstant.ACCENT, "mandarin ");
//3.開始聽寫
mIat.startListening(mRecoListener);
//聽寫監聽器
private RecognizerListener mRecoListener = new RecognizerListener(){
//聽寫結果回調接口(返回Json格式結果,用戶可參見附錄);
//一般情況下會通過onResults接口多次返回結果,完整的識別內容是多次結果的累加;
//關于解析Json的代碼可參見MscDemo中JsonParser類;
//isLast等于true時會話結束。
public void onResult(RecognizerResult results, boolean isLast){
DebugLog.Log("Result:"+results.getResultString ());
}
//會話發生錯誤回調接口
public void onError(SpeechError error) {
error.getPlainDescription(true) //獲取錯誤碼描述
}
//開始錄音
public void onBeginOfSpeech() {}
//音量值0~30
public void onVolumeChanged(int volume){}
//結束錄音
public void onEndOfSpeech() {}
//擴展用接口
public void onEvent(int eventType,int arg1,int arg2,String msg) {}
};
~~~
## 使用音頻文件聽寫示例
~~~
//1.創建SpeechRecognizer對象
SpeechRecognizer mIat= SpeechRecognizer.createRecognizer( );
//2.設置聽寫參數,詳見《MSC Reference Manual》SpeechConstant類
mIat.setParameter(SpeechConstant.DOMAIN, "iat");
mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
mIat.setParameter (SpeechConstant.ACCENT, "mandarin ");
mIat.setParameter(SpeechConstant.AUDIO_SOURCE, "-1");
//3.開始聽寫
mIat.startListening(mRecoListener);
//voiceBuffer為音頻數據流,splitBuffer為自定義分割接口,將其以4.8k字節分割成數組
ArrayList<byte[]> buffers = splitBuffer(voiceBuffer,voiceBuffer.length, 4800);
for (int i = 0; i < buffers.size(); i++) {
// 每次寫入msc數據4.8K,相當150ms錄音數據
mIat.writeAudio(buffers.get(i), 0, buffers.get(i).length);
}
mIat.stopListening();
//聽寫監聽器
private RecognizerListener mRecoListener = new RecognizerListener(){
public void onResult(RecognizerResult results, boolean isLast) {
DebugLog.Log("Result:"+results.getResultString ());
}
//會話發生錯誤回調接口
public void onError(SpeechError error) {
error.getPlainDescription(true) //獲取錯誤碼描述
}
//開始錄音
public void onBeginOfSpeech() {}
//音量值0~30
public void onVolumeChange( int volume ) {}
}
~~~
## 上傳用戶詞表
上傳用戶詞表可以提高詞表內詞匯的識別率,也可以提高語義的效果,每個用戶終端設備對應一個詞表,用戶詞表的格式及構造方法詳見[《MSC Reference Manual》](http://mscdoc.xfyun.cn/java/api)UserWords類。
~~~
private void uploadUserWords() {
SpeechRecognizer recognizer = SpeechRecognizer.getRecognizer();
UserWords userwords = new UserWords(USER_WORDS);
recognizer.setParameter( SpeechConstant.DATA_TYPE, "userword" );
recognizer.updateLexicon("userwords", userwords.toString(), lexiconListener);
}
/**
* 詞表上傳監聽器
*/
LexiconListener lexiconListener = new LexiconListener() {
@Override
public void onLexiconUpdated(String lexiconId, SpeechError error) {
if (error == null)
DebugLog.Log("*************上傳成功*************");
else
DebugLog.Log("*************" + error.getErrorCode()+ "*************");
}
};
~~~