Unity3D开发AI桌面精灵/宠物系列 【二】 语音唤醒 ivw 的两种方式-Windows本地或第三方讯飞等
Unity3D 交互式AI桌面宠物开发系列【二】ivw 语音唤醒
该系列主要介绍怎么制作AI桌面宠物的流程,我会从项目开始创建初期到最终可以和AI宠物进行交互为止,项目已经开发完成,我会仔细梳理一下流程,分步讲解。 这篇文章主要讲有关于语音唤醒ivw方面的一些方法。
提示:内容纯个人编写,欢迎评论点赞,来指正我。
文章目录
- Unity3D 交互式AI桌面宠物开发系列【二】ivw 语音唤醒
- 前言
- 一、什么是ivw语音唤醒?
- 二、Unity 内置语音唤醒 API
- 1.API讲解
- 2.方法讲解
- 2.方法封装
- 三、讯飞ivw语音唤醒接入本地版
- 1. 注册账号
- 2. 领取免费测试包
- 3. 创建应用
- 4. 设置唤醒词
- 5. 生成SDK
- 6. 下载插件包
- 7. 替换SDK库
- 8. 修改配置
- 9. 运行程序
- 10. 大功告成!!!
- 总结
前言
本篇内容主要讲Unity开发桌面宠物语音唤醒功能,大家感兴趣也可以了解一下这个开发方向,目前还是挺有前景的,AI智能科技发展这么迅猛,紧跟步伐哈~
下面让我们出发吧 ------------>----------------->
一、什么是ivw语音唤醒?
顾名思义,就是用户可以通过使用指定关键词来让桌面宠物做某件事或者有某种响应。原理即是通过实时监听用户语音,来检测其中是否含有指定关键词,监听到之后绑定某个事件。

二、Unity 内置语音唤醒 API
1.API讲解
- KeywordRecognizer类
- 引入命名空间 using UnityEngine.Windows.Speech;
- 通过 Windows 系统自带的一个dll库,在Unity封装后可以轻松使用
2.方法讲解
- private string[] m_Keywords = { “小姐姐” };
首先声明一个关键词数组- private KeywordRecognizer m_Recognizer;
然后创建一个关键词识别器- m_Recognizer.OnPhraseRecognized += OnPhraseRecognized;
然后给识别器绑定一个用户的自定义事件- m_Recognizer.Start();
这个是识别器的打开方法- m_Recognizer.Stop();
这个是识别器的关闭方法
2.方法封装
- 直接上代码,前面讲解过使用大概方法了
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
#if UNITY_STANDALONE_WIN
using UnityEngine.Windows.Speech;
#endif
/// <summary>
/// unity内置语音唤醒 windows有效
/// </summary>
public class UnityWakeOnVoice : MonoBehaviour
{/// <summary>/// 关键词/// </summary>[SerializeField]private string[] m_Keywords = { "小姐姐" }; /// <summary>/// 关键字识别器/// </summary>
#if UNITY_STANDALONE_WINprivate KeywordRecognizer m_Recognizer;void Start(){//创建一个关键字识别器m_Recognizer = new KeywordRecognizer(m_Keywords);Debug.Log("创建识别器成功");m_Recognizer.OnPhraseRecognized += OnPhraseRecognized;}/// <summary>/// 开始识别/// </summary>public void StartRecognizer(){if (m_Recognizer == null)return;if (!m_Recognizer.IsRunning){m_Recognizer.Start();}}/// <summary>/// 结束识别/// </summary>public void StopRecognizer(){if (m_Recognizer == null)return;if (m_Recognizer.IsRunning){m_Recognizer.Stop();}}/// <summary>/// 识别关键词回调/// </summary>/// <param name="args"></param>private void OnPhraseRecognized(PhraseRecognizedEventArgs args){StringBuilder builder = new StringBuilder();builder.AppendFormat("{0}", args.text);string _keyWord = builder.ToString();Debug.Log("识别器捕捉到关键词:"+_keyWord); }private void OnDestroy(){if (m_Recognizer != null){m_Recognizer.OnPhraseRecognized -= OnPhraseRecognized;if (m_Recognizer.IsRunning){m_Recognizer.Stop();}m_Recognizer.Dispose();m_Recognizer = null;}}#endif
}
- 代码很简单,根据需求直接调用Start方法开始识别,Stop进行关闭就可以了
- 重点来了,第三方平台的唤醒怎么接入,下面来看一下讯飞平台的吧
三、讯飞ivw语音唤醒接入本地版
1. 注册账号

- 注册讯飞账号,新用户有免费的服务量可以用来测试。注册完登录点击控制台
2. 领取免费测试包

- 按需求领取,领测试包,我的是二级测试包,新人也有不一样的包,领语音唤醒的包
3. 创建应用


- 点击用户下面的 “我的应用” 然后创建应用,命名语音唤醒的应用,创建成功后会生成一个APPKey或者APPID 保存好。
4. 设置唤醒词

-自己随便设置唤醒词,最好是不要加标点,可以同时设置好几个。

-点击前往SDK下载中心
5. 生成SDK

- 一定要先点回到旧版,新版没有普通的语音唤醒的,根据需求选择,可能和我的界面不一样,没关系,选择语音唤醒的包,点击下载。如果提示设置唤醒词,就再去设置一下。
6. 下载插件包
地址:讯飞语音唤醒的SDK离线版
7. 替换SDK库
- 打开自己下载的讯飞的语音唤醒的SDK包
- 找到bin文件下的 msc_x64.dll 和msc.dll 分别是64位和32位的库,对应系统装

- 将Unity中的msc_x64的库替换成自己的,直接粘贴替换
8. 修改配置

-修改脚本中的APPId为自己创建应用生成的APPId
9. 运行程序

-运行程序,大声喊出你在平台设置的关键词,然后看控制台是否有打印,成功的回调事件自行扩展哦~ 我测试是成功的。
10. 大功告成!!!

比心啦 ❥(^_-)
语音唤醒功能就实现啦!
二选一 总有你喜欢的!!!
总结
- 提示: 大家根据需求来做功能,后续继续其他功能啦,不懂的快喊我。
- 大家可以在评论区讨论其他系列下一期出什么内容,这个系列会继续更新的
- 点赞收藏加关注哦~ 蟹蟹
相关文章:
Unity3D开发AI桌面精灵/宠物系列 【二】 语音唤醒 ivw 的两种方式-Windows本地或第三方讯飞等
Unity3D 交互式AI桌面宠物开发系列【二】ivw 语音唤醒 该系列主要介绍怎么制作AI桌面宠物的流程,我会从项目开始创建初期到最终可以和AI宠物进行交互为止,项目已经开发完成,我会仔细梳理一下流程,分步讲解。 这篇文章主要讲有关于…...
三月九次前端面试复盘:当场景题成为通关密钥
三月初集中面了包括字节、美团、滴滴在内的9家公司,经历7场技术面2场Leader面后,发现如今的面试逻辑已发生根本转变。这里分享真实经历与题目,供近期求职者参考。 一、面试形态变化:从理论背诵到实战推演 1. 八股文边缘化&#…...
STM32 —— 嵌入式系统、通用计算机系统、物联网三层架构
目录 一、嵌入式系统的概念 二、通用计算机系统与嵌入式系统的比较 用途 硬件 软件 性能与功耗 开发与维护 三、嵌入式系统与物联网的关系 四、物联网的三层架构 1. 感知层(Perception Layer) 2. 网络层(Network Layer) …...
如何选择合适的 AI 模型?(开源 vs 商业 API,应用场景分析)
1. 引言 在 AI 迅猛发展的今天,各类 AI 模型层出不穷,从开源模型(如 DeepSeek、Llama、Qwen)到商业 API(如 OpenAI 的 ChatGPT、Anthropic 的 Claude、Google Gemini),每种方案都有其优势与适用…...
视频对讲系统中,强插和强拆;视频分发功能
强插和强拆 在视频对讲系统中,强插和强拆是两个具有特定功能的操作,具体含义如下: 强插功能:指在视频对讲过程中,具有更高权限的用户或管理员可以强行插入正在进行的通话或视频连接。例如,当小区保安室监控…...
C++输入输出流第一弹:标准输入输出流 详解(带测试代码)
目录 C输入输出流 流的四种状态(重点) 标准输入输出流 标准输入流 逗号表达式 1. 逗号表达式的基本规则 示例 2. 图片中的代码分析 关键点解析 3. 常见误区 误区 1:逗号表达式等同于逻辑与 && 误区 2:忽略输入…...
{瞎掰} 手机安装app问题:app签名,手机 or OS官方商店 其他非官方app源,安全防护 突破限制
以下,在华为安卓系统手机中,在安装app过程中得到的一些可能是错误的经验。 商品化 app 的收钱方式:通过商店来收钱,通过 app 本身提供的注册码功能来收钱,或是其他的收钱方式。 手机安装 app的特点 从官方商店里安装…...
鸿蒙NEXT项目实战-百得知识库05
代码仓地址,大家记得点个star IbestKnowTeach: 百得知识库基于鸿蒙NEXT稳定版实现的一款企业级开发项目案例。 本案例涉及到多个鸿蒙相关技术知识点: 1、布局 2、配置文件 3、组件的封装和使用 4、路由的使用 5、请求响应拦截器的封装 6、位置服务 7、三…...
记录一次,rabbitmq开启stomp插件之后,还是连不上15674端口的问题
原因是装在docker 里面的rabbitmq 没有映射15674端口,需重新删除容器之后重新运行 docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -p 15674:15674 -p 1883:1883 -p 15675:15675 rabbitmq:版本号 进入docker容器开启插件 docker exec -it rabbitm…...
黑马node.js教程(nodejs教程)——AJAX-Day01-04.案例_地区查询——查询某个省某个城市所有地区(代码示例)
文章目录 代码示例效果 代码示例 axiosTest.html <!DOCTYPE html> <!-- 文档类型声明,告诉浏览器这是一个HTML5文档 --> <html lang"en"> <!-- HTML根元素,设置文档语言为英语 --><head> <!-- 头部区域&am…...
vue 自制列表,循环滚动
需求人员表示,超过高度的表格内容需要滚动展示,所以效果图如下: 自定义列表样式,主要是通过flex布局,控制 类th 与 类td 的宽度保持一致,标签结构还是参考了table的结构,由thead与tbody包裹tr再…...
【QA】模板方法模式在Qt中有哪些应用?
在 Qt 框架中,模板方法模式(Template Method Pattern)被广泛应用于框架的设计中,通过定义算法骨架并允许子类在不改变结构的情况下重写部分步骤。以下是 Qt 中典型的应用场景及示例: 1. 事件处理(Event Ha…...
图论——kruskal算法
53. 寻宝(第七期模拟笔试) 题目描述 在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路,方便运输。 不同岛屿之间,路途距离不同,国王希望你可以规划建公路的方案,如何可以以最短的总公路距离将 所有岛屿联通…...
Windows主机、虚拟机Ubuntu、开发板,三者之间文件互传
以下内容源于日常学习的整理,欢迎交流。 下图是Windows主机、虚拟机Ubuntu、开发者三者之间文件互传的方式示意图: 注意,下面谈及的所有方式,都要求两者的IP地址处于同一网段,涉及到的软件资源见felm。 一、Windows主…...
Flutter Dart 泛型详解
引言 在 Flutter 开发中,Dart 语言的泛型是一项强大且实用的特性。泛型允许我们在定义类、方法或接口时使用类型参数,这样可以编写更加灵活、可复用且类型安全的代码。下面将详细介绍 Dart 泛型的各个方面,并结合代码示例进行说明。 1. 泛型…...
Windows Docker 报错: has no HTTPS proxy,换源
pull python 3.7报错: 尝试拉取Docker 测试库hello world也失败 尝试使用临时镜像源,可以成功拉取: sudo docker pull docker.m.daocloud.io/hello-world说明确实是网络问题,需要配置镜像源,为了方便,在d…...
Java:Arrays类:操作数组的工具类
文章目录 Arrays类常见方法SetAll(); 代码排序如果数组中存储的是自定义对象 Arrays类 常见方法 SetAll(); 注意: 不能用新的数组接是因为修改的是原数组,所以完了要输出原数组发现会产生变化参数是数组下标变成灰色是因为还能简化(Lambda…...
【面试场景题-Redis中String类型和map类型的区别】
今天在面试中碰到一个场景题:在 Redis 中存储 100 万用户数据时,使用 String 类型和 Hash(Map)类型的主要区别是什么?体现在以下几个方面: 1. 存储结构与内存占用 String 类型 存储方式:每个用…...
List附加对象
List里面的某个对象需要修改,赋值 可以使用ALL或者ForEach,All的话,不能直接使用赋值对象只能赋值对象的某个字段 static void Main(string[] args){List<UserData> UserDatas new List<UserData>{new UserData { Id 1, Name …...
VLLM专题(三十六)—自动前缀缓存
PagedAttention 的核心思想是将每个请求的 KV 缓存划分为 KV 块。每个块包含固定数量的标记(tokens)对应的注意力键(keys)和值(values)。PagedAttention 算法允许将这些块存储在非连续的物理内存中,从而通过按需分配内存来消除内存碎片。 为了自动缓存 KV 缓存,我们利…...
相机光学(四十七)——相纸材质
1. 光面相纸 光面相纸表面光滑,亮度高,反光性好,能够呈现出清晰、鲜艳的图像效果,适合用于表现色彩艳丽、反差要求较高的题材,如产品照、艺术照和风景照。然而,这种相纸容易沾上指纹和灰尘。 2. 绒面相纸…...
数据表100多字段如何写mapper文件的xml
编写一个包含100多个字段的插入语句通常涉及到使用<mapper>标签来定义映射规则,特别是在使用MyBatis这样的持久层框架时。 1. 定义<mapper>命名空间 order表 <mapper namespace"com.example.mapper.orderMapper"><!-- 插入语句 --…...
只是“更轻更薄”?不!遨游三防平板还选择“更强更韧”
当消费电子领域普遍追求“更轻更薄”的设计美学时,遨游三防平板不止于此,还选择了另一条道路——“更强更韧”。在智能制造的复杂场景中,三防平板需直面高温、油污、撞击与极端气候的考验。普通消费级平板因防护性能不足,常因环境…...
拉取镜像太慢?一文解决!
# 拉取 Docker 镜像太慢?一文解决!🚀在国内使用 Docker 拉取镜像时,可能会遇到速度慢甚至失败的情况。别担心!本文带你快速优化 Docker 拉取方法!🔥01 | 确保 Docker Hub 登录认证 🔐…...
基于RAGFlow本地部署DeepSeek-R1大模型与知识库:从配置到应用的全流程解析
作者:后端小肥肠 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: DeepSpeek服务器繁忙?这几种替代方案帮你流畅使用!(附本地部署教程)-CSDN博客 10分钟上手…...
(分块)洛谷 P2801 教主的魔法 题解
之前学过 莫队 算法,其运用了分块思想;但是我居然是第一次写纯种的分块题目。 题意 给你一个长度为 n n n 的序列 a a a(一开始 ∀ a i ∈ [ 1 , 1000 ] \forall a_i\in[1,1000] ∀ai∈[1,1000])。要求执行 q q q 次操作&…...
[蓝桥杯 2023 省 B] 飞机降落(不会dfs的看过来)
[蓝桥杯 2023 省 B] 飞机降落 题目描述 N N N 架飞机准备降落到某个只有一条跑道的机场。其中第 i i i 架飞机在 T i T_{i} Ti 时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 D i D_{i} Di 个单位时间,即它最早可以于 T i T_{i} Ti 时刻…...
信创系统极速文件查找:locate 命令详解
原文链接:信创系统极速文件查找:locate 命令详解 Hello,大家好啊!今天给大家带来一篇信创终端操作系统上 locate 命令详解的文章。在 Linux 及信创终端操作系统(如 统信 UOS、麒麟 KOS)中,查找…...
C# | 超简单CSV表格读写操作(轻松将数据保存到CSV,并支持读取还原)
C# | 超简单CSV表格读写操作(轻松将数据保存到CSV,并支持读取还原) 文章目录 C# | 超简单CSV表格读写操作(轻松将数据保存到CSV,并支持读取还原)一、上位机开发中的CSV应用背景二、CSV读写实战教学1. 基本对…...
PostgreSQL:语言基础与数据库操作
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...

