Estoy realizando algunos textos a voz y me gustaría especificar algunas pronunciaciones especiales en un archivo de léxico. He corrido MSDN's AddLexicon example textualmente, y dice la oración pero hace no usa el léxico dado, algo parece estar roto.¿Cómo uso un léxico con SpeechSynthesizer?
Aquí está el ejemplo proporcionado:
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();
}
}
}
y el léxico archivo:
<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>
La consola se abre, se habla el texto, pero la nueva pronunciación no se utiliza. Por supuesto, he guardado el archivo en c:\test\whatchamacallit.pls
como se especifica.
He intentado variaciones de la dirección URI y el archivo (por ejemplo @"C:\Temp\whatchamacallit.pls"
, @"file:///c:\test\whatchamacallit.pls"
), rutas absolutas y relativas, lo copia en la carpeta de construcción, etc.
me encontré Process Monitor y el archivo se no accedí. Si se tratara de un problema de permiso de directorio/archivo (que no lo es), aún vería los mensajes de acceso denegado, pero no registre ninguna referencia, excepto la ocasional de mi editor de texto. Veo el archivo al que accedí cuando intento File.OpenRead
.
Desafortunadamente no hay mensajes de error cuando se usa un Uri de basura.
En la investigación posterior me di cuenta de que este ejemplo es de Microsoft.Speech.Synthesis, mientras que estoy usando System.Speech.Synthesis aquí. Sin embargo, por lo que puedo decir, son idénticos, excepto por alguna información adicional y ejemplos, y ambos apuntan a la misma especificación. ¿Podría ser este el problema?
que verifica que el proyecto está configurado para utilizar el correcto .NET Framework 4.
que comparó el ejemplo de MSDN a examples from the referenced spec, así como tratar los pura y simple pero no ha ayudado. Considerando que el archivo no parece ser accedido, no estoy sorprendido.
(soy capaz de utilizar PromptBuilder.AppendTextWithPronunciation
muy bien, pero es una mala alternativa para mi caso de uso.)
es el ejemplo en MSDN roto? ¿Cómo uso un léxico con SpeechSynthesizer?
me refería a lo que puede decir que _documentation_ es idéntico. Finalmente una respuesta! ¡Gracias! –
La documentación es idéntica y esto no se ha mencionado en ningún lugar como un error conocido, que es bastante extraño. De todos modos, de nada, espero que ayude :) –
Sí, simplemente no funciona en absoluto. –