Microsoft Speech SDK 工具类

原创 2017年01月04日 00:02:10

今天无意中发现了Windows平台下文字转语音的API接口—— Microsoft Speech SDK,就拿过来玩了下,写了一个工具类。
这款sdk似乎功能很多,我只是用了文字转语音的功能,以后有机会的话,再多多发掘一下。

1.1 下载地址

首先,是下载地址。
https://www.microsoft.com/en-us/download/details.aspx?id=10121

进入主页,点击下载,按照提示进行安装即可。

安装完成SDK之后,在安装路径之下就可以找到头文件和动态库/静态库。里面也有相应的说明文档和示例,很有帮助。

1.2 工具类

我把文字转语音的功能封成了一个类。大家可以借鉴使用。在使用时,当然少不了配置依赖项等属性。会一一介绍。

1.2.1 MSSpeacker

Class Declare:

// Class Declare

1#ifndef _MSSPEAK_H_
#define _MSSPEAK_H_
#include <iostream>
#include "sapi.h"  // MS speech sdk 提供的头文件,需要自己配置文件路径属性
#include <Windows.h>
#include <string>
#include <fstream>

using namespace std;

class MSSpeaker
{
public:
    MSSpeaker(void);
    ~MSSpeaker(void);

    static void InitialMsSpeaker();
    static void CloseMsSpeaker();
    static void Speaking(const string & speakContent);
private:
    // string to wstring
    static wstring StringToWString(const string & str);

};

#endif

Class Implement:

#include "MSSpeak.h"


MSSpeaker::MSSpeaker(void)
{
}


MSSpeaker::~MSSpeaker(void)
{
}

void MSSpeaker::InitialMsSpeaker()
{
    //初始化COM接口

    if (FAILED(::CoInitialize(NULL)))
        MessageBox(NULL, "COM接口初始化失败!", "提示", MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2);
}

void MSSpeaker::CloseMsSpeaker()
{
    //释放com资源
    ::CoUninitialize();
}

void MSSpeaker::Speaking( const string & speakContent )
{
    ISpVoice *pVoice = NULL;

    //获取SpVoice接口
    HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, 
        IID_ISpVoice, (void**)&pVoice);

    if (SUCCEEDED(hr))
    {
        pVoice->SetVolume((USHORT)100); //设置音量,范围是 0 -100
        pVoice->SetRate(0); //设置速度,范围是 -10 - 10
        hr = pVoice->Speak( StringToWString(speakContent).c_str(), 0, NULL);
        pVoice->Release();
        pVoice = NULL;
    }
}

std::wstring MSSpeaker::StringToWString( const string &str )
{
    setlocale(LC_ALL, "chs"); 
    const char* _Source = str.c_str();
    size_t _Dsize = str.size() + 1;
    wchar_t *_Dest = new wchar_t[_Dsize];
    wmemset(_Dest, 0, _Dsize);
    mbstowcs(_Dest,_Source,_Dsize);
    std::wstring result = _Dest;
    delete []_Dest;
    setlocale(LC_ALL, "C");
    return result;
}


需要注意的是,因为sdk里面使用的wchar字符,即宽字符集,所以我在这里用StringToWString()函数,将常用的string字符串转化为wstring字符串,并使用c_str()函数来构造wchar数组。
大家可以根据自己的需要来添加这些函数处理。只需要注意wchar字符集即可。

1.2.2 VC++项目依赖项设置

1) 头文件的设置

sdk里面提供了多个头文件,如sapi.h, sapiddk.h等,根据自己要实现的功能选取即可。
因为我使用的是文字转语音,所以仅仅使用sapi.h文件。

头文件的设置,就是在 VC++的项目属性->C/C++->常规->附加包含目录 里面设置。把路径设置好就行。

设置完成后,在代码里面使用地方包含头文件即可。

2) 依赖项的设置

依赖项主要是静态库和动态库的依赖问题。
sdk提供了对应的静态库和动态库。我使用的是静态库sapi.lib。为的是编译生成之后直接使用,就不需要担心动态库的缺失了。

动态库的设置,就是在`VC++的项目属性->连接器->输入->附加依赖项。在这里需要把路径和库名字写对。

1.3 示例代码

我在这里写了一个main.cpp来测试这个类功能

#include "MSSpeak.h"
#include <iostream>

int main()
{
    // 初始化
    MSSpeaker::InitialMsSpeaker();
    // 发音,中英文均支持
    MSSpeaker::Speaking(string("我爱中国,i love china!!!"));
    // 释放资源
    MSSpeaker::CloseMsSpeaker();
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

C#基于Microsoft Speech SDK Version 5.1 的开发

               //Microsoft Speech SDK Version 5.1             #endregion            private SpeechLi...
  • yincheng01
  • yincheng01
  • 2009年09月12日 12:10
  • 7566

Microsoft Speech SDK5.1 语音识别

1.首先开发得需要Microsoft Speech SDK的支持,以下是下载地 http://download.microsoft.com/download/speechSDK/SDK/5.1/WX...
  • pamchen
  • pamchen
  • 2012年08月12日 08:55
  • 11977

C#基于Microsoft Speech SDK Version 5.1 的开发(语音)

//Microsoft Speech SDK Version 5.1             #endregion             private SpeechLib.SpSharedR...
  • zhenhua10
  • zhenhua10
  • 2011年11月29日 22:10
  • 1625

VC 下Microsoft Speech SDK 5.1 开发小结

1.首先开发得需要Microsoft Speech SDK 5.1的支持,以下是下载地址 http://www.microsoft.com/downloads/en/details.aspx?Fam...
  • zcj331
  • zcj331
  • 2014年04月11日 13:25
  • 575

一个简单的 Microsoft Speech SDK 5.1 例子

刚刚从 Microsoft 网站下栽了 Speech SDK 5.1 和中日文发声补丁,参考 Speech SDK文档写了几个小程序,尽管我也是刚刚接触 Speech若干小时的初学者,还是拿出来共享吧...
  • ruanjian2006
  • ruanjian2006
  • 2007年12月02日 00:59
  • 1192

Microsoft Speech Platform SDK,语音识别

本文为转载:原文 http://blog.csdn.net/itcastcpp/article/details/5313204 关于SAPI的简介 API 概述 SAPI API在一...
  • nibiru_holmes
  • nibiru_holmes
  • 2016年06月06日 21:51
  • 3936

VC 下Microsoft Speech SDK5.1开发小结

VC 下Microsoft Speech SDK 5.1 开发小结 1.首先开发得需要Microsoft Speech SDK 5.1的支持,以下是下载地址 http://www.microsof...
  • wiserstar
  • wiserstar
  • 2011年11月24日 16:34
  • 3987

微软Windows Speech SDK编程入门

一、SAPI简介 软件中的语音技术包括两方面的内容,一个是语音识别(speech recognition) 和语音合成(speech synthesis)。这两个技术都需要语音引擎的支持。微软推出的...
  • wiserstar
  • wiserstar
  • 2011年11月24日 16:54
  • 2658

如何使用Microsoft Speech SDK开发包

最近,在朋友的介绍下,学习了下关于Microsoft Speech SDK开发包的使用。利用这个TTS(Text to Speech)开发包,写了一个简单语音播报点名系统和随机点人回答问题的程序,还蛮...
  • wretchedme
  • wretchedme
  • 2015年08月23日 16:50
  • 1496

VC 下Microsoft Speech SDK开发语音识别

转自VC 下Microsoft Speech SDK开发语音识别 分类: vc/c++ 2011-12-02 18:18 824人阅读 评论(0) 收藏 举报 microso...
  • worldy
  • worldy
  • 2013年12月15日 19:15
  • 2747
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Microsoft Speech SDK 工具类
举报原因:
原因补充:

(最多只允许输入30个字)