Wie verwende ich ein Lexikon mit SpeechSynthesizer?

Ich führe Text-to-Speech durch und möchte einige spezielle Aussprachen in einer Lexikon-Datei angeben. Ich bin geranntMSDNs AddLexicon-Beispiel wörtlich, und es spricht den Satz, aber es tutnicht Verwenden Sie das angegebene Lexikon, etwas scheint kaputt zu sein.

Hier ist das bereitgestellte Beispiel:

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

und Lexikon-Datei:

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

Die Konsole wird geöffnet, der Text wird gesprochen, aber die neue Aussprache wird nicht verwendet. Ich habe die Datei natürlich in gespeichertc:\test\whatchamacallit.pls wie angegeben.

Ich habe versucht, Variationen der Uri-Datei und des Speicherorts (z.@"C:\Temp\whatchamacallit.pls", @"file:///c:\test\whatchamacallit.pls"), absolute und relative Pfade, Kopieren in den Build-Ordner usw.

ich rannteProzessmonitor und die datei istnicht zugegriffen. Wenn es sich um ein Problem mit der Verzeichnis- / Dateizugriffsberechtigung handelte (was nicht der Fall ist), werden weiterhin Nachrichten mit Zugriffsverweigerung angezeigt, es wird jedoch nur gelegentlich ein Verweis aus meinem Texteditor protokolliert. Ich sehe die Datei, auf die zugegriffen wird, wenn ich es versucheFile.OpenRead.

Leider gibt es bei der Verwendung eines Müll-Uri keine Fehlermeldungen.

Bei weiteren Untersuchungen stellte ich fest, dass dieses Beispiel ausMicrosoft.Speech.Synthesis, während ich benutzeSystem.Speech.Synthesis hier drüben. Soweit ich weiß, sind sie jedoch bis auf einige zusätzliche Informationen und Beispiele identisch und weisen beide auf dieselbe Spezifikation hin. Könnte dies immer noch das Problem sein?

Ich habe überprüft, ob das Projekt auf die Verwendung des richtigen .NET Framework 4 eingestellt ist.

Ich habe das Beispiel von MSDN mit verglichenBeispiele aus der angegebenen Spezifikation, sowie diese direkt zu versuchen, aber es hat nicht geholfen. Angesichts der Tatsache, dass auf die Datei offenbar nicht zugegriffen werden kann, bin ich nicht überrascht.

(Ich kann verwendenPromptBuilder.AppendTextWithPronunciation in Ordnung, aber es ist eine schlechte Alternative für meinen Anwendungsfall.)

Ist das Beispiel auf MSDN kaputt? Wie verwende ich ein Lexikon mit SpeechSynthesizer?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage