2010-02-17 43 views
2

我正在製作一個使用system.speech命名空間的程序(它是一個可以啓動電影的簡單程序)。我加載一個文件夾中的所有文件名,並將它們添加到我想要使用的語法中。它工作得非常好,但是有一個問題:我不希望窗口語音識別與窗口進行交互(即,當我說開始時,我不想讓開始菜單打開...我不'不想要發生任何事情)。以編程方式關閉windows語音識別的自動化功能?

同樣,我有一個列表框,列出目錄中找到的所有電影。當我說我想打開的節目/電影時,節目不會識別名稱,因爲Windows語音識別是從列表中選擇listboxitem,而不是將它傳遞給我的節目。

因爲我在語法中有「stop」,「play」,「rewind」這樣的詞,並且當我捕獲listener_SpeechRecognized時,它會正確地知道我的單詞/我說(現在只是在文本框中輸入)。

任何想法,我可能會做到這一點?

回答

1

我會使用SpeechRecognitionEngine類而不是SpeechRecognizer類。這會創建一個與Windows語音識別完全斷開的語音識別器。

+0

謝謝你:) – 2011-07-09 10:16:04

0
private bool Status = false; 

SpeechRecognitionEngine sre = new SpeechRecognitionEngine(); 
Choices dic = new Choices(new String[] { 
      "word1", 
      "word2", 
      }); 



public Form1() 
{ 
    InitializeComponent(); 

    Grammar gmr = new Grammar(new GrammarBuilder(dic)); 
    gmr.Name = "myGMR"; 
    // My Dic 

    sre.LoadGrammar(gmr); 
    sre.SpeechRecognized += 
    new EventHandler<SpeechRecognizedEventArgs>(sre_SpeechRecognized); 
    sre.SetInputToDefaultAudioDevice(); 
    sre.RecognizeAsync(RecognizeMode.Multiple); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    if (Status) 
    { 
     button1.Text = "START"; 
     Status = false; 
     stslable.Text = "Stopped"; 
    } 
    else { 

     button1.Text = "STOP"; 
     Status = true; 
     stslable.Text = "Started"; 
    } 
} 

public void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs ev) 
{ 
    String theText = ev.Result.Text; 
    MessageBox.Show(theText); 
}