Как использовать лексикон с SpeechSynthesizer?
Я выполняю некоторые преобразования текста в речь, и я хотел бы указать некоторые специальные произношения в файле лексикона. Я побежалПример MSDN AddLexicon дословно, и это говорит предложение, но это делаетnot используйте данную лексику, что-то кажется сломанным.
Вот приведенный пример:
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();
}
}
}
и файл лексики:
<lexicon version="1.0"
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
alphabet="x-microsoft-ups" xml:lang="en-US">
<lexeme>
<grapheme> whatchamacallit </grapheme>
<phoneme> W S1 AX T CH AX M AX K S2 AA L IH T </phoneme>
</lexeme>
</lexicon>
Откроется консоль, произнесен текст, но новое произношение не используется. Я конечно сохранил файл вc:\test\whatchamacallit.pls
как указано.
Я пробовал варианты Uri и местоположения файла (например,@"C:\Temp\whatchamacallit.pls"
, @"file:///c:\test\whatchamacallit.pls"
), абсолютные и относительные пути, копирование в папку сборки и т. д.
Я побежалМонитор процесса и файлnot accessed, Если бы это была проблема с правами доступа к каталогу / файлу (а это не так), я бы по-прежнему видел сообщения об отказе в доступе, однако я не регистрирую никаких ссылок вообще, кроме случайных в моем текстовом редакторе. Я вижу файл, к которому обращаются при попыткеFile.OpenRead
.
К сожалению, при использовании мусорного Uri сообщения об ошибках отсутствуют.
При дальнейшем расследовании я понял, что этот пример изMicrosoft.Speech.Synthesisтогда как я используюSystem.Speech.Synthesis здесь. Однако из того, что я могу сказать, они идентичны, за исключением некоторой дополнительной информации и примеров, и оба указывают на одну и ту же спецификацию. Может ли это все еще быть проблемой?
Я проверил, что проект настроен на использование правильной .NET Framework 4.
Я сравнил пример из MSDN спримеры из указанной спецификации, а также пытаться это открыто, но это не помогло. Учитывая, что к файлу, похоже, нет доступа, я не удивлен.
(Я могу использоватьPromptBuilder.AppendTextWithPronunciation
просто отлично, но это плохая альтернатива для моего варианта использования.)
Is the example on MSDN broken? How do I use a lexicon with SpeechSynthesizer?