先從官網下載sdk,有點不懂下載的邏輯..
文件解析:
bin/inc下有四個頭文件:msp_errors.h msp_types.h qisr.h qtts.h
msp_errors.h msp_types.h為通用數據結構的頭文件,qisr.h是語音識別用的頭文件,qtts.h是語音合成用的頭文件。
這是sdk中原代的解釋:
1.doc目錄下存放開發文檔等; 2.lib目錄下存放SDK需要調用的動態庫以及需要引用的頭文件。 3.example目錄下存放提供的示例demo,每個例子下都有Makefile文件,在當前目錄make即可; 4.bin目錄下存放符合標准的語音文件樣例、配置文件和資源文件等,make之后的example可執行程序也會拷貝至此,請在此目錄下運行,否則會運行失敗; 5.prj目錄下提供make腳本,可以快速編譯例子。
然后我按照它的指示,在example下的asrdome下make,然而報錯:找不到 lasound,去看它的makefile文件,其中需要這個庫,在網上搜了一下,解決方案如下:
sudo apt-get install alsa-base alsa-utils alsa-source libasound2-dev
重新編譯,又報錯,警告:檢測到時鍾錯誤。您的創建可能是不完整的。
將之前編譯創建的 “asrdemo.o” 刪除 繼續,編譯成功。
然后再bin下生成了"asrdemo"可執行文件,在bin目錄下運行(./asrdemo)
運行成功。
然而 輸出的結果是一堆代碼,里面夾雜識別的話。在網上查了一下,代碼的函數邏輯大概如下
1.先要調用QISRInit()函數,參數是自己的appid,每個SDK都是注冊才能下載的,所以是唯一的,用來區分用戶的,不同級別的用戶每天可以使用SDK的次數有限制,畢竟人用的多了語音識別的性能肯定會下降;
2.之后就是把GrammarID,輸入輸出的參數param和調用狀態返回值ret作為參數傳入QISRSessionBegin()函數中進行初始化,返回值是sessionID,這個是后面所有函數的主要參數之一;
3.打開自己的音頻文件,調用QISRAudioWrite()函數寫入,可以分段也可以一次,第一個參數是sessionID,上面初始化函數返回的值,第二個參數是音頻數據頭指針,第三個參數是音頻文件大小,第四個參數是音頻發送的狀態,表示發送完了沒有,剩下兩個是服務器端檢測語音狀態和識別狀態的返回值;
4.調用QISRGetResult()函數獲取識別的結果,第一個參數還是sessionID,第二個參數是輸出識別的狀態,第三個參數是與服務器交互的間隔時間,官方建議5000,我取為0,第四個參數是調用狀態返回值ret,最后這個函數的返回值就是上面結果的json數據了
錄制語音時,使用“ffmpeg”錄音,簡單方便,符合語音識別的要求。
訊飛語音對語音的要求如下:采樣率16K或8KHz,采樣位是16位,單聲道,格式是PCM或WAV。自帶的錄音軟件都是默認32位采樣,只能用ffmpeg或自己寫代碼錄制,ffmpeg命令如下:
ffmpeg -f alsa -ar 16000 -ac 1 -i hw:0 lib.wav
出處:http://www.cnblogs.com/farewell-farewell/p/6086853.html