欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中調用SAPI實現(xiàn)語音識別的2種方法

 更新時間:2015年06月04日 17:42:59   投稿:junjie  
這篇文章主要介紹了C#中調用SAPI實現(xiàn)語音識別的2種方法,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下

通過微軟的SAPI,不僅僅可以實現(xiàn)語音合成TTS,同樣可以實現(xiàn)語音識別SR。下面我們就介紹并貼出相關代碼。主要有兩種方式:

1、使用COM組件技術,不管是C++,C#,Delphi都能玩的轉,開發(fā)出來的東西在XP和WIN7都能跑。(注意要引入系統(tǒng)組件SpeechLib,XP要安裝識別引擎)
2、使用WIN7的windows api,其實最終還是調用了SAPI,所以開發(fā)出來的東西就只能在WIN7上面跑。

其實不管是哪一種,都是調用SAPI,可能后一種代碼比較簡單。

使用第一種方式,需要注意在COM選項卡里面的Microsoft Speech  object  library引用

public class SpRecognition
  {
    private static SpRecognition _Instance = null;
    private SpeechLib.ISpeechRecoGrammar isrg;
    private SpeechLib.SpSharedRecoContextClass ssrContex = null;

    public delegate void StringEvent(string str);
    public StringEvent SetMessage;

    private SpRecognition()
    {
      ssrContex = new SpSharedRecoContextClass();
      isrg = ssrContex.CreateGrammar(1);
      SpeechLib._ISpeechRecoContextEvents_RecognitionEventHandler recHandle =
         new _ISpeechRecoContextEvents_RecognitionEventHandler(ContexRecognition);
      ssrContex.Recognition += recHandle;
    }
    public void BeginRec()
    {
      isrg.DictationSetState(SpeechRuleState.SGDSActive);
    }
    public static SpRecognition instance()
    {
      if (_Instance == null)
        _Instance = new SpRecognition();
      return _Instance;
    }
    public void CloseRec()
    {
      isrg.DictationSetState(SpeechRuleState.SGDSInactive);
    }
    private void ContexRecognition(int iIndex, object obj, SpeechLib.SpeechRecognitionType type, SpeechLib.ISpeechRecoResult result)
    {
      if (SetMessage != null)
      {
        SetMessage(result.PhraseInfo.GetText(0, -1, true));
      }
    }
  }

第二種同樣需要引入,不過引入的是Win7中的.NET3.5類庫

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Speech;
using System.Speech.Recognition;
using System.Globalization;
using System.Windows.Forms;

namespace StudyBeta
{
  public class SRecognition
  {
    public SpeechRecognitionEngine recognizer = null;//語音識別引擎
    public DictationGrammar dictationGrammar = null; //自然語法
    public System.Windows.Forms.Control cDisplay; //顯示控件

    public SRecognition(string[] fg) //創(chuàng)建關鍵詞語列表
    {
      CultureInfo myCIintl = new CultureInfo("en-US");
      foreach (RecognizerInfo config in SpeechRecognitionEngine. InstalledRecognizers())//獲取所有語音引擎
      {
    if (config.Culture.Equals(myCIintl) && config.Id == "MS-1033-80-DESK" )
        {
          recognizer = new SpeechRecognitionEngine(config);
          break;
        }//選擇美國英語的識別引擎
      }
      if (recognizer != null)
      {
        InitializeSpeechRecognitionEngine(fg);//初始化語音識別引擎
        dictationGrammar = new DictationGrammar();
      }
      else
      {
        MessageBox.Show("創(chuàng)建語音識別失敗");
      }
    }
    private void InitializeSpeechRecognitionEngine(string[] fg)
    {
      recognizer.SetInputToDefaultAudioDevice();//選擇默認的音頻輸入設備
      Grammar customGrammar = CreateCustomGrammar(fg);
  //根據(jù)關鍵字數(shù)組建立語法
      recognizer.UnloadAllGrammars();
      recognizer.LoadGrammar(customGrammar);
  //加載語法
recognizer.SpeechRecognized += new EventHandler <SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
recognizer.SpeechHypothesized += new EventHandler <SpeechHypothesizedEventArgs>(recognizer_SpeechHypothesized);
    }
    public void BeginRec(Control tbResult)//關聯(lián)窗口控件
    {
      TurnSpeechRecognitionOn();
      TurnDictationOn();
      cDisplay = tbResult;
    }
    public void over()//停止語音識別引擎
    {
      TurnSpeechRecognitionOff();
    }
    public virtual Grammar CreateCustomGrammar(string[] fg) //創(chuàng)造自定義語法
    {
      GrammarBuilder grammarBuilder = new GrammarBuilder();
      grammarBuilder.Append(new Choices(fg));
      return new Grammar(grammarBuilder);
    }
    private void TurnSpeechRecognitionOn()//啟動語音識別函數(shù)
    {
      if (recognizer != null)
      {
        recognizer.RecognizeAsync(RecognizeMode.Multiple); 
//識別模式為連續(xù)識別
      }
      else
      {
        MessageBox.Show("創(chuàng)建語音識別失敗");
      }
    }
    private void TurnSpeechRecognitionOff()//關閉語音識別函數(shù)
    {
      if (recognizer != null)
      {
        recognizer.RecognizeAsyncStop();
        TurnDictationOff();
      }
      else
      {
        MessageBox.Show("創(chuàng)建語音識別失敗");
      }
    }
private void recognizer_SpeechRecognized(object sender, SpeechRecognized EventArgs e)
    {
  //識別出結果完成的動作,通常把識別結果傳給某一個控件
      string text = e.Result.Text;
      cDisplay.Text = text;
    }
    private void TurnDictationOn()
    {
      if (recognizer != null)
      {
        recognizer.LoadGrammar(dictationGrammar);
  //加載自然語法
      }
      else
      {
        MessageBox.Show("創(chuàng)建語音識別失敗");
      }
    }
    private void TurnDictationOff()
    {
      if (dictationGrammar != null)
      {
        recognizer.UnloadGrammar(dictationGrammar);
  //卸載自然語法
      }
      else
      {
        MessageBox.Show("創(chuàng)建語音識別失敗");
      }
    }
  }
}


相關文章

  • C#判斷一個矩陣是否為對稱矩陣及反稱矩陣的方法

    C#判斷一個矩陣是否為對稱矩陣及反稱矩陣的方法

    這篇文章主要介紹了C#判斷一個矩陣是否為對稱矩陣及反稱矩陣的方法,涉及C#矩陣遍歷及檢查等相關運算技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#拷貝文件簡單實現(xiàn)方法

    C#拷貝文件簡單實現(xiàn)方法

    這篇文章主要介紹了C#拷貝文件簡單實現(xiàn)方法,主要分析了FileInfo類中CopyTo方法針對文件復制的操作技巧,非常簡單實用,需要的朋友可以參考下
    2015-04-04
  • C# 數(shù)組中的 indexOf 方法及使用

    C# 數(shù)組中的 indexOf 方法及使用

    這篇文章主要介紹了C# 數(shù)組中的 indexOf 方法以及indexof方法的使用講解,需要的朋友可以參考下
    2018-02-02
  • C#獲取Description特性的擴展類詳解

    C#獲取Description特性的擴展類詳解

    這篇文章主要和大家詳細介紹一下C#獲取Description特性的擴展類,文中的示例代碼講解詳細,對我們學習有一定的幫助,需要的可以參考一下
    2022-06-06
  • c#快速寫本地日志方法

    c#快速寫本地日志方法

    下面小編就為大家分享一篇c#快速寫本地日志方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • C#控制臺進行文件讀寫的方法

    C#控制臺進行文件讀寫的方法

    這篇文章主要介紹了C#控制臺進行文件讀寫的方法,涉及C#操作文件讀寫的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • 詳細聊聊如何在C#循環(huán)中捕獲局部變量

    詳細聊聊如何在C#循環(huán)中捕獲局部變量

    這篇文章主要給大家介紹了關于如何在C#循環(huán)中捕獲局部變量的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-09-09
  • C#并發(fā)編程入門教程之概述

    C#并發(fā)編程入門教程之概述

    這篇文章主要給大家介紹了關于C#并發(fā)編程之概述的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用c#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • 事務在c#中的使用

    事務在c#中的使用

    這篇文章介紹了事務在c#中的使用,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 利用C#編寫掃雷游戲(附源碼)

    利用C#編寫掃雷游戲(附源碼)

    掃雷游戲相信不用給大家過多介紹,大家基本都玩過,下面這篇文章主要給大家介紹了關于如何利用C#編寫掃雷游戲的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2019-01-01

最新評論