微软语音包的安装及使用 Microsoft Speech SDK

。_饼干妹妹 提交于 2019-12-02 14:49:43

    需要简单的语音识别功能,大部分语音平台都是收费的,并且依赖网络,简单的识别有语音识别芯片LD3320,测试了一下效果不是很好,测试一下微软自带的SDK。

    先下载了5.1版本,用QT,修改了好多,编译过了,链接失败。5.1版本只有32位的,没有64位的。直接放弃。更换11。跟换11的X64版本后,11版本的库对QT友好多了,可以直接编译过,链接成功。

    找到网上的例子,在QT里面修改一下,CoCreateInstance执行失败,搞了好久才明白还要装一个SpeechPlatformRuntime.msi。装上runtime后,CoCreateInstance执行好了。但是还不能发声,pSpVoice->Speak返回错误,网上查了一堆都是没用的。后来想到在5.1上下了语音包但是不知道怎么用,11上会不会也有类似的语音包。官网还真有。下载安装。终于可以发声了。环境应该配置好了。后面可以搞识别了。

安装步骤:

1 安装speech sdk https://www.microsoft.com/en-us/download/details.aspx?id=27226

2 安装runtime 在speech sdk安装目录下面Microsoft SDKs\Speech\v11.0\Redist\SpeechPlatformRuntime.msi

3 安装语音包 https://download.microsoft.com/download/4/0/D/40D6347A-AFA5-417D-A9BB-173D937BEED4/MSSpeech_TTS_zh-CN_HuiHui.msi

代码:

头文件定义两个变量(由于speech sdk和opencv有的宏冲突,头文件类型用void替换原类型)

    void * pSpVoice;
    void *pSpToken;

初始化:

::CoInitialize(NULL);//初始化语音环境
    if (FAILED(CoCreateInstance(CLSID_SpVoice, NULL,CLSCTX_INPROC_SERVER, IID_ISpVoice, (void **)&pSpVoice)))

 
    {
        qDebug() << "Failed to create instance of ISpVoice!";
        qDebug() << GetLastError();
        return;
    }
    LPWSTR   ppszCoMemTokenId;

 
    IEnumSpObjectTokens *pSpEnumTokens = NULL;
   if (SUCCEEDED(SpEnumTokens(SPCAT_VOICES, NULL, NULL, &pSpEnumTokens)))
   {
       // 依次获取每个token并朗读字符串
       while (SUCCEEDED(pSpEnumTokens->Next(1, (ISpObjectToken**)&pSpToken, NULL)) && ((ISpObjectToken*)pSpToken) != NULL)
       {
           HRESULT ret = 0;
           ret = ((ISpObjectToken*)pSpToken)->GetId(&ppszCoMemTokenId);
           if(ret != S_OK)
           {
               qDebug() << "GetId" << ret;
           }
           ((ISpVoice*)pSpVoice)->SetVoice((ISpObjectToken*)pSpToken);
           break;
       }
   }

析构函数

    ((ISpVoice*)pSpVoice)->Release(); //释放语音变量
    ((ISpObjectToken*)pSpToken)->Release();   // 释放token

发声

 ret = ((ISpVoice*)pSpVoice)->SetVolume(100);
    ret = ((ISpVoice*)pSpVoice)->Speak(L"hello,今天的天气真好", SPF_ASYNC, NULL);//执行语音变量的Speek函数,这个函数用来读文字。

注意设置语音时,如果设置了英文就不能读汉子了。尽量只装中文的。如果装了的话可以在注册表里删掉或时判断一下你想用的。

另外包含头文件时需要加

#undef UNICODE
#include <sphelper.h>
#define UNICODE

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!