Как использовать лексикон с SpeechSynthesizer?

Я исполняю некую текстовую -- -речь, и я хотел бы указать некоторые специальные произношения в файле лексикона. Я запустил пример 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?

15
задан Anish Gupta 20 July 2012 в 13:05
поделиться