C#语音识别与播报开发指南
C# 语音识别离线开发推荐库
以下是一些适用于 C# 离线语音识别的库,支持本地处理,无需网络连接:
1. System.Speech.Recognition (Windows)
- 简介:.NET Framework 自带的库,适合简单的离线命令词识别。
- 适用场景:Windows 平台,基础语音指令识别(如控制应用程序)。
- 安装:直接引用
System.Speech
(仅限 .NET Framework 项目)。 - 代码示例:
using System.Speech.Recognition; var recognizer = new SpeechRecognitionEngine(); recognizer.LoadGrammar(new DictationGrammar()); recognizer.SpeechRecognized += (sender, e) => { Console.WriteLine($"识别结果: {e.Result.Text}"); }; recognizer.SetInputToDefaultAudioDevice(); recognizer.RecognizeAsync(RecognizeMode.Multiple);
2. Vosk (跨平台)
- 简介:基于 Kaldi 的开源离线语音识别库,支持多语言和跨平台。
- 适用场景:高精度识别,支持 Linux/macOS/Windows。
- 安装:通过 NuGet 安装
Vosk
,并下载预训练模型。 - 代码示例:
using Vosk; var model = new Model("path/to/model"); var recognizer = new VoskRecognizer(model, 16000.0f); using (var source = new WaveInEvent()) { source.WaveFormat = new WaveFormat(16000, 1); source.DataAvailable += (sender, e) => { if (recognizer.AcceptWaveform(e.Buffer, e.BytesRecorded)) { Console.WriteLine(recognizer.Result()); } }; source.StartRecording(); Console.ReadLine(); }
3. CMU Sphinx (PocketSphinx)
- 简介:轻量级开源识别引擎,需通过 C# 封装调用(如
PocketsphinxSharp
)。 - 适用场景:嵌入式或资源受限环境。
- 安装:需自行编译或寻找 C# 封装库(社区支持较少)。
- 示例步骤:
- 通过 P/Invoke 调用 C 库。
- 配置语音模型路径。
4. Microsoft Speech Platform SDK (Windows)
- 简介:微软官方扩展,需单独安装运行时。
- 安装:下载 SDK 和语言包。
- 代码:类似
System.Speech
,但需指定语音识别引擎。
语音播报(TTS)开发方案
1. System.Speech.Synthesis (Windows)
- 简介:内置语音合成,支持调整语速、音量。
- 代码示例:
using System.Speech.Synthesis; var synthesizer = new SpeechSynthesizer(); synthesizer.Speak("Hello, this is a test.");
2. NAudio + TTS 引擎
- 简介:结合音频库
NAudio
和第三方 TTS 生成音频流。 - 步骤:
- 使用 TTS 引擎(如
System.Speech
)生成语音流。 - 通过
NAudio
播放音频。
using NAudio.Wave; using System.Speech.Synthesis; var synthesizer = new SpeechSynthesizer(); var stream = new MemoryStream(); synthesizer.SetOutputToWaveStream(stream); synthesizer.Speak("Hello with NAudio"); stream.Position = 0; using (var audioFile = new WaveFileReader(stream)) using (var outputDevice = new WaveOutEvent()) { outputDevice.Init(audioFile); outputDevice.Play(); while (outputDevice.PlaybackState == PlaybackState.Playing) { Thread.Sleep(100); } }
- 使用 TTS 引擎(如
3. 跨平台 TTS
- Linux/macOS:调用系统工具如
espeak
或festival
。using System.Diagnostics; Process.Start("espeak", "\"Hello from Linux\"");
- Windows 10+:使用
Windows.Media.SpeechSynthesis
(UWP)。using Windows.Media.SpeechSynthesis; using System.IO; var synthesizer = new SpeechSynthesizer(); var stream = await synthesizer.SynthesizeTextToStreamAsync("Hello UWP"); // 使用 NAudio 或其他库播放 stream
注意事项
- 模型路径:Vosk 需下载正确语言模型并指定路径。
- 权限:确保麦克风和音频输出设备权限已开启。
- 性能优化:离线识别可能占用较高 CPU,建议异步处理。
如需进一步代码示例或配置细节,请随时补充提问!