语音助手

本文介绍了基于Electron的语音助手项目,从项目简介、业务消息分层进行详细阐述。项目经历了从渲染进程到C++独立实现的过程,通过MQ进行进程间通信。作者通过梳理业务逻辑,将消息处理分为消息接收层、语义解析层和业务处理层,提高了代码的可维护性和拓展性。重构后,添加新指令和业务的改动量减少,增强了bug定位效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

语音助手

前言:相信大家都听过语音助手,虽然比较鸡肋,但确实有一部分人用过,比如苹果的Siri,微软的小娜。本次要做的业务也是跟这个功能类似,通过语音操作自己的软件中的部分功能。

1.项目简介

先讲一下项目的大体框架,这是一个基于electron实现的pc端应用程序,前端技术栈主要是node+vue+electron。一开始,这个语音助手功能是使用electron渲染进程实现的一个窗口,当时在这个窗口中处理语音交互,以及用户语音动作的执行。后来,考虑到助手功能以后会对接其他业务,所以选择将助手功能独立出来,改用c++实现。由于软件大部分功能基于electron实现的,所以用户指令的解析和处理还是放在了electron的主进程中。根据业务需要,功能做出如下调整:c++端负责助手UI界面、用户语音交互、服务器交互;js端负责语音指令解析处理和执行。js端代码主要放在electron的主进程中,之前的渲染进程窗口就没用了。

该项目进程间通信使用较多,大体上有四类,主进程和渲染进程,主进程和非electron进程,渲染进程和非electron进程 ,不同渲染进程之间。由于内容可能过多,打算另写文章讲解,不过最终都是采用事件监听和事件触发的方式实现。

我就是在这次改版中,分到这个项目的js端研发工作。刚接手的时候,对之前的业务没有了解,加上工期较紧。当时的想法就是,实现就行,没有考虑如何设计更具拓展性,代码文件如何划分更易维护。这些前期埋的雷,在经过几个版本的迭代过程后,逐渐暴露出来。当时光一个指令解析函数代码都几百,业务的代码文件上千行,而且很多打开窗口,函数代码明显重复。这些无疑对后续的功能拓展,缺陷问题定位,其他人接手,都极为不利。当时为了加一个新功能,都不知道代码该往哪里写。

2.业务消息分层

痛定思痛,开始梳理业务逻辑,发现了一些规律。所有的指令消息的处理都会经过如下图示的流程:

消息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值