我正在尝试使用 Windows Phone 8 语音识别来识别单词的自定义发音。我正在尝试使用 MSDN 上提供的示例,但效果不佳。首先,我使用的是词典文件 (.pls),因为内联发音的“sapi”命名空间失败了(对于属性pron
和display
属性)——但也许我会将其保存为另一个问题。所以无论如何,这就是我所拥有的:
<?xml version="1.0" encoding="utf-8" ?>
<grammar version="1.0" xml:lang="en-US" tag-format="semantics/1.0" root="thecolor"
xmlns="http://www.w3.org/2001/06/grammar" >
<lexicon uri="ms-appx:///SRGSLexicon.pls" />
<rule id="thecolor">
<item>blue</item>
</rule>
</grammar>
那是我的 SRGS 语法。我像这样加载它:
Dim SRGSGrammar As Uri = New Uri("ms-appx:///SRGSGrammar.xml", UriKind.Absolute)
_myRecognizer.Grammars.AddGrammarFromUri("SRGSGrammar", SRGSGrammar)
我也尝试添加type="application/pls+xml"
到lexicon
元素,但这给出了格式异常。
似乎工作得很好。请注意其中的<lexicon/>
标签。这是我的 PLS 文件:
<?xml version="1.0" encoding="utf-8" ?>
<lexicon version="1.0"
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
alphabet="x-microsoft-ups" xml:lang="en-US">
<lexeme>
<grapheme> blue </grapheme>
<phoneme> W S1 AX T CH AX M AX K S2 AA L IH T </phoneme>
</lexeme>
</lexicon>
(注意:这两个文件都在我的应用程序的根目录中,设置为 Content and Copy if Newer)。
然后我点击了一个名为“speak”的按钮,它确实如此Dim recoResult = Await _myRecognizer.RecognizeAsync()
。然后我说whatchamacallit,它给了我非常低的信心,并说使用的规则是“thecolor”,文本是“blue”。据我所知,它甚至没有使用 PLS。如果我再次这样做并且这次说blue,我将获得接近 100% 的信心。
我希望识别 PLS 中的whatchamacallit ,而不是 SRGS 语法中的蓝色,但唯一获得很高置信度的是“蓝色”(99%),这也是结果文本。
我的 PLS似乎已加载(我不能 100% 确定,但除了我上面给出的 URI 之外的任何 URI 都会导致FileNotFound异常,所以这就是我认为它正在加载的原因)。
注意 -如何将词典与 SpeechSynthesizer 一起使用?不是这个问题是关于什么的,尽管我们都在 PLS 中使用了 whatchamacallit示例。此外,在 Windows Phone 8 上使用 SSML 进行高级文本到语音转换给了我一些希望,因为它是我见过的唯一 PLS 实现,但可惜它用于不同的技术并且在我的示例中不起作用。
有没有人通过 PLS 文件(或内联)在 WP8 中使用自定义<Token/>
发音sapi
?如果是这样,你能帮忙吗?