自2019/8/16起,高階實用功能-動態圖片調整 免費資源放開!可到這里 動態修正效果 (opens new window) 在線體驗
使用方法詳見 動態修正
語音聽寫詳細的接口介紹及說明請參考: MSC Java API 文檔 (opens new window), 在集成過程中如有疑問,可登錄,查找答案或與其他開發者交流。
小語種:暫不支持小語種!
bin:
lib:
msc:
res:
src:
import com.iflytek.cloud.speech.SpeechRecognizer;
// 將“XXXXXXXX”截取成您公司申請的APPID
SpeechUtility.createUtility( SpeechConstant.APPID +"=XXXXXXXX ");
private RecognizerListener recognizerListener = new RecognizerListener() {
@Override
public void onBeginOfSpeech() {
DebugLog.Log( "onBeginOfSpeech enter" );
((JLabel) jbtnRecognizer.getComponent(0)).setText("聽寫中...");
jbtnRecognizer.setEnabled(false);
}
@Override
public void onEndOfSpeech() {
DebugLog.Log( "onEndOfSpeech enter" );
}
/**
* 調用聽寫報告單. 調用RecognizerResult內型的設別報告單,并對報告單展開累計,顯示信息到Area里
*/
@Override
public void onResult(RecognizerResult results, boolean islast) {
DebugLog.Log( "onResult enter" );
//若果要剖析json最終結果,請借鑒本項目流程樣例的 com.iflytek.util.JsonParser類
// String text = JsonParser.parseIatResult(results.getResultString());
String text = results.getResultString();
resultArea.append(text);
text = resultArea.getText();
if( null!=text ){
int n = text.length() / TEXT_COUNT + 1;
int fontSize = Math.max( 10, DEF_FONT_SIZE - 2*n );
DebugLog.Log( "onResult new font size="+fontSize );
int style = n>1 ? Font.PLAIN : DEF_FONT_SIZE;
Font newFont = new Font( DEF_FONT_NAME, style, fontSize );
resultArea.setFont( newFont );
}
if( islast ){
iatSpeechInitUI();
}
}
@Override
public void onVolumeChanged(int volume) {
DebugLog.Log( "onVolumeChanged enter" );
if (volume == 0)
volume = 1;
else if (volume >= 6)
volume = 6;
labelWav.setIcon(new ImageIcon("res/mic_0" + volume + ".png"));
}
@Override
public void onError(SpeechError error) {
DebugLog.Log( "onError enter" );
if (null != error){
DebugLog.Log("onError Code:" + error.getErrorCode());
resultArea.setText( error.getErrorDescription(true) );
iatSpeechInitUI();
}
}
@Override
public void onEvent(int eventType, int arg1, int agr2, String msg) {
DebugLog.Log( "onEvent enter" );
//下面源代碼代替復位,如若會出現間題會將sid能提供給訊飛開發設計者,代替間題精準定位進行排查
/*if(eventType == SpeechEvent.EVENT_SESSION_ID) {
DebugLog.Log("sid=="+msg);
}*/
}
};
public void RecognizePcmfileByte() {
SpeechRecognizer recognizer = SpeechRecognizer.getRecognizer();
recognizer.setParameter(SpeechConstant.AUDIO_SOURCE, "-1");
//寫音響流時,zip文件是廣泛應用層多余的,不用說再存有
//recognizer.setParameter(SpeechConstant.ASR_AUDIO_PATH,
// "./iat_test.pcm");
recognizer.setParameter( SpeechConstant.RESULT_TYPE, "plain" );
recognizer.startListening(recListener);
FileInputStream fis = null;
final byte[] buffer = new byte[64*1024];
try {
fis = new FileInputStream(new File("./test.pcm"));
if (0 == fis.available()) {
mResult.append("no audio avaible!");
recognizer.cancel();
} else {
int lenRead = buffer.length;
while( buffer.length==lenRead && !mIsEndOfSpeech ){
lenRead = fis.read( buffer );
recognizer.writeAudio( buffer, 0, lenRead );
}//end of while
recognizer.stopListening();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != fis) {
fis.close();
fis = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}//end of try-catch-finally
}
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()+ "*************");
}
};
未開啟與開啟返回的結果格式不同,若開通了動態修正功能并設置了dwa=wpgs(僅中文支持),會有如下字段返回:
參數 | 類型 | 描述 |
---|---|---|
pgs | string | 開啟wpgs會有此字段 取值為 "apd"時表示該片結果是追加到前面的最終結果;取值為"rpl" 時表示替換前面的部分結果,替換范圍為rg字段 |
rg | array | 替換范圍,開啟wpgs會有此字段 假設值為[2,5],則代表要替換的是第2次到第5次返回的結果 |
net_type=custom, proxy_ip=<host>, proxy_port=<port>
其中,<host>,<port>替換為實際的代理服務器地址和端口。
隨后:SpeechUtility.createUtility(SpeechConstant.APPID + “=12345678” + “,” + “net_type=custom, proxy_ip=192.168.1.2, proxy_port=8080”); 還要注意:各性能間,以日語單引號劃分。
音頻接口原行: public static SpeechUtility createUtility(java.lang.String params)
注意: 若在設置代理參數后,使用語音服務過程中,報錯10204/10205/10212等網絡異常錯誤時,請查閱以下內容,做出相關操作:
- 訊飛語音SDK的通信協議使用的是標準HTTP1.1協議,其代理協議使用的是標準HTTP代理協議。
- 代理服務器需要支持全雙工多問多答方式,即 pipeline 模式。
- 代理服務器不能對80端口做限制,不能對如下域名做攔截: hdns.openspeech.cn scs.openspeech.cn open.xf-yun.com dev.voicecloud.cn
- 需要確保代理服務器只負責轉發數據包,不能改變數據包的完整性和時序性。
- 代理服務器在轉發數據包時,不能在HTTP協議頭部添加 IE6 標識頭。
參數名稱 | 名稱 | 說明 |
---|---|---|
domain | 應用領域 | 應用領域 iat:日常用語 medical:醫療 注:醫療領域若未授權無法使用,可到控制臺-語音聽寫(流式版)-高級功能處添加試用或購買;若未授權無法使用會報錯11200。 |
language | 語言區域 | 選擇要使用的語言區域,目前sdk支持中文:zh_cn,英文:en_us。 |
accent | 方言 | 當前僅在LANGUAGE為簡體中文時,支持方言選擇,其他語言區域時, 請把此參數值設為null。默認值:中文普通話(mandarin),其他方言參數可在控制臺方言一欄查看。 |
vad_bos | 前端點超時 | 開始錄入音頻后,音頻前面部分最長靜音時長 聽寫默認值5000ms,取值范圍[1000ms,10000ms]。 |
vad_eos | 后端點超時 | 開始錄入音頻后,音頻后面部分最長靜音時長,聽寫默認值1800ms,取值范圍[0,10000ms]。 |
sample_rate | 采樣率 | 音頻的采樣率是音頻屬性的其中一個,一般來說,采樣率越高音頻的質量越好,識別的匹配率越高,但上傳帶寬消耗也越大。聽寫:支持采樣率{8KHZ,16KHZ}。 |
nbest | 句子多侯選 | 通過設置此參數,獲取在發音相似時的句子多侯選結果。設置多候選會影響性能,響應時間延遲200ms左右。取值范圍:聽寫[1,5]。 注:該擴展功能若未授權無法使用,可到控制臺-語音聽寫(流式版)-高級功能處免費開通;若未授權狀態下設置該參數并不會報錯,但不會生效。 |
wbest | 詞語多侯選 | 通過設置此參數,獲取在發音相似時的詞語多侯選結 果。設置多候選會影響性能,響應時間延遲200ms左右。取值范圍:聽寫[1,5]。 注:該擴展功能若未授權無法使用,可到控制臺-語音聽寫(流式版)-高級功能處免費開通;若未授權狀態下設置該參數并不會報錯,但不會生效。 |
result_type | 結果類型 | 結果類型包括:xml, json, plain。xml和json即對應的結構化文本結構,plain即自然語言的文本。 |
ptt | 標點 | (僅中文支持)是否開啟標點符號添加1:開啟(默認值)0:關閉 ;示例:this.mParamMap.put( SpeechConstant.ASR_PTT, DefaultValue.PTT ); |
注: 多候選效果是由引擎決定的,并非絕對的。即使設置了多候選,如果引擎并沒有識別出候選的詞或句,返回結果也還是單個。
備注:以上均為SDK常用參數說明,更多詳細參數請參考:.
JSON字段 | 英文全稱 | 類型 | 說明 |
---|---|---|---|
sn | sentence | number | 第幾句 |
ls | last sentence | boolean | 是否最后一句 |
bg | begin | number | 保留字段,無需關注 |
ed | end | number | 保留字段,無需關注 |
ws | words | array | 詞 |
cw | chinese word | array | 中文分詞 |
w | word | string | 單字 |
sc | score | number | 分數 |
{
"sn": 1,
"ls": true,
"bg": 0,
"ed": 0,
"ws": [
{
"bg": 0,
"cw": [
{
"w": "令天",
"sc": 0
}
]
},
{
"bg": 0,
"cw": [
{
"w": "的",
"sc": 0
}
]
},
{
"bg": 0,
"cw": [
{
"w": "天氣",
"sc": 0
}
]
},
{
"bg": 0,
"cw": [
{
"w": "怎么能樣",
"sc": 0
}
]
},
{
"bg": 0,
"cw": [
{
"w": "。",
"sc": 0
}
]
}
]
}
{
"sn": 1,
"ls": false,
"bg": 0,
"ed": 0,
"ws": [
{
"bg": 0,
"cw": [
{
"w": "想必聽",
"sc": 0
}
]
},
{
"bg": 0,
"cw": [
{
"w": "拉德斯基進行曲",
"sc": 0
},
{
"w": "拉得斯實行曲",
"sc": 0
}
]
}
]
}
答:請診斷是不是忘啦利用SpeechUtility原始化。 也能夠 在聽寫監聽器器的onError涵數中網頁打印不正確資訊,會按照資訊警告,查看不正確源。
答:Java網絡平臺短暫不支撐地方學習能力。
答:在createUtility插口中獲取:server_url = http://YourDomainName/msp.do (YourDomainName所指微信語音网络赚钱平台提供服務阿里网络赚钱平台域名,請制作者擅自替代) 列舉:SpeechUtility.createUtility(SpeechConstant.APPID + "=12345678" + "," + "server_url = http://sdk.openspeech.cn/msp.do"); 注重:各基本參數間,以英語怎么說句號分倉縫。 插口扮演: public static SpeechUtility createUtility(java.lang.String params)
答:sdk:業主端滿足規劃,鼓勵軟件Android、ios、windows、linux、Java網站,不鼓勵軟件高潛在; webapi:安全服務端滿足規劃,不要求網站、不要求語言英語,鼓勵軟件高潛在。
答:如要使用性能數據,各大性能數據使用考慮SpeechConstant類
答:原因可能是:
1、音頻格式不正確,客戶端支持的音頻編解碼算法只支持16位Intel PCM格式的音頻,請使用Cool Edit Pro工具(網頁搜索下載即可)查看音頻格式,sdk目前支持的格式是 pcm 和 wav 格式、音頻采樣率要是 16k 或者 8k、采樣精度16 位、單聲道音頻。請使用cool edit軟件(網頁搜索下載此軟件即可)查看音頻格式是否滿足相應的識別引擎類型
2、引擎的參數設置不正確,如沒有設置好正確的引擎類型和采樣率等。
3、音頻中間有靜音或者雜音音頻超過了后端點(默認為2000ms)的設置,此時請使用Cool Edit Pro工具查看音頻內容,并且設置后端點(vad_eos)為最大值10000ms
包含超過后端點最大值的靜音或者雜音音頻識別不完整是正常的。
答:語音聽寫的功能是可以識別60S以內的短音頻,將音頻轉化成文本信息。
聽寫sdk目前支持的格式是 pcm 和 wav 格式、音頻采樣率要是 16k 或者 8k、采樣精度16 位、單聲道音頻。請使用cool edit軟件(網頁搜索下載此軟件即可)查看音頻格式是否滿足相應的識別引擎類型,否則識別為空或者識別為錯誤文本,格式必須正確,除上述格式均不識別,音頻格式一定要滿足要求。現語音聽寫WebAPI接口的中文普通話和英文支持mp3格式,如有需要,請參考語音聽寫(流式版)WebAPI (opens new window)
具體可以參考:http://bbs.teknisi-computer.com/forum.php?mod=viewthread&tid=7051
另外我們識別的音頻長度最大為 60S,在使用音頻是要注意你的本地音頻的參數要和代碼里的讀取音頻參數保持一致
答:文檔中心---快速指引 (opens new window)有介紹步驟---根據步驟下載Java在線聽寫sdk
SDK一般話題: