Jak używać leksykonu z SpeechSynthesizer?

Wykonuję trochę zamiany tekstu na mowę i chciałbym określić pewne specjalne wymowy w pliku leksykonu. PobiegłemPrzykład AddLexicon MSDN dosłownie, i to mówi zdanie, ale tak jestnie użyj danego leksykonu, coś wydaje się być zepsute.

Oto podany przykład:

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

i plik leksykonu:

<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>

Konsola otwiera się, tekst jest wypowiadany, ale nowa wymowa nie jest używana. Oczywiście zapisałem plik doc:\test\whatchamacallit.pls jak określono.

Wypróbowałem odmiany Uri i lokalizacji plików (np.@"C:\Temp\whatchamacallit.pls", @"file:///c:\test\whatchamacallit.pls"), ścieżki bezwzględne i względne, kopiowanie ich do folderu kompilacji itp.

PobiegłemMonitor procesu a plik jestbrak dostępu. Gdyby to był problem z uprawnieniami do katalogu / pliku (a tak nie jest), nadal zobaczyłbym komunikaty o odmowie dostępu, jednak w ogóle nie odwoływam się do żadnego odwołania z mojego edytora tekstu. Widzę, że plik jest dostępny, gdy próbujęFile.OpenRead.

Niestety nie ma komunikatów o błędach podczas używania śmieci Uri.

Podczas dalszego dochodzenia zdałem sobie sprawę z tego przykładuMicrosoft.Speech.Synthesis, podczas gdy ja używamSystem.Speech.Synthesis tutaj. Jednak z tego, co mogę powiedzieć, są one identyczne, z wyjątkiem kilku dodatkowych informacji i przykładów i oba wskazują na tę samą specyfikację. Czy to nadal może być problem?

Sprawdziłem, czy projekt jest przygotowany do korzystania z właściwego .NET Framework 4.

Porównałem przykład z MSDN doprzykłady z odnośnej specyfikacji, jak również wypróbowując te, ale to nie pomogło. Biorąc pod uwagę, że plik nie jest dostępny, nie jestem zaskoczony.

(Mogę użyćPromptBuilder.AppendTextWithPronunciation w porządku, ale jest to słaba alternatywa dla mojego przypadku użycia.)

Czy przykład w MSDN jest uszkodzony? Jak używać leksykonu z SpeechSynthesizer?

questionAnswers(1)

yourAnswerToTheQuestion