1. 程式人生 > 其它 >Visual studio 2019使用Microsoft Speech SDK 5.1語音識別

Visual studio 2019使用Microsoft Speech SDK 5.1語音識別

技術標籤:c++

目錄

下載安裝Speech SDK

配置visual studio 2019專案環境

測試能否執行

解決執行報錯

修改Speech SDK檔案的儲存問題


下載安裝Speech SDK

由於官網相關包已經無法下載,大家可自己尋找TTS.rar和TTSlang.rar兩個包的資源

安裝好Speech SDK後,語音控制程式將被新增到 “控制面板”->“語音”選項中,

利用下圖對話方塊可以設定語音識別和文字-語音轉換的各項屬性,包括語言、語調、語速和輸入裝置等。

配置visual studio 2019專案環境

  • 先建立一個空專案project1,下新增原始檔test.cpp
  • 右鍵點選上圖中“Project1”

  • 點選“屬性”-VC++目錄

    1

    1.在“包含目錄”後地址框-點選下拉箭頭-點選編輯,開啟圖片2所示“包含目錄”-點選圖2所圈“新行”圖示-下方框中出現一行-點選行後“…”圖示-選擇\Microsoft Speech SDK 5.1\Include-新增完成

    2

    2.在“庫目錄”,同理操作……選擇\Microsoft Speech SDK 5.1\Lib\i386-新增完成

  • 點選“應用”-“確定”

  • 配置完成

測試能否執行

使用測試程式碼

#include <sphelper.h>//語音標頭檔案
#include <iostream>//C++標頭檔案,用來提示錯誤資訊


int main()
{
    ::CoInitialize(NULL);//初始化語音環境
    ISpVoice* pSpVoice = NULL;//初始化語音變數
    if (FAILED(CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_INPROC_SERVER, IID_ISpVoice, (void**)&pSpVoice)))

        //給語音變數建立環境,相當於建立語音變數,FAILED是個巨集定義,就是來判斷CoCreateInstance這個函式又沒有成功建立語音變數,下面是不成功的提示資訊。

    {
        std::cout << "Failed to create instance of ISpVoice!" << std::endl;
        return -1;
    }


    pSpVoice->Speak(L"Hello World!", SPF_DEFAULT, NULL);//執行語音變數的Speek函式,這個函式用來讀文字。

    pSpVoice->Release(); //釋放語音變數
    ::CoUninitialize();//釋放語音環境


    return 0;
}

解決執行報錯

由於使用Speech SDK安裝包版本老,在Visual studio 2019上使用時會出現很多報錯,這裡記錄我執行時解決的報錯部分:

  • 部分sphelper.h編譯錯誤

這裡附上該部分報錯解決方案連結(由於轉載版本較多,該連結可能不是初始作者發表的部落格)https://blog.csdn.net/wangyangtao/article/details/5933734

  • 其他部分sphelper.h編譯錯誤解決,都是相似的解決方法,故只按類別提供示例

  1. SPDBG_FUNC函式報錯:e.g.: SPDBG_FUNC("SpGetTokenFromId"); 改為 SPDBG_FUNC(PCHAR("SpGetTokenFromId"));

  2. _tcscpy函式報錯:修改為_tcscpy_s函式,在原函式的2個引數之間,增加1個引數:wcslen(第一個引數)

  3. wcscpy函式報錯:e.g.: wcscpy(szLangCondition, L"Language="); 改為 wcscpy_s(szLangCondition,wcslen(szLangCondition), L"Language=");

  4. wcscat函式報錯:e.g.: wcscat(szLangCondition, szLang); 改為 wcscat_s(szLangCondition, wcslen(szLangCondition), szLang);

  5. GetVersionExW:被宣告為已否決:解決辦法:專案 > 屬性 > C/C++ > SDL 檢查 > 關掉

  • sapi.h中報錯:wchar_t*轉BSTR

例如:BSTR CategoryID = L""> 修改為:BSTR CategoryID = ::SysAllocString(L"")

可參考部落格:

https://blog.csdn.net/yangdong001/article/details/39077167?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161250057516780264047343%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=161250057516780264047343&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v1~rank_blog_v1-1-39077167.pc_v1_rank_blog_v1&utm_term=char&spm=1018.2226.3001.4450

  • 若還有其他報錯,歡迎大家在評論區補充

修改Speech SDK檔案的儲存問題

在修改sphelper.h和sapi.h檔案後,我遇到了無法儲存的問題,即visual studio沒有修改該檔案的許可權,造成“對路徑訪問被拒絕”

解決方法:

修改include檔案屬性

右鍵include資料夾-點選屬性-點選“安全”

原本“修改”和“寫入”的“允許”許可權是沒有的,此處點選“編輯”按鈕-選擇“Users”-勾選“修改”和“寫入”的允許許可權-應用-確定-可以修改

預祝大家消滅所有報錯,取得成功!