我进行一些文本到语音,我想在词库文件中指定一些特殊的发音。 我已经跑了MSDN的AddLexicon例如逐字,和它说了一句,但它不使用给定的词汇,似乎东西被打破。
下面是提供的示例:
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();
}
}
}
和词库文件:
<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>
控制台打开后,说出文字,但不使用新的发音。 我当然有文件保存到c:\test\whatchamacallit.pls
规定。
我已经试过URI和文件位置的变化(例如@"C:\Temp\whatchamacallit.pls"
@"file:///c:\test\whatchamacallit.pls"
绝对和相对路径,复制它到生成文件夹,等等。
我跑进程监视器 ,而不是访问的文件。 如果它是一个目录/文件权限的问题(这是不是),我仍然会看到访问被拒绝的消息,但是我不记录在参考以外的所有从我的文字编辑器偶尔之一。 我确实看到访问的文件,当我尝试File.OpenRead
。
不幸的是有使用垃圾乌里时没有错误消息。
在进一步的调查,我意识到这个例子来自Microsoft.Speech.Synthesis ,而我使用System.Speech.Synthesis在这里。 但是从我可以告诉他们,除了一些额外的信息和实例都指向同规格相同。 难道这仍然是问题?
我验证了项目设置为使用正确的.NET Framework 4。
我比较了MSDN的例子从引用的规范的例子 ,以及那些试图彻底,但它并没有帮助。 考虑到文件似乎并没有被访问,我并不感到惊讶。
(我可以用PromptBuilder.AppendTextWithPronunciation
得很好,但它是我的使用情况较差的替代方案。)
是MSDN上的例子坏了吗? 如何使用与SpeechSynthesizer词库?