2013-05-04 88 views
5

我想知道如何与System.Speech下来麦克风灵敏度在C#..System.Speech下来麦克风灵敏度

要解释一下,我有一个语法文件,和我的应用程序应该开始的时候我记录我说SIVRAJ(我的节目的名字)

不过,我可以说完全不同的东西,我的应用程序能理解的东西“SIVRAJ” ......

没有从我的XML文件中的一部分:

<rule id="mouskie" scope="public"> 
<item> 
    <one-of> 
    <item>SIVRAJ</item> 
    </one-of> 
</item> 
<ruleref special="GARBAGE" /> 
<one-of> 
    <item> 
    <one-of> 
     <item>quit</item> 
    </one-of> 
    <tag>$.mouskie={}; $.mouskie._value="QUIT";</tag> // quit programm when i say SIVRAJ + quit 
    </item> 
    ..... etc etc 

这是启动识别引擎的功能:

SrgsDocument xmlGrammar = new SrgsDocument("Grammaire.grxml"); 
Grammar grammar = new Grammar(xmlGrammar); 
ASREngine = new SpeechRecognitionEngine(); 
ASREngine.SetInputToDefaultAudioDevice(); 
ASREngine.LoadGrammar(grammar); 

ASREngine.SpeechRecognized += ASREngine_SpeechRecognized; 
ASREngine.SpeechRecognitionRejected += ASREngine_SpeechRecognitionRejected; 
ASREngine.SpeechHypothesized += ASREngine_SpeechHypothesized; 

最后,我在这里恢复数据:

recoText.Text = e.Result.Text; 
devine.Text = ""; 
affiche.Text = ""; 

string baseCommand = e.Result.Semantics["mouskie"].Value.ToString(); 
commandText.Text = baseCommand; 

if (baseCommand.Equals("QUIT")) 
{ 
    m_SpeechSynth.Speech("au revoir", VoiceGender.Male, VoiceAge.Adult); 
    Environment.Exit(0); 
} 

回答

2

在这种情况下,你真的不是在寻找麦克风灵敏度。我相信你正在寻找的是短语的信心。

当引擎返回识别结果时,它也会返回一个置信度分数。 “基本上说这就是我对自己的信心,我所听到的就是你所说的。”

if (Speech.Recognition.RecognitionResult.Confidence > .20) 
{ 
    //do some good stuff 
} 
else 
{ 
    // ignore 
} 

这包含从0到1的值,其中1是最有信心的,0基本上是引起记录事件的背景噪音。因为它具有高度的语法和特定的环境,所以你将不得不玩弄自信的价值。

你可以做的另一件事是改变触发词。我怀疑语音引擎的词汇表中有SIVRAJ这个短语。在这种情况下,引擎会尝试猜测什么音素组成这个词(如果您有语言背景,您可以自己的语法作为自定义发音提供)。像Start Recording这样的东西将有更好的机会给你更体面的体验。