3

我只是尝试使用Microsoft.Speech.dll 为 Text To Speech 运行简单的 Microsoft 示例;

using System;
using Microsoft.Speech.Synthesis;

namespace TTS
{
    class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Testing TTS!");

            // Initialize a new instance of the SpeechSynthesizer.
            using (SpeechSynthesizer synth = new SpeechSynthesizer())
            {

                // Output information about all of the installed voices.
                Console.WriteLine("Installed voices -");
                foreach (InstalledVoice voice in synth.GetInstalledVoices())
                {
                    VoiceInfo info = voice.VoiceInfo;
                    Console.WriteLine(" Voice Name: " + info.Name);
                }

                // Select the US English voice.
                synth.SelectVoice("Microsoft Server Speech Text to Speech Voice (en-GB, Hazel)");

                // Build a prompt.
                PromptBuilder builder = new PromptBuilder();
                builder.AppendText("That is a big pizza!");

                // Speak the prompt.
                synth.Speak(builder);
            }

            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
    }
}

虽然我有正确的声音,但它不会发出任何声音。没有文字转语音 (TTS) 语音。

在此处输入图像描述

当我使用 Microsoft System.Speech.dll时,我可以听到声音。所以没有声音问题。

using System;
using System.Speech.Synthesis;

namespace TTS
{
    class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Testing TTS!");

            // Initialize a new instance of the SpeechSynthesizer.
            using (SpeechSynthesizer synth = new SpeechSynthesizer())
            {

                // Output information about all of the installed voices.
                Console.WriteLine("Installed voices -");
                foreach (InstalledVoice voice in synth.GetInstalledVoices())
                {
                    VoiceInfo info = voice.VoiceInfo;
                    Console.WriteLine(" Voice Name: " + info.Name);
                }

                // Build a prompt.
                PromptBuilder builder = new PromptBuilder();
                builder.AppendText("That is a big pizza!");

                // Speak the prompt.
                synth.Speak(builder);
            }

            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
    }
}

在此处输入图像描述

不久

为什么我听不到任何声音或使用 Microsoft.Speech 使用 Microsoft Speech Platform 进行文本转语音 (TTS)?我应该做一些额外的配置吗?

4

3 回答 3

4

因为您使用的是两个不同的 TTS 引擎。Microsoft.Speech 使用服务器 TTS 语音;System.Speech 使用桌面 TTS 语音。请参阅此处的讨论。

Windows Vista 及以上版本默认注册桌面 TTS 语音,但没有服务器 TTS 语音。当您安装Server Speech Platform Runtime 时,我相信您必须首先加载 Microsoft.Speech.dll,您还应该可以选择安装一些服务器 TTS 语音。

于 2013-07-12T20:45:32.607 回答
0

在 Visual Studio 上选择项目,然后选择添加引用,然后选择 System.Speech 旁边的复选框

在您的程序中也可以使用 system.speech。

对我来说很好。

于 2013-11-07T05:03:27.100 回答
0

要回答您提出的问题:

为什么我听不到任何声音或使用 Microsoft.Speech 使用 Microsoft Speech Platform 进行文本转语音 (TTS)?

您在代码中遗漏了一件重要的事情。您听不到声音,因为缺少以下行:

synth.SetOutputToDefaultAudioDevice();

这使您可以听到声音。我有同样的问题。我修改了您的代码并插入了上面的代码示例:

using System;

using System.Speech.Synthesis;
using Microsoft.Speech.Synthesis;
namespace ConsoleApplication1
{
 class Program
   {

    static void Main(string[] args)
    {
     Console.WriteLine("Testing TTS!");

     // Initialize a new instance of the SpeechSynthesizer.
     using (SpeechSynthesizer synth = new SpeechSynthesizer())
     {
        // Configure the synthesizer to send output to the default audio device.
        synth.SetOutputToDefaultAudioDevice();

        // Output information about all of the installed voices.
        Console.WriteLine("Installed voices -");
        foreach (InstalledVoice voice in synth.GetInstalledVoices())
        {
           VoiceInfo info = voice.VoiceInfo;
           Console.WriteLine(" Voice Name: " + info.Name);
        }

        // Select the US English voice.
        synth.SelectVoice("Microsoft Server Speech Text to Speech Voice (en-GB, Hazel)");

        // Speak.
        synth.Speak("That is a big pizza!");
     }

     Console.Write("Press any key to continue . . . ");
     Console.ReadKey(true);
  }
 }
}

请注意,使用 System.Speech.dll 时不需要 SetOutputToDefaultAudioDevice。这是有关该方法的文档的链接。

于 2019-02-01T15:11:25.443 回答