none
如何使用Speech Platform SDK v10.2提供的语音包做TTS? RRS feed

  • 问题

  • 我使用Windows7系统,Visual Studio 2010,从Microsoft网上下载了Speech Platform SDK v10.2后,简单地试了一下Speak功能:

    // TTS Ex.cpp: 主项目文件。

    #include "stdafx.h"
    #include <sphelper.h>

    using namespace System;
    using namespace System::Collections::Generic;
    using namespace System::Linq;
    using namespace System::Text;
    using namespace Microsoft::Speech::Synthesis;

    int main(array<System::String ^> ^args)
    {
    Console::WriteLine(L"Hello World");
    SpeechSynthesizer^ SpeechText = gcnew SpeechSynthesizer();
    SpeechText->Speak(L"这是一个测试.");
        return 0;
    }

    安装了微软提供的Hui-hui语音包,但是没有办法让这个程序发出声音。不知该如何解决呢?

    2014年3月3日 17:26

答案

全部回复

  • 你好:

    我对C++不了解, 但是如果你使用System.Speech(添加对System.Speech的引用,不需要安装其他sdk),这段代码是可以运行的。我使用C#代码测试可以正确读取字符串,代码如下:

    // Initialize a new instance of the SpeechSynthesizer.
                SpeechSynthesizer synth = new SpeechSynthesizer();
                // Configure the audio output. 
                synth.SetOutputToDefaultAudioDevice();
                // Speak a string.
                synth.Speak("This example demonstrates a basic use of Speech Synthesizer");

    如果你坚持要使用Speech Platform SDK的话,需要安装3个东西(我列举的都是11版本的,你可以找相应的10.2版本的,而且要根据机器选择相对应的版本):

    Microsoft Speech Platform - Software Development Kit (SDK) (Version 11)

    Microsoft Speech Platform - Runtime Languages (Version 11)

    Microsoft Speech Platform - Runtime (Version 11)

    而且安装完成之后添加对Microsoft.Speech.dll的引用,在安装目录下可以找到这个dll。

    如果机器是64位的话需要将项目的平台设置为x64,可能还会出现权限问题。

    我建议你直接使用.net framework的System.Speech。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年3月4日 9:13
    版主
  • 你好,

    请问您建的工程模板是CLR吗?如果是CLR,能否提供您是如何添加 System::Ling引用的,因为我在重现的时候,这个在CLR中是无法引入的。

    我在C++ win32 console 项目中利用 SAPI 建如下代码,也是可以实现语音功能的,仅供您参考。

    #include "stdafx.h"
    #include <sapi.h>
    
    int main(int argc, char* argv[])
    {
        ISpVoice * pVoice = NULL;
    
        if (FAILED(::CoInitialize(NULL)))
            return FALSE;
    
        HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
        if (SUCCEEDED(hr))
        {
            hr = pVoice->Speak(L"Hello world", 0, NULL);
    
            // Change pitch
            hr = pVoice->Speak(L"This sounds normal <pitch middle = '-10'/> but the pitch drops half way through", SPF_IS_XML, NULL);
            pVoice->Release();
            pVoice = NULL;
        }
        ::CoUninitialize();
        return 0;
    }
    

    更多详细步骤,你可以参考如下链接。
    http://msdn.microsoft.com/en-us/library/ms720163(v=vs.85).aspx

    May


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年3月4日 9:34
  • 我的代码直接从SDK文档里面复制下来的,除了把c#的语法改成C++的之外没有做什么改动,编译能够通过并且->Speak()能够运行,但是就是发不出声音。:(

    我从网上找到的资料似乎是Windows7预置的与Platform v10.2及之后的版本的语音包不兼容,也就是说这个程序需要调用Platform的语音包,但是Windows7却始终尝试使用自己的语音,导致无法发出声音。但是网上没有提供一个解决方案,所以想来问问各位啦~

    2014年3月4日 13:29
  • 之前我是用的是SAPI5.1进行语音开发,但是由于语音识别(Speech Recognization)的效果并不理想,于是想试试Platform而已~你提供的代码就是我之前开发所使用的。:)
    2014年3月4日 13:30
  • 那你有尝试过System.Speech吗?满足你程序的需要吗?

    A Very Easy Introduction to Microsoft .NET Speech Synthesis (VB, C#, C++)

    我觉得你也可以尝试一下第三方的tts库,比如Festival, eSpeak


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年3月5日 2:28
    版主