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. Вот ссылка на документацию о методе.