+
13
-

回答

net中内置了免费本地的语音识别与语音tts api System.Speech ,但是语音识别的精度没有商用收费的高,tts也比较机器化,说话太僵硬,不过未来微软肯定会继续更新解决这些问题

System.Speech 是 .NET Framework 自带的语音处理库,集成了基础的语音识别(Speech Recognition)和文字转语音(TTS,Text-to-Speech)功能。虽然功能相对简单,但胜在无需额外安装依赖,适合快速实现轻量级语音交互场景。

一、文字转语音(TTS)实现

System.Speech.Synthesis 命名空间提供了文字转语音功能,支持选择语音、调整语速和音量等。

基本示例(播放中文文本):
using System;
using System.Speech.Synthesis;

class TextToSpeechDemo
{
    static void Main()
    {
        // 创建语音合成器实例
        using (SpeechSynthesizer synthesizer = new SpeechSynthesizer())
        {
            try
            {
                // 1. 配置语音(选择中文语音包,需系统已安装)
                foreach (var voice in synthesizer.GetInstalledVoices())
                {
                    var info = voice.VoiceInfo;
                    // 筛选中文语音(zh-CN 为中国大陆普通话)
                    if (info.Culture.Name == "zh-CN")
                    {
                        synthesizer.SelectVoice(info.Name);
                        Console.WriteLine($"已选择语音:{info.Name}({info.Description})");
                        break;
                    }
                }

                // 2. 调整语速(-10 到 10,默认 0)
                synthesizer.Rate = 0;

                // 3. 调整音量(0 到 100,默认 100)
                synthesizer.Volume = 80;

                // 4. 播放文本(同步播放)
                string text = "你好,欢迎使用 System.Speech 文字转语音功能。这是一个测试句子。";
                Console.WriteLine("正在播放:" + text);
                synthesizer.Speak(text);

                // 5. 也可以异步播放(不阻塞线程)
                // await synthesizer.SpeakAsync("这是异步播放的文本");
            }
            catch (Exception ex)
            {
                Console.WriteLine("错误:" + ex.Message);
            }
        }
    }
}
注意事项:

需确保系统已安装 中文语音包(默认可能只有英文):

Windows 系统:进入「设置 → 时间和语言 → 语音 → 语音选择」,添加「中文(中国大陆)」语音。

支持保存为音频文件(如 WAV):

// 保存到文件
synthesizer.SetOutputToWaveFile("output.wav");
synthesizer.Speak("这是保存到文件的语音");
synthesizer.SetOutputToDefaultAudioDevice(); // 恢复输出到扬声器

二、语音识别(Speech Recognition)实现

System.Speech.Recognition 命名空间提供语音识别功能,支持通过语法规则或听写模式识别语音。

基本示例(识别中文指令):
using System;
using System.Speech.Recognition;

class SpeechRecognitionDemo
{
    static void Main()
    {
        // 创建语音识别引擎(需指定文化区域为中文)
        using (SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("zh-CN")))
        {
            try
            {
                // 1. 配置识别源(麦克风)
                recognizer.SetInputToDefaultAudioDevice();

                // 2. 定义语法(识别指定指令,提高准确率)
                var grammarBuilder = new GrammarBuilder();
                grammarBuilder.Culture = new System.Globalization.CultureInfo("zh-CN");
                // 添加可能的指令
                grammarBuilder.Append(new Choices("你好", "打开应用", "关闭程序", "退出"));
                var grammar = new Grammar(grammarBuilder);
                recognizer.LoadGrammar(grammar);

                // 3. 注册识别事件
                recognizer.SpeechRecognized += (sender, e) =>
                {
                    if (e.Result.Confidence > 0.7) // 过滤低置信度结果
                    {
                        Console.WriteLine($"识别结果:{e.Result.Text}(置信度:{e.Result.Confidence:F2})");
                        // 根据指令执行操作
                        if (e.Result.Text == "退出")
                        {
                            Console.WriteLine("正在退出...");
                            Environment.Exit(0);
                        }
                    }
                    else
                    {
                        Console.WriteLine("识别结果可信度低,请重试");
                    }
                };

                // 4. 启动识别(连续识别模式)
                Console.WriteLine("请说话(指令:你好 / 打开应用 / 关闭程序 / 退出)...");
                recognizer.RecognizeAsync(RecognizeMode.Multiple);

                // 保持程序运行
                Console.ReadLine();
                recognizer.RecognizeAsyncStop();
            }
            catch (Exception ex)
            {
                Console.WriteLine("错误:" + ex.Message);
            }
        }
    }
}
注意事项:

需确保系统已安装 中文语音识别包(同 TTS 语音包位置)。

准确率受环境噪音、发音清晰度影响较大,适合简单指令识别。

支持听写模式(无固定语法,自由识别):

// 启用听写模式(需系统支持)
recognizer.LoadGrammar(new DictationGrammar());

三、优缺点总结

文字转语音无需额外依赖、集成简单、支持基础配置语音自然度一般、可选语音包较少
语音识别零成本、适合简单场景准确率较低、不支持复杂语义理解

适用场景

简单的语音提示(如程序操作反馈)。

基础的语音指令控制(如开关操作)。

快速原型开发验证语音交互流程。

如果需要更高的准确率或更自然的语音,建议结合 Azure Speech SDK 等第三方服务使用。

网友回复

我知道答案,我要回答