訊飛提供msc.dll這個dll,呼叫dll的封裝:
///
/// mscdll入口封裝
///
private class mscdll
說明一下:「qisruploaddata」(上傳詞庫)這個函式在開發文件裡面沒的,訊飛遺漏了。
類:mscnet
#region 定義字段
//返回錯誤代號
private int ret = 0;
private recoerrors re = null;
///
/// 會話id
///
private string sess_id = null;
///
/// 引數
///
private string param = null;
///
/// 語法
///
private string grammar = null;
//錯誤訊息通知託管
public delegate void delegdateonerror(string msg);
private string path = null;
///
/// 識別資料返回的事件
///
public event eventhandlerdataarrived;
///
/// 識別過程結束的事件
///
public event eventhandler isrend;
///
/// 正在識別
///
public event eventhandler spoting;
#endregion
#region 建構函式
///
/// 建構函式,初始化引擎
///
/// 引數
/// 語法id
/// 路徑
catch (mscexception ex)
}#endregion
#region 公共方法
///
/// 開始識別語音
///
/// 音訊資料
public void interpretvoice(byte buffer)
intptr p = mscdll.qisrgetresult(sess_id, ref rslt_status, 0, ref ret);
re.geterror(ret);
if (p != intptr.zero)
system.threading.thread.sleep(500);
} while (rslt_status != recogstatus.isr_rec_status_speech_complete);
}catch (mscexception ex)
finally
catch (mscexception ex)}}
///
/// 上傳詞庫詞庫採用是utf8格式
///
/// 詞庫名稱
/// 詞庫路徑
/// 引數
/// 返回詞庫編號
public string getexid(string txtfile, string path, string param)}}
catch (filenotfoundexception ex)
}catch (mscexception ex)
finally
catch (mscexception ex)}}
else
return tmp;
}///
/// 對msc的isr部分進行逆初始化。
///
public void qisrfini()
catch (mscexception ex)
}#endregion
#region 受保護方法
///
/// 載入語法
///
private void loadgrammar()
catch (mscexception ex)
}///
/// 指標轉字串
///
/// 指向非託管**字串的指標
/// 返回指標指向的字串
private string ptrtostr(intptr p)
}catch (accessviolationexception ex)
return encoding.default.getstring(lb.toarray());
}
#endregion
#region 事件
///
/// 錯誤通知事件
///
public event delegdateonerror onerror;
private void raiseerror(string msg)
}///
/// 有識別資料返回的事件引數,包含了識別的文字結果
///
public class dataarrivedeventargs : eventargs
}#endregion
如果採用abnf語法,只是與文字詞庫載入語法方式有點不一樣:
///
/// 載入語法
///
private void loadgrammar()
catch (mscexception ex)}
常量的列舉:
自定義異常:
public mscexception()
public mscexception(string message)
: base(message)
public mscexception(string message, exception inner)
: base(message, inner)
} ///
/// 是否出錯
///
internal class recoerrors
///
/// 是否發生錯誤.
///
/// 錯誤id
public virtual void geterror(int id)}}
訊飛語音支援邊錄邊上傳,不過我這裡採用是一次性上傳。起初我採用的是邊錄邊上傳,不過感覺有數字混合後識別正常率不好(還沒跟訊飛那邊溝通。),最後才使用一次性上傳,畢竟語音檔案也不是大就200kb一下。訊飛語音識別不支援多執行緒識別。
我做的這個語音識別產品,做成服務端與客戶端。服務端:放在乙個能連線外網機子上提供語音識別(做了乙個簡單佇列),客戶端:將音訊資料採集後傳送到區域網內的語音識別服務端進行識別。
以上有些**是借助別人的,第一次寫大家盡量不要吐槽,不過可以給點意見。大家相互學習...
分類:
c#標籤:
c#,
winfrom,
語音識別,
訊飛語音
iphone之使用訊飛語音sdk實現語音識別功能
2 學習裡面的demo簡單實現了乙個小的語音識別功能 先做乙個簡單demo,看看識別效果。注 語音識別必須聯網。所有介面必需在聯網狀態下才能正常使用。效果圖 uiimageview speechimage 聲音 iflyspeechrecognizer iflyspeechrecognizer 語音...
訊飛語音轉寫
邏輯 語音上傳 prepare 訊飛 返回乙個task id 音訊分片上傳 upload 訊飛,呼叫多次,直到檔案全部上傳完成 合併音訊merge 訊飛 每三分鐘呼叫getprogress 訊飛 得到結果getresult 訊飛 訊飛官方文件 介面呼叫流程 安裝外掛程式 js md5 和 crypt...
訊飛語音SDK提示使用者校驗失敗10407
在使用訊飛語音sdk中遇到錯誤 使用者校驗失敗10407。原因是乙個應用申請的 sdk 包括jar和本地庫 具有一致性,sdk不通用。另外吐槽一下,訊飛開放平台裡只能新增應用,不能刪除,強迫症不能忍。在使用人臉鑑別時需要建立組,並且在引數裡需要設定speechconstant.auth id 邏輯上...