背景
微软的提供的SAPI工具包,用于语音技术开发,提供包括语音识别和语音合成两方面的内容。我们可以通过其中Voice Text API完成从文字到语音的转换。
初始化COM框架
SAPI需要用到COM框架,在程序开始和结束的地方需要分别初始化和释放COM框架
TextSpeaker::TextSpeaker() {
CoInitializeEx(nullptr, COINIT_MULTITHREADED);
......
}
TextSpeaker::~TextSpeaker() {
CoUninitialize();
}
枚举音频相关资源
可以通过SpEnumTokens接口,枚举指定的对象资源。能够查询出当前支持的人声以及可以输出的设备。
#include <atlbase.h>
#include <sapi.h>
#pragma warning(push)
#pragma warning(disable : 4996)
#include <sphelper.h>
#pragma warning(pop)
static std::vector<std::pair<std::wstring, CComPtr<ISpObjectToken>>> GetTokens(
const wchar_t* registryKey) {
std::vector<std::pair<std::wstring, CComPtr<ISpObjectToken>>> ret;
CComPtr<IEnumSpObjectTokens> cpEnum;
if (!SUCCEEDED(S