Ich führe Text-zu-Sprache aus und möchte einige spezielle Aussprachen in einer Lexikon-Datei angeben. Ich habe MSDN's AddLexicon example wörtlich gelaufen, und es spricht den Satz, aber es tut nicht Verwenden Sie das gegebene Lexikon, scheint etwas gebrochen zu sein.Wie verwende ich ein Lexikon mit SpeechSynthesizer?
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 öffnet, wird der Text gesprochen, aber die neue Aussprache wird nicht verwendet. Ich habe natürlich die Datei auf c:\test\whatchamacallit.pls
wie angegeben gespeichert.
Ich habe versucht, Variationen des Uri und Speicherort der Datei (zB @"C:\Temp\whatchamacallit.pls"
, @"file:///c:\test\whatchamacallit.pls"
), absolute und relative Pfade, es in die Build-Ordner kopieren usw.
Ich lief Process Monitor und die Datei wird nicht zugegriffen. Wenn es ein Verzeichnis-/Dateiberechtigungs-Problem wäre (was nicht der Fall ist), würde ich immer noch die Nachrichten mit Zugriffsverweigerung sehen, aber ich protokolliere überhaupt keine Referenz außer der gelegentlichen aus meinem Texteditor. Ich sehe die Datei zugegriffen, wenn ich versuche File.OpenRead
.
Leider gibt es keine Fehlermeldungen bei der Verwendung eines Müll Uri.
Bei weiteren Untersuchungen habe ich festgestellt, dass dieses Beispiel von Microsoft.Speech.Synthesis ist, während ich hier System.Speech.Synthesis verwende. Aber von dem, was ich sagen kann, sind sie bis auf einige zusätzliche Informationen und Beispiele identisch und beide weisen auf die gleiche Spezifikation hin. Könnte das immer noch das Problem sein?
prüft ich das Projekt die richtige .NET Framework 4.
ich das Beispiel von MSDN zu verwenden, wird auf examples from the referenced spec verglichen, sowie diejenigen geradezu, aber es hat nicht geholfen versucht. Angesichts der Tatsache, dass die Datei scheint nicht zugegriffen zu werden, bin ich nicht überrascht.
(Ich kann PromptBuilder.AppendTextWithPronunciation
ganz gut bedienen, aber es ist eine schlechte Alternative für meinen Anwendungsfall.)
ist das Beispiel auf MSDN gebrochen? Wie verwende ich ein Lexikon mit SpeechSynthesizer?
ich meinte, was ich kann sagen, dass die _Dokumentation_ identisch ist. Endlich eine Antwort! Vielen Dank! –
Die Dokumentation ist identisch und dies wurde nirgendwo als bekannter Bug erwähnt, was ziemlich komisch ist. Wie auch immer, du bist willkommen, hoffe es hilft :) –
Ja, einfach funktioniert überhaupt nicht. –