using System.Speech.Recognition;
public class SpeechRecognizer {
private SpeechRecognitionEngine _engine;
public void Initialize() {
_engine = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("zh-CN"));
// 載入字典/語法
var choices = new Choices();
choices.Add(new string[] { "打開瀏覽器", "關閉視窗", "播放音樂" });
var grammar = new Grammar(new GrammarBuilder(choices));
_engine.LoadGrammar(grammar);
// 事件訂閱
_engine.SpeechRecognized += OnSpeechRecognized;
_engine.SetInputToDefaultAudioDevice();
_engine.RecognizeAsync(RecognizeMode.Multiple);
}
private void OnSpeechRecognized(object sender, SpeechRecognizedEventArgs e) {
if (e.Result.Confidence > 0.7) { // 置信度閾值
Console.WriteLine($"識別: {e.Result.Text}, 置信度: {e.Result.Confidence}");
// 執行對應命令
}
}
}
// NuGet: iFlytek.MSC 或官網下載 SDK
using IFlytek.MSC;
public class XfyunRecognizer {
private SpeechRecognizer _recognizer;
public void Initialize(string appId) {
// 初始化
SpeechUtility.CreateUtility($"appid={appId}");
_recognizer = new SpeechRecognizer();
_recognizer.SetParameter(SpeechConstant.LANGUAGE, "zh_cn");
_recognizer.SetParameter(SpeechConstant.ACCENT, "mandarin");
_recognizer.SetParameter(SpeechConstant.ASR_PTT, "0"); // 短語識別
_recognizer.OnResult += OnResult;
_recognizer.StartListening();
}
private void OnResult(object sender, ResultEventArgs e) {
if (e.IsLast) {
Console.WriteLine($"最終結果: {e.ResultText}");
} else {
Console.WriteLine($"中間結果: {e.ResultText}");
}
}
}
public class HybridRecognizer {
private SpeechRecognitionEngine _local;
private XfyunRecognizer _cloud;
private bool _cloudAvailable = true;
public async Task RecognizeOnceAsync() {
// 嘗試雲端(設定超時)
if (_cloudAvailable) {
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(3));
try {
return await _cloud.RecognizeAsync(cts.Token);
} catch {
_cloudAvailable = false; // 標記雲端不可用
}
}
// 降級本地
return _local.RecognizeOnce();
}
}
結論:學習/原型用 System.Speech,產品級中文應用首選科大訊飛或百度語音雲端方案。現代語音交互產品幾乎均採用「雲端主識別 + 本地兜底 + 熱詞優化」混合架構。