Microsoft Speech SDK提供关于语音处理的一套应用程序编程接口SAPI(Speech Application Programming Interface)。SAPI提供了实现文字-语音转换(Text-to-Speech)和语音识别(Speech Recognition)程序的基本函数。

    Speech SDK是以COM接口的方式提供服务的。

    Speech Recognition:

    语音识别编程涉及IsRecognizer,IsRecoContest/和IspRecoGrammar等多个语音识别引擎接口。

    类中定义3个借口指针m_cpReconEngine,m_cpRecoCtext和m_cpDictationGrammer,分别用于引用语音识别引擎的三个重要的接口IspRecognizer,IspRecoContext和IspRecoGrammar。

    初始化函数Initialize设定了语音识别的基本工作环境。包括引擎,识别上下文,语法,音频和时间等的初始化。

    释放函数Destroy被类的析构函数调用,释放了类所引用的所有接口。

    函数Start和Stop用来控制开始和停止接受及识别语音。它们通过引擎接口SetRecoState方法实现函。

    函数GetText是获取从语音中已识别出的文字的关键,应该在响应识别引擎事件/消息的响应函数中调用。

    首先声明一下,以下代码不是本人自己所写,也是好不容易搜到一些资料,给大家分享一下,帮助那些急需要这些资料的朋友们,希望那位前辈不要介意。

    在相应的头文件里加上这些数据:

#include <sphelper.h>

#define GID_DICTATION   0          

// Dictation grammar has grammar ID 0

#define GID_CMD_GR      33333

#define WM_RECOEVENT    WM_USER+1

在定义的类里添加以下方法和数据:

void RecoEvent();

void InitSR();

BOOL b_initSR;                        //Have init the SR engine?

BOOL b_Dic_Grammar;                    //is the Dic Grammar active?

BOOL b_Cmd_Grammar;                   //is the Cmd Grammar active?

BOOL m_bInSound;

BOOL m_bGotReco;

CComPtr<ISpRecoContext>     m_cpRecoCtxt;

CComPtr<ISpRecoGrammar>     m_cpDictationGrammar;

CComPtr<ISpRecoGrammar>           m_cpCmdGrammar;

CComPtr<ISpRecognizer>          cpRecoEngine;

CString   m_inputv;

//以下是响应函数:

afx_msg void OnStartText();

afx_msg void OnStartCMD();

在类的实现里要写以下数据:

m_inputv = _T("");

InitSR()

{             //SR Init

   m_bGotReco=FALSE;

   m_bInSound=FALSE;

   HRESULT hr = S_OK;   

  hr = cpRecoEngine.CoCreateInstance(CLSID_SpInprocRecognizer);

//创建识别引擎COM实例   

  if( SUCCEEDED( hr ) )

   {

       hr = cpRecoEngine->CreateRecoContext( &m_cpRecoCtxt );  

//创建识别上下文对象

    }

   else

         MessageBox("error1");

    // Set recognition notification for dictation

    if (SUCCEEDED(hr))

    {

        hr = m_cpRecoCtxt->SetNotifyWindowMessage( m_hWnd, WM_RECOEVENT, 0, 0 );//设置消息机制

    }

   else

         MessageBox("error2");

    if (SUCCEEDED(hr))

    {

        const ULONGLONG ullInterest = SPFEI(SPEI_RECOGNITION); //我们关心的事件

        hr = m_cpRecoCtxt->SetInterest(ullInterest, ullInterest);

    }

   else

         MessageBox("error3");

    // create default audio object

    CComPtr<ISpAudio> cpAudio;

    hr = SpCreateDefaultObjectFromCategoryId(SPCAT_AUDIOIN, &cpAudio);//建立默认的音频输入对象

    //设置识别引擎输入源

    hr = cpRecoEngine->SetInput(cpAudio, TRUE);

   b_initSR = TRUE;

   //创建听写模式的语法对象

   hr = m_cpRecoCtxt->CreateGrammar( GID_DICTATION, &m_cpDictationGrammar );

   if  (SUCCEEDED(hr))

   {

         //加载词典

         hr = m_cpDictationGrammar->LoadDictation(NULL, SPLO_STATIC);

   }

   else

         MessageBox("error4");

   if (FAILED(hr))

   {

         m_cpDictationGrammar.Release();

         MessageBox("start SR error");

   }

   //创建命令模式的语法对象

   hr = m_cpRecoCtxt->CreateGrammar( GID_CMD_GR, &m_cpCmdGrammar);

   if( FAILED(hr) )

   {

         MessageBox("Error CreateGrammar","Error",MB_OK);       

   }   

   WCHAR wszXMLFile[20]=L"";

   //ANSI转UNINCODE

   MultiByteToWideChar(CP_ACP, 0, (LPCSTR)"CmdCtrl.xml"  , -1, wszXMLFile, 256);

   //从文件中读取语法词典

   hr = m_cpCmdGrammar->LoadCmdFromFile(wszXMLFile,SPLO_DYNAMIC);

   if (FAILED(hr))

   {

         MessageBox("Error LoadCmdFromFile","Error",MB_OK);

   }

}

   这些只是语音初始化的函数