1

リンクhttp://msdn.microsoft.com/en-us/library/hh378403(v=office.14).aspxの PLS レキシコンを使用してカスタム発音を使用しようとしました。私の .pls ファイルは次のとおりです

Additional information: レキシコン データが無効であるか破損しています。

<?xml version="1.0" encoding="UTF-8"?>

<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> scale </grapheme>
        <phoneme> S K A L E </phoneme>
    </lexeme>
</lexicon>

and my grammar file is as pronunciation.grxml


<?xml version="1.0" encoding="UTF-8"?>
<grammar 
    version="1.0" 
    xml:lang="en-US" 
    root="colors" 
    sapi:alphabet="x-microsoft-ups" 
    xmlns:sapi="http://schemas.microsoft.com/Speech/2002/06/SRGSExtensions" 
    xmlns="http://www.w3.org/2001/06/grammar" tag-format="semantics/1.0" >

  <lexicon uri="C:\Users\sony vaio\Documents\Visual Studio 2012\Projects\ConsoleApplication5\ConsoleApplication5\bin\Debug\Blue.pls" type="application/vdn.ms-sapi-lex"/>

  <rule id="colors" scope="public">
      <one-of>  
        <item> scale </item>
      </one-of>
  </rule>

</grammar>

私のC#プログラムは

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml;
using Microsoft.Speech;
using Microsoft.Speech.Recognition;
using Microsoft.Speech.Recognition.SrgsGrammar;

namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {

            using (SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US")))
            {

                String currDirPath = Environment.CurrentDirectory;

                string xmlGrammar = currDirPath + "\\pronunciation.grxml";
                string cfgGrammar = currDirPath + "\\pronunciation.cfg";
                FileStream fs = new FileStream(cfgGrammar, FileMode.Create);
                XmlReader reader = XmlReader.Create(xmlGrammar);

                //compile the grammar *.grxml to *.cfg file.
                SrgsGrammarCompiler.Compile(reader, (Stream)fs);
                fs.Close();
                Grammar g = new Grammar(cfgGrammar, "colors");
                Console.WriteLine(currDirPath+cfgGrammar);

                recognizer.LoadGrammarAsync(g);

                // Add a handler for the speech recognized event.
                recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
                // Configure the input to the speech recognizer.
                recognizer.SetInputToDefaultAudioDevice();

                // Start asynchronous, continuous speech recognition.
                recognizer.RecognizeAsync(RecognizeMode.Multiple);

                // Keep the console window open.
                while (true)
                {
                    Console.ReadLine();
                }
            }
        }

        // speech recognised event handler

        static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            string lines = e.Result.Text;
            Console.WriteLine("Speak loudly");
            Console.WriteLine("Recognized text: " + e.Result.Text);
            Console.WriteLine("semantic value: " + e.Result.Semantics.Value.ToString());
       }
}

しかし、コンパイルして「スケール」を認識するために使用しようとすると、常に「Microsoft.Speech.dll で「System.FormatException」型の未処理の例外が発生しました。追加情報: レキシコン データが無効であるか破損しています。」

インライン発音を使用すると機能しますが、外部リンクの発音は機能しないようです。回避策はありますか?どんな助けでも大歓迎です。お願いします。

4

1 に答える 1

2

上記のコードを Microsoft.Speech.Recogonition から System.Speech.Recognition に移動すると、上記の形式の例外の問題が修正されます。

Microsoft.Speech.Recognition がエラーをスローする理由については、よくわかりません。公式の W3C 仕様が xml ファイルでレキシコン タグを公式にサポートしていることは知っています (ただし、Microsoft にはレキシコン タグの配置場所に関する非常に具体的な規則がありますが、これは正しいようです)。

http://www.w3.org/TR/speech-grammar/#S4.10

レキシコン: 文法形式は、レキシコンのロードや、文法によって参照される単語の発音には対応していません。W3C 音声ブラウザー ワーキング グループは、標準的なレキシコン形式の開発を検討しています。フォーマットが開発された場合、この文法仕様に対して適切な更新が行われます。

レキシコン形式の実際の仕様はまだ完成していません。

http://www.w3.org/TR/lexicon-reqs/#pronun

要約すると、ここにリンクされている Microsoft 独自の例が機能しない場合、これはバグのようです。特に、フォーマットの例外を修正するために Microsoft.Speech から System.Speech に変更しただけの場合はなおさらです。

于 2013-05-07T14:00:21.137 に答える