UEC++ 资源加载(二)间接属性引用
FSoftObjectPath FSoftObjectPath是一个简单的结构体,使用一个字符串包含资源的完整名称。可以在编辑器中拾取资源(这与直接属性引用相同),但是并不加载资源!资源的加载需要通过额外的代码编写完成! FSoftObjectPath被暴露到面板中对于资源的拾取并没有特定的要求,所有能够被序列化的资源均能被拾取(类资源,非类资源) 在头文件中声明一个FSoftObjectPath变量,暴露到蓝图中,在蓝图中指定资源路径 12UPROPERTY(EditAnywhere)FSoftObjectPath...
UEC++ 资源加载(一)直接属性引用
1、编辑器直接加载: 通过使用属性宏标记UPROPERTY(Edit三个都可以3)来将资产对象指针暴露到编辑器面板,从而直接从编辑器面板拾取资产。 注意:UClass类指针,专门用来拾取类模版资产 123456// 拾取任意类UPROPERTY(EditDefaultsOnly)UClass* ActorClass;// 拾取音频类UPROPERTY(EditDefaultsOnly)class USoundBase* SoundSrc; 2、TSubClassOf TSubclassOf是提供UClass的安全模板类,通过此模板类我们可以快速在编辑器中进行类型选择,帮助我们快速构建某种类型对象数据。 TS对类型有约束,只能选取模版类型或是继承自模版类型的类或是蓝图 使用语法: 12TSubclassOf<T> type;type.Get();// 获取到Class数据对象 通过通过TSubClassOf构建指定的对象类型 123456// 拾取任意类UPROPERTY(EditDefaultsOnly)UClass* ActorClass;//...
Qt中实现高准确率的语音识别_qt
选择语音识别引擎 开源语音识别项目中,以下两款工具可以用于支持中英文识别,并且与Qt兼容: Vosk:Vosk是一个开源的语音识别工具,支持中英文及多种语言,具备离线识别能力,且不依赖互联网。 PaddleSpeech:PaddleSpeech是百度的开源语音识别工具,准确率较高,但需要稍微多一点的配置。 本示例将使用 Vosk,它支持多平台,且易于集成到C++项目中,满足离线使用、90%以上准确率、开源等要求。 Vosk资源下载 首先,下载Vosk的C++库及中英文模型文件: 如果不想编译库,这里有已经编译好的 中英文模型:Vosk 模型下载 下载对应的库和模型,并确保你的开发环境中已经配置好CMake和Qt开发环境。 示例代码 以下是一个完整的Qt项目代码示例,展示如何使用Vosk...
语音识别——使用Vosk进行语音识别
前言 Vosk是语音识别开源框架,支持二十+种语言 - 中文,英语,印度英语,德语,法语,西班牙语,葡萄牙语,俄语,土耳其语,越南语,意大利语,荷兰人,加泰罗尼亚语,阿拉伯, 希腊语, 波斯语, 菲律宾语,乌克兰语, 哈萨克语, 瑞典语, 日语, 世界语, 印地语, 捷克语, 波兰语, 乌兹别克语, 韩国语, 塔吉克语。 Vosk还支持设备上离线语音识别 ,包括Raspberry Pi,Android,iOS等,API接口简单,并且有多种语言支持,同时会识别语义,最终输出合理的语句。 一、Vosk模型 1.准备好所需要的语音包 在开始使用Vosk之前,需要拥有语音识别的模型,如图中拥有很多语音模型,中文、英文、西班牙、印度等等,Vosk模型库,需要外网才可以下载 2.下载使用 下载并进行解压后如下图所示,例如这里有简单英文、轻量级中文、和用于服务器处理的大型通用中文模型等,根据需要进行下载 解压后放在对应目录下,值得注意的是,是整个解压后的文件夹,而不是某一固定文件,一定要放在对应位置,不然使用时会直接崩溃,连报错都没有。 二、使用示例 ...
Vosk 进行中文语音识别实例_vosk
这个示例展示了如何在 Qt 中集成 Vosk 进行中文语音识别。该示例不仅涵盖了录音的设置与保存,还确保录制的音频文件符合 Vosk 的要求格式。通过 Vosk 的中文模型,我们可以对音频内容进行识别,获取准确的中文转写结果。此外,示例中通过 QString::fromUtf8 来正确解析 Vosk 返回的 UTF-8 编码字符串,确保最终显示的中文内容没有乱码。 示例详细概述 前期准备 在开始编写代码之前,确保已下载 Vosk 库和中文语音模型文件,并将其存放在项目路径中,使程序能够正确加载所需的资源。 功能说明 音频录制:通过 Qt 的 QAudioInput 类,我们设置了一个16kHz采样率、单声道、PCM 编码的录音格式,录制的音频将保存为 .wav 文件,这也是 Vosk 模型所要求的标准音频格式。 语音识别:示例中加载了 Vosk 的中文语音模型,录制完成后将音频文件输入到模型中,由 Vosk 提供的识别器对音频内容进行处理,并生成中文转写结果。 中文字符显示:由于 Vosk 返回的识别结果是 UTF-8 编码的字符串,为了确保 Qt 能正确显示中文,使用...
UEC++ 结构体和枚举
1、结构体 在虚幻C中结构体和普通C结构体构建方式相同,但是如果希望构建于蓝图交互的结构体则需要额外的处理! UE支持结构体的构建和使用,但是由于蓝图特殊,普通的结构体定义无法被蓝图访问,我们需要借助USTRUCT宏进行构建UE中的结构体 语法: 123456 USTRUCT(BlueprintType) struct FBoxPosition { GENERATED_USTRUCT_BODY() int32 x; int32 y;}; 注意:结构体名称必须使用 F 开头,必须带两个操作宏,如需要在蓝图中使用,需要加入BlueprintType标记 2、枚举 语法与C++相同,总的来说可以使用以下两种方式进行构建 添加宏记可以使枚举在蓝图中也可使用 第一种:空间构建方式 1234567UENUM(BlueprintType)namespace GColor { enum Type { Blue, Red ...
UEC++ 容器:TSet
TSet TSet也是键值容器和TMap类似,但速度快,无需提供单独的键进行关联元素,不允许有重复的键。 TSet 也是值类型,支持常规复制、赋值和析构函数操作,以及其元素较强的所有权。集合被销毁时,其元素也将被销毁。键类型也必须是值类型 与TArray的区别: TSet是KV容器 TSet不保证数据填充顺序。 TSet数据存储时无法重复存储,TArray可以 构建、添加数据: 1234567TSet<FString> set; set.Add(TEXT("set01"));// 添加内容 TSet<FString> set2; set2.Add(TEXT("set02")); set.Append(set2); // 合并操作 遍历: 123456789101112for (auto& Item : set) { Item = TEXT("cg01");// 修改值 } for (auto It =...
UEC++ 容器:TArray
说明:容器是方便我们存储数据的载体,在虚幻中,为我们提供了三种容器。分别是TArray,TMap,TSet。首先虚幻提供的容器都是同质容器,只能用来存储相同类型的数据。三种容器具备不同的特性,针对不同的特性,我们可以根据使用场景选择操作的容器。 并且在虚幻定义了丰富的API供开发者使用 注意:在使用这三种容器的时候需要注意,只有TArray可以使用UPROPERTY宏说明 TArray 最常用的数据容器,特点速度快,内存消耗小,安全性高。 TArray被称为同质容器:其所有元素均完全为相同类型。不能进行不同元素类型的混合。 TArray被设计成值类型,无法被继承,不要使用new和delete在堆上进行创建销毁。元素也是数值类型,为容器拥有。TArray被销毁时元素也被销毁。从一个TArray创建新的TArray变量,将把元素复制到新的变量中,不存在共享状态。 初始化: 注意事项:容器在构建时,不要构建为堆对象!直接构建为栈对象!由于容器是模版类,在构建时必须指出存储数据类型。 1234 // 容器需要构建为栈对象类型TArray<FString> Array; ...
UEC++ 数据类型
禁止在UE中使用C++的基本数据类型,这样会影响引擎的跨平台特性 1、基本数据类型 bool 代表布尔值 (永远不要假设布尔值的大小) 。 BOOL 将不会进行编译。 TCHAR 代表字符型(永远不要假设TCHAR的大小)。 uint8 代表无符号字节(占1个字节)。 int8 代表有符号的字节(占1个字节)。 uint16 代表无符号"短整型" (占2 个字节)。 int16 代表有符号"短整型" (占2 个字节)。 uint32 代表无符号整型(占4字节)。 int32 代表带符号整型(占4字节)。 uint64 代表无符号"四字" (8个字节)。 int64 代表有符号"四字"(8个字节)。 UE float 代表单精度浮点型 (占4 个字节)。 double 代表双精度浮点型 (占8 个字节)。 PTRINT一个符号整数和一个指针一样大小(用来标记指针的大小)...
UEC++自定义日志分类
以下两个步骤均完成才可 1、声明自定义日志分类 1234567891011 /** * A macro to declare a logging category as a C++ "extern", usually declared in the header and paired with DEFINE_LOG_CATEGORY in the source. Accessible by all files that include the header. * @param CategoryName, category to declare * @param DefaultVerbosity, default run time verbosity * @param CompileTimeVerbosity, maximum verbosity to compile into the code **/#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity,...






