Я исполняю некую текстовую -- -речь, и я хотел бы указать некоторые специальные произношения в файле лексикона. Я запустил пример AddLexicon из MSDN дословно, и он произносит предложение, но не использует данный лексикон, что-то кажется сломанным.
Вот приведенный пример:
using System;
using Microsoft.Speech.Synthesis;
namespace SampleSynthesis
{
class Program
{
static void Main(string[] args)
{
// Initialize a new instance of the SpeechSynthesizer.
using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
// Configure the audio output.
synth.SetOutputToDefaultAudioDevice();
PromptBuilder builder = new PromptBuilder();
builder.AppendText("Gimme the whatchamacallit.");
// Append the lexicon file.
synth.AddLexicon(new Uri("c:\\test\\whatchamacallit.pls"), "application/pls+xml");
// Speak the prompt and play back the output file.
synth.Speak(builder);
}
Console.WriteLine();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
и файл словаря:
whatchamacallit
W S1 AX T CH AX M AX K S2 AA L IH T
Консоль открывается, текст произносится, но новое произношение не используется. Я, конечно, сохранил файл в c:\test\whatchamacallit.pls
, как указано.
Я пробовал варианты Uri и местоположения файла (, например. @"C:\Temp\whatchamacallit.pls"
,@"file:///c:\test\whatchamacallit.pls"
), абсолютные и относительные пути, копирование в папку сборки и т. д.
Я запустил Process Monitor , и файл не доступен . Если бы это была проблема с правами доступа к каталогу/файлу (, которой нет ), я бы по-прежнему видел сообщения об отказе в доступе, однако я вообще не регистрирую никаких ссылок, кроме случайных сообщений из моего текстового редактора. Я вижу доступ к файлу, когда пытаюсь File.OpenRead
.
К сожалению, при использовании мусорного Uri сообщений об ошибках нет.
При дальнейшем изучении я понял, что этот пример взят из Microsoft.Speech.Synthesis , тогда как здесь я использую System.Speech.Synthesis . Однако из того, что я могу сказать, они идентичны, за исключением некоторой дополнительной информации и примеров, и оба указывают на одну и ту же спецификацию. Может ли это быть проблемой?
Я убедился, что проект настроен на использование соответствующей.NET Framework 4.
Я сравнил пример из MSDN с примерами из указанной спецификации , а также попробовал их напрямую, но это не помогло. Учитывая, что к файлу, похоже, нет доступа, я не удивлен.
( Я могу использовать PromptBuilder.AppendTextWithPronunciation
просто отлично, но это плохая альтернатива для моего варианта использования.)
Пример на MSDN не работает? Как использовать лексикон с SpeechSynthesizer?