Windows Phone 8 の音声認識を使用して、単語のカスタム発音を認識しようとしています。MSDN で提供されているサンプルを使用しようとしていますが、不足しています。まず、インライン発音用の「sapi」名前空間が (pron
とdisplay
属性の両方で) 失敗しているため、レキシコン ファイル (.pls) を使用していますが、別の質問のためにそれを保存します。とにかく、ここに私が持っているものがあります:
<?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>
(注: これらのファイルはどちらもアプリのルートにあり、新しい場合はコンテンツとコピーに設定されています)。
次に、「話す」というボタンを押しますDim recoResult = Await _myRecognizer.RecognizeAsync()
。次に、whatchamacallitと言うと、信頼度が非常に低くなり、使用されるルールは「thecolor」で、テキストは「blue」であると表示されます。私が見る限り、PLSも使用していません。これをもう一度行い、今度はblueと言うと、100% の信頼度に近づきます。
SRGS 文法の青ではなく、PLS のwhatchamacallitが認識されるようにしたいのですが、非常に高い信頼を得られるのは「青」(99%) だけであり、それが結果テキストでもあります。
PLSがロードされているように見えます (100% 確実ではありませんが、上記以外の URI ではFileNotFound例外が発生するため、ロードされていると思います)。
注 - SpeechSynthesizer でレキシコンを使用するにはどうすればよいですか? は、この質問の内容ではありませんが、PLS でwhatchamacallitの例を使用しています。また、Windows Phone 8 での高度なテキスト読み上げに SSML を使用すると、私が見た PLS の唯一の実装であるため、いくつかの希望が得られましたが、残念ながらそれは別のテクノロジ用であり、私の例では機能しません。
PLSファイルを介して(またはインラインで)WP8で動作するようにカスタム発音を取得した人はいます<Token/>
かsapi
?もしそうなら、あなたは助けることができますか?