一个集成微软语音识别技术与语音朗读的类,基于Microsoft SpeechAPI5.1的开发

 


//1,生成动态连接库时,要#define USE_SPEECH_DLL,
//     并且#define LANE_SPEECH_EXPORTS
//2,使用动态连接库时,要#define USE_SPEECH_DLL
//3,声称和使用静态连接库时,什么都不需要
//4,另外主程序中静态连接库要调用的方式里要调用CoInitialize( NULL )和CoUninitialize(),
//     动态连接库就不用调用了。

#ifndef LANE_SPEECH_H
#define LANE_SPEECH_H

#include <windows.h>
#define _ATL_APARTMENT_THREADED
#include <atlbase.h>
extern CComModule _Module; //You may derive a class from CComModule and use it. if you want to override something,but do not change the name of _Module
#include <atlcom.h>
#include <sphelper.h>  //sapi需要的头文件

//-----生成动态连接库和静态库的处理----------------
#ifdef USE_SPEECH_DLL //定义了USE_SPEECH_DLL,就按生成DLL,声明导出导入类

 #ifdef LANE_SPEECH_EXPORTS
  #define LANE_SPEECH_DLL __declspec(dllexport)
 #else
  #define LANE_SPEECH_DLL __declspec(dllimport)
 #endif

 //这个警告我现在还没闹清楚是怎么回事了,估计是DLL和com或atl有关
 //暂时只能屏蔽掉它,在静态库里就不会出现这个警告。
 #pragma warning( disable : 4251 )

#else    //没定义USE_SPEECH_DLL,则不声明导出或导入类(LANE_SPEECH_DLL就为空)
 #define LANE_SPEECH_DLL

#endif //USE_SPEECH_DLL


//***************************常量***********************

/公共常量-----------------
const DWORD  SP_CHINESE = 0x0000; //简体中文.
const DWORD  SP_ENGLISH = 0x0001; //英语.

/CTTS常量-----------------
const UINT  WM_SPEAK = WM_USER + 4444; //触发事件产生的消息。

/SR常量-------------------
const UINT  WM_RECOEVENT = WM_USER + 3333; //触发事件产生的消息。
const DWORD  SR_INPROC = 0x0000; //独享类型的SR.
const DWORD  SR_SHARE  = 0x0001; //共享类型的SR.

//以下常量仅作例子用。
#define VID_TopLevelRule 9000  //顶级规则ID
#define VID_SubLevelRule1 9001  //子规则ID
#define VID_SubLevelRule2 9002  //子规则ID
#define VID_SubLevelRule3 9003  //子规则ID


//*************************类声明************************


class CSR;
///
///
//
//        CTTS
//
///
///

class LANE_SPEECH_DLL  CTTS
{
protected:
 HWND      m_hWnd;    // 关联的窗口句柄。

 CComPtr<ISpVoice>   m_pVoice;   // 声音对象的指针。
 CComPtr<ISpObjectToken>  m_pToken;   // token对象的指针。
 CComPtr<ISpAudio>   m_pAudio;   // 音频对象的指针。(用来保存原来默认的输入流)
 CComPtr<ISpStream>   m_pOutputStream; // 输出到文件的流对象。

public:
//********************************初始化部分********************

 
 //功能: 保存与识别引擎关联的窗口句柄。
 //参数: hWnd:要关联的窗口句柄。
 //返回值: 无。
 
 CTTS ( const HWND  hWnd );

 
 //功能: 释放所有的对象。
 //参数: 无。
 //返回值: 无。
 
 ~CTTS ();

 
 //功能: 建立一个voice对象。设置要是别的语言种类,消息,通知事件。
 //参数: dwLanguage:要朗读的语言种类,SP_CHINESE为中文,
 //   SP_ENGLISH为英文。
 //返回值: HRESULT类型。
 
 HRESULT Create( const DWORD dwLanguage = SP_CHINESE );

 
 //功能: 从一个SR引擎建立一个voice对象。设置要是别的语言种类,消息,
 //   通知事件。
 //参数: pSRContext:SR引擎的指针。dwLanguage:要朗读的语言种类,
 //   SP_CHINESE为中文,SP_ENGLISH为英文。
 //返回值: HRESULT类型。
 
 HRESULT Create (  const CSR * pSR,
      const DWORD dwLanguage = SP_CHINESE );


//********************************设置部分***************************************

 
 //功能: 设置朗读声音的语言种类。
 //参数: dwLanguage:语言种类。SP_CHINESE为中文,SP_ENGLISH为英文。
 //返回值: HRESULT类型。
 
 HRESULT SetLanguage ( const DWORD dwLanguage );

 
 //功能: 设置要处理的的事件。
 //参数: ullInterest:来自enum SPEVENTENUM,要用SPFEI()转化为64bit的,
 //   设置多个事件用运算符" | "。 用SPFEI_ALL_SR_EVENTS表示全部事
 //   件都会收到通知。
 //返回值: HRESULT。
 
 HRESULT SetInterest ( const  ULONGLONG   ullInterest );

 
 //功能: 设置朗读声音的音量。
 //参数: usVolume:音量数值应该从0到100
 //返回值: 无。
 
 void SetVolume ( USHORT usVolume );

 
 //功能: 得到朗读声音的音量。
 //参数: 无。
 //返回值: 音量数值,应该从0到100。
 
 USHORT GetVolume ( );

 
 //功能: 设置朗读声音的音速。
 //参数: RateAdjust:音速,参数范围从-10到10。
 //返回值: 无。
 
 void SetRate ( LONG  RateAdjust );

 
 //功能: 得到朗读声音的音速。
 //参数: 无。
 //返回值: 音速,参数范围从-10到10。
 
 LONG GetRate ( );

 
 //功能: 设置朗读的声音流到.wav文件,如果不调用此函数则默认从音箱输出。
 //参数: pszFileName:.wav文件的文件名。要用" L"" "转换。
 //返回值: HRESULT。
 
 HRESULT SetOutputWithWav ( const WCHAR *pszFileName = L"TtsOut.wav");

 
 //功能: 设置朗读的声音从音箱输出。
 //参数: 无。
 //返回值: HRESULT。
 
 HRESULT UnSetOutputWithWav ();


//**********************播放语音,文本到语音转换部分*****************************

 
 //功能: 停止朗读。如果朗读为同步方式,则不能停止。
 //参数: pwcs:要朗读的字符串,需用" L"" "转换,可以是包含xml标记
 //   的字符串。dwFlags:朗读方式。SPF_ASYNC为异步,SVSFDefault为同步,
 //   SVSFIsXML为朗读带xml标记的文本。
 //返回值: HRESULT。
 
 HRESULT Speak ( const WCHAR *pwcs, const DWORD dwFlags = SPF_ASYNC );

 
 //功能: 停止朗读。如果朗读为同步方式,则不能停止。
 //参数: 无。
 //返回值: 无。
 
 void Stop ( );

 
 //功能: 暂停朗读。如果朗读为同步方式,则不能暂停。
 //参数: 无。
 //返回值: 无。
 
 void Pause ();

 
 //功能: 从暂停的地方继续朗读。
 //参数: 无。
 //返回值: 无。
 
 void Resume ();


//********************************处理事件部分***********************************

public:
 
 //功能: 处理发生的事件。系统自动调用,不需要用户自己处理。
 //参数: 无。
 //返回值: 无。
 
 void ProcessTTSEvent ();


 
 //功能: 为虚函数。当输出流结束时要触发的动作,需要在派生类重载。
 //参数: 无。
 //返回值: 无。
 
 virtual void OnStreamStart ();

 
 //功能: 为虚函数。当输出流结束时要触发的动作,需要在派生类重载。
 //参数: 无。
 //返回值: 无。
 
 virtual void OnStreamEnd ();
};

 

///
///
//        CSR
//
///
///

class LANE_SPEECH_DLL  CSR
{

protected:
 HWND m_hWnd;

public:
 CComPtr<ISpRecognizer>  m_pSREngine; // 语音识别引擎(recognition)的接口。
 CComPtr<ISpRecoContext>  m_pSRContext; // 识别引擎上下文(context)的接口。
 CComPtr<ISpRecoGrammar>  m_pSRGrammar; // 识别文法(grammar)的接口。
 CComPtr<ISpStream>   m_pInputStream; // 流()的接口。
 CComPtr<ISpObjectToken>  m_pToken;  // 语音特征的(token)接口。
 CComPtr<ISpAudio>   m_pAudio;  // 音频(Audio)的接口。(用来保存原来默认的输入流)
public:
 static ULONGLONG   ullGrammerID

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 35
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值