Microsoft.Speech.Synthesis не работает для Text To Speech, НО System.Speech.Synthesis работает. Почему?

Я просто пытаюсь запустить простой пример Microsoft для Text To Speech, используя Microsoft.Speech.dll;

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);
        }
    }
}

вскоре

Почему я не могу слышать голос или делать текст в речь (TTS) с Microsoft Speech Platform с использованием Microsoft.Speech? Должен ли я сделать некоторые дополнительные настройки?

2 ответа

Решение

Потому что вы используете два разных движка TTS. Microsoft.Speech использует серверные голоса TTS; System.Speech использует настольные голоса TTS. Смотрите обсуждение здесь.

В Windows Vista и более поздних версиях голоса TTS на рабочем столе зарегистрированы по умолчанию, но нет голосов TTS сервера. Когда вы устанавливаете Server Speech Platform Runtime, что, я полагаю, вам нужно сделать для того, чтобы Microsoft.Speech.dll был загружен в первую очередь, у вас должна быть возможность установить некоторые голоса сервера TTS.

В Visual Studio Выберите проект, затем выберите Добавить ссылки, затем установите флажок рядом с System.Speech

В вашей программе также используйте system.speech.

У меня отлично работает.

Чтобы ответить на ваш вопрос, вы спросили:

Почему я не могу слышать голос или делать текст в речь (TTS) с Microsoft Speech Platform, используя Microsoft.Speech?

Вам не хватает важной вещи в вашем коде. Вы не можете услышать голос, потому что отсутствует следующая строка:

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);
  }
 }
}

Обратите внимание, что SetOutputToDefaultAudioDevice не требуется при использовании System.Speech.dll. Вот ссылка на документацию о методе.

Другие вопросы по тегам