C#实现连续语音转文字

news/2025/10/20 8:59:56/文章来源:https://www.cnblogs.com/I989809/p/19151749

一、基础实现方案(System.Speech)

1. 环境配置

// 安装NuGet包
Install-Package System.Speech// 添加语言包(控制面板)
控制面板 -> 语言 -> 添加中文语音包

2. 核心代码实现

using System.Speech.Recognition;
using System.Windows.Forms;public class ContinuousRecognizer : IDisposable
{private SpeechRecognitionEngine _engine;private bool _isRunning;public ContinuousRecognizer(){InitializeEngine();}private void InitializeEngine(){_engine = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("zh-CN"));// 加载默认语法(连续识别模式)var grammar = new DictationGrammar();_engine.LoadGrammar(grammar);// 配置音频输入_engine.SetInputToDefaultAudioDevice();// 注册事件处理器_engine.SpeechRecognized += OnRecognized;_engine.SpeechRecognitionRejected += OnRejected;_engine.RecognizeAsyncStop();}public void StartRecognition(){if (!_isRunning){_engine.RecognizeAsync(RecognizeMode.Multiple);_isRunning = true;}}public void StopRecognition(){if (_isRunning){_engine.RecognizeAsyncStop();_isRunning = false;}}private void OnRecognized(object sender, SpeechRecognizedEventArgs e){if (e.Result.Confidence > 0.7){string text = e.Result.Text;// 更新UI(需跨线程)Application.Current.Dispatcher.Invoke(() => txtResult.AppendText(text + Environment.NewLine));}}private void OnRejected(object sender, SpeechRecognitionRejectedEventArgs e){txtResult.AppendText("[识别失败]" + Environment.NewLine);}public void Dispose(){_engine?.Dispose();}
}

二、性能优化

1. 音频预处理

// 添加降噪模块(使用NAudio)
public class AudioPreprocessor
{private readonly WaveInEvent _waveIn;private readonly SpeechRecognitionEngine _engine;public AudioPreprocessor(SpeechRecognitionEngine engine){_engine = engine;_waveIn = new WaveInEvent();_waveIn.DataAvailable += OnDataAvailable;}private void OnDataAvailable(object sender, WaveInEventArgs e){// 应用WebRTC降噪算法byte[] denoisedData = WebRTCNative.NoiseSuppress(e.Buffer, e.BytesRecorded);// 转换为流格式using (var ms = new MemoryStream(denoisedData)){_engine.SetInputToWaveStream(ms);_engine.Recognize();}}
}

2. 多线程处理

// 使用生产者-消费者模型
public class RecognitionProcessor
{private BlockingCollection<byte[]> _audioQueue = new BlockingCollection<byte[]>();private Thread _processingThread;public RecognitionProcessor(){_processingThread = new Thread(ProcessAudio);_processingThread.Start();}public void Enqueue(byte[] audioData){_audioQueue.Add(audioData);}private void ProcessAudio(){foreach (var chunk in _audioQueue.GetConsumingEnumerable()){using (var stream = new MemoryStream(chunk)){var recognizer = new SpeechRecognitionEngine();recognizer.LoadGrammar(new DictationGrammar());recognizer.Recognize(stream);}}}
}

三、高级功能实现

1. 自定义语法识别

// 创建SRGS语法文件
var grammarBuilder = new GrammarBuilder();
grammarBuilder.Append(new Choices("打开", "关闭", "保存"));
grammarBuilder.Append(new SemanticResultKey("action", "操作类型"));var grammar = new Grammar(grammarBuilder);
_recognizer.LoadGrammar(grammar);// 事件处理
_recognizer.SpeechRecognized += (s, e) => 
{if (e.Result.Semantics["action"].Value.ToString() == "打开"){OpenApplication();}
};

2. 实时转写服务

// 结合WebSocket实现流式传输
public class StreamingTranscriber
{private readonly SpeechRecognizer _recognizer;private readonly ClientWebSocket _webSocket;public StreamingTranscriber(ClientWebSocket webSocket){_webSocket = webSocket;_recognizer = new SpeechRecognizer();_recognizer.SpeechRecognized += OnRecognized;}private async void OnRecognized(object sender, SpeechRecognizedEventArgs e){var json = JsonSerializer.Serialize(new {Text = e.Result.Text,Timestamp = DateTime.Now});await _webSocket.SendAsync(new ArraySegment<byte>(Encoding.UTF8.GetBytes(json)),WebSocketMessageType.Text,true,CancellationToken.None);}
}

四、部署与调试

1. 硬件要求

组件 最低配置 推荐配置
CPU i5-4代(4核) i7-10代(8核)
内存 8GB 16GB+
声卡 普通USB声卡 支持ASIO的专业声卡
麦克风 16kHz采样率 高信噪比指向性麦克风

2. 调试技巧

// 启用详细日志
public static void EnableDebugLogging()
{var config = SpeechConfig.FromSubscription("YourKey", "YourRegion");config.SetProperty("SpeechServiceResponse_DebugLog", "true");config.SetProperty("SpeechServiceResponse_ProfanityOption", "Raw");
}// 性能监控
public void LogPerformance(TimeSpan duration, int wordCount)
{Debug.WriteLine($"识别速度: {wordCount/duration.TotalSeconds}字/秒");
}

五、扩展应用场景

1. 会议记录系统

// 结合语音识别与PPT同步
public class MeetingRecorder
{private ContinuousRecognizer _recognizer;private PptxBuilder _pptBuilder;public MeetingRecorder(){_recognizer = new ContinuousRecognizer();_pptBuilder = new PptxBuilder();_recognizer.SpeechRecognized += (s, e) => {_pptBuilder.AddSlide(e.Result.Text);};}
}

2. 工业设备控制

// 关键指令处理
public class VoiceController
{private ContinuousRecognizer _recognizer;public VoiceController(){_recognizer = new ContinuousRecognizer();_recognizer.SpeechRecognized += (s, e) => {if (e.Result.Text.Contains("紧急停止")){Machine.Stop();}};}
}

参考代码 语音转文字连续识别的C#小程序 www.youwenfan.com/contentcnj/70643.html

六、常见问题解决

  1. 识别率低 添加领域特定词汇表 调整InitialSilenceTimeoutEndSilenceTimeout参数 使用SetProperty("Adaptation", "True")启用自适应训练

  2. 内存泄漏 实现对象池模式管理识别引擎 限制同时处理的音频流数量 定期调用GC.Collect()

  3. 多设备冲突

    // 显式指定音频设备
    var deviceEnumerator = new MMDeviceEnumerator();
    var inputDevice = deviceEnumerator.GetDefaultAudioEndpoint(DataFlow.Capture, Role.Communications);
    _engine.SetInputToDefaultAudioDevice(inputDevice);
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/940876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年铝门窗厂家推荐排行榜,系统 / 智能 / 断桥 / 窄边 / 定制 / 全景 / 阳光房 / 隐框 / 隔声 / 防火铝门窗公司推荐

引言当前铝门窗市场需求攀升,但行业乱象凸显。部分小型厂家生产体系不完善,产品材质不达标、工艺粗糙,耐用性差;多数企业创新不足,产品同质化严重,难以满足消费者个性化需求;且不少品牌售后体系缺失,消费者维权…

如何把研究性学习糊弄过去

学校搞了个研究性学习,目测是计入综评分还是什么东西。课题只能从它给的内容里选,很地狱。 发现了一个识别手写数字的东西,这不是我们伟大的工程题吗!于是开始思考如何糊弄过去。 咕咕咕。

2025 年碳晶板厂家最新推荐榜:涵盖木纹 / 白色 / 全屋整装等品类,西南及全国优质品牌甄选指南

引言随着碳晶板在墙面装饰、全屋整装等领域应用愈发广泛,市场需求持续攀升,但行业乱象也随之凸显。部分品牌以次充好,用劣质基材降低成本,导致产品强度不足、耐候性差,甚至存在安全隐患;新品牌涌入后产品同质化严…

2025 年干细胞服务机构最新推荐排行榜:聚焦三体系认证与专利技术,精选优质机构供选择

引言当前干细胞技术在健康管理、疾病干预等领域应用愈发广泛,但行业乱象却让消费者难以抉择。部分机构缺乏规范制备流程,质量管理体系缺失,细胞产品安全与有效性无保障;一些机构研发能力薄弱,仅靠基础存储业务,无…

2025 最新隔音棉生产厂家口碑推荐榜:甄选家装公装专用材质,含西南 / 昆明阻尼片 / 吊顶 / 止震板品牌最新推荐

引言随着建筑声学需求升级,隔音棉已成为酒店、KTV、住宅等场景的刚需材料,但市场乱象让采购者举步维艰:部分产品隔音量虚标、防火等级不达标,潮湿环境易发霉老化;中小品牌交付延迟、售后缺位,公装项目常因材料问…

2025 灭老鼠公司最新推荐榜:欧盟认证技术加持,环保服务双优品牌权威甄选指南

引言后疫情时代,有害生物防制需求持续攀升,但鼠患治理市场乱象丛生:部分机构依赖低效化学药剂导致残留污染,通用化方案引发鼠患反复,应急响应滞后让家庭与企业蒙受额外损失,尤其餐饮、医疗等特殊场景更面临合规风…

2025 最新推荐!全国除甲醛公司权威榜单发布,解析蓉皓等标杆企业技术服务优势,覆盖新房 / 办公 / 学校多场景

引言据中国室内环境监测工作委员会数据,我国新装修住宅甲醛超标率居高不下,因治理不当引发的健康纠纷逐年上升。当前除甲醛市场品牌繁杂,部分企业缺乏甲级资质,使用的药剂未达环保标准,不仅除醛效果差,还易造成二…

KingbaseES V8R6清理冗余历史rman备份

KingbaseES V8R6清理冗余历史rman备份对于KingbaseES V8R6的通过sys_rman执行的物理历史备份,可以在执行备份时,备份的保留(retention)策略自动清理。不能通过手工删除备份,可以通过expire参数手工清理历史的冗余…

上周热点回顾(10.13

热点随笔:史诗级漏洞警报:ASP.NET Core 被曝 CVSS 9.9 分漏洞,几乎所有.NET 版本无一幸免! (马行空的博客) 每天10分钟,混剪视频Agent产出50条爆款,单月变现6位数(喂饭级教程) (AI架构师汤师爷) .NET 10 Rel…

一文读懂零知识证明Plonk 协议

下面是一篇专为“小白”准备的 Plonk 通俗科普,目标是让你 5 分钟内知道它到底在干什么、厉害在哪里,以及它背后的“魔法”到底是哪一招。一、先讲个故事:不泄密又能让人相信你 小明自称会瞬间移动,但不想把秘诀告…

P14259 兄妹(siblings)题解

闲话:这似乎是我第一次在 luogu 场切绿。蒟蒻对思维题不太擅长 QwQ。 前置芝士动态规划 / DP子集划分问题 / 可行性背包思路 首先观察这个放书的性质。结论:对于在同一个书架上的书,只需要一个人去负责。 证明也比较…

2025 年国内连接器厂家经销商最新推荐榜:聚焦优质品牌,助力企业精准采购,实力企业深度解析住友/日端/HRS连接器经销商推荐

引言在电子制造行业高速发展的背景下,连接器作为核心部件,其品质与供应效率直接关乎企业生产进度与产品质量。当前市场中,连接器供应商数量繁杂,产品质量参差不齐,“多品种、小批量、短交期” 的采购痛点让众多企…

2025.10.19 零试

大荒囚天指 吸取教训前一天不打 ABC 了。 这次零试拖了两个月才办出来,然后女丘初试和零试并在一起了。属于是之前也没有参考数据的东西。 前一天中午出发之前开了一把绝巴。进塔之后互架了几分钟发现塔里是两对一样配…

2025 年济南画室最新推荐品牌口碑排行榜权威发布,涵盖小班教学与全封闭管理机构,助力艺考生选优质画室

引言当前济南美术艺考培训市场蓬勃发展,各类画室数量急剧增加,但市场秩序却较为混乱。不少画室存在教学资质缺失、师资水平参差不齐、教学模式落后等问题,有的画室采用几十人的大班授课,教师无法兼顾每位学生,导致…

2025 年最新货代公司排行榜:国内优质企业权威推荐,助力企业精准挑选靠谱合作伙伴泰国/印尼/马来/日本/东南亚货代公司推荐

当前全球贸易格局不断变化,货代行业作为进出口贸易的关键支撑,市场需求持续增长,但行业乱象也随之凸显。众多货代公司资质不一,部分企业缺乏专业团队与成熟资源,在货物运输、清关报检等环节频繁出现延误、流程混乱…

P6076 [JSOI2015] 染色问题 分析

题目概述 有 \(n\times m\) 的棋盘,现在需要涂 \(k\) 种颜色上去,需要满足:每一行至少有一个格子被涂色。 每一列至少有一个格子被涂色。 \(k\) 种颜色必须都在这个棋盘上出现。数据范围:\(1\leq n,m,k\leq 400\)。…

CF2154 Codeforces Round 1060 (Div. 2) 游记

跳过 C2 直接开 D,实现太烂调试过多没时间再写 C2,表现分 $1938$ 勉强稳住紫线。省流 跳过 C2 直接开 D,实现太烂调试过多没时间再写 C2,表现分 \(1938\) 勉强稳住紫线。10.19 内含剧透,请vp后再来。 不是题解!!…

2025 最新推荐!国际物流 / 东南亚 / 跨境电商清关公司排行榜:精选优质机构助企业高效通关

引言当前跨境贸易规模持续扩张,清关作为贸易链条的关键节点,却深陷多重困境。多数机构服务碎片化,仅能覆盖单一环节,难以实现 “货运 - 清关 - 仓储” 全链路衔接,导致货物滞留率居高不下;特殊品类清关经验匮乏,…

C#转java的最好利器easy-query就是efcore4j sqlsugar4j freesql4j

C#转java的最好利器easy-query就是efcore4j sqlsugar4j freesql4j 背景 随着信创或者其他一系列面向领导编程导致部分使用C#的公司转型java,java下EfCore、SqlSugar 、FreeSql的竞品或者替代品就是easy-query 本章节我…