中EN
概念页

音频系统与 MetaSounds

Audio System & MetaSounds

更新于 2026-10-13 约 13 分钟UE5音频MetaSoundsSound Class衰减并发Quartz

UE5 的音频资产分三层:音源 (Sound Source) 负责产生声音,UE5 主推 MetaSounds,它是一张由设计师搭建的数字信号处理 (DSP) 图,能精确到单个采样;分组与混音用 Sound Class 和 Sound Class Mix 批量调整音量和音高;空间与资源由 Sound Attenuation(随距离衰减和空间化)和 Sound Concurrency(限制同时播放数量)控制。需要和节拍对齐的玩法可以用 Quartz 做精确到采样的调度。

MetaSounds:可编程的音源

官方定义:MetaSound 是一个高性能音频系统,让音频设计师完全掌控生成音源的 DSP 图。它和 Sound Cue 的根本区别在于:MetaSound 本质上是一张 DSP 渲染图,可以在运行时合成声音,并提供音频缓冲级别、精确到采样的时序和控制。每个 MetaSound 都是一个独立的音频渲染引擎,彼此并行渲染,采样率、缓冲大小、声道数都可以不同。(MetaSounds: The Next Generation Sound Sources in Unreal Engine)

精确到采样 (Sample-Accurate) 的含义,以官方举的 48 kHz 为例:

Δt=148000 s≈0.02 ms\Delta t = \frac{1}{48000}\ \text{s} \approx 0.02\ \text{ms}

MetaSound 的触发器 (Trigger) 在图内执行精确到采样的事件,来源可以是游戏事件、节点或图本身;Wave Player 节点支持精确到采样的拼接;很多节点参数可以直接用音频缓冲调制,也就是「音频速率」调制。(MetaSounds: The Next Generation Sound Sources in Unreal Engine)

概念说明(官方)
MetaSound Source能独立发声的资产
MetaSound Patch图的操作方式与 Source 相同,但不能独立发声,供其他 MetaSound 引用复用
Preset继承父图(只读),只覆盖输入的默认值;父图改动会同步到所有 Preset
图的语义蓝图是执行图,MetaSound 是数据流图 (Flow Graph)
引脚类型Trigger(类似蓝图执行引脚)、Audio(真实音频缓冲)、Float/Int32/Bool/Time/String 等

新建的 MetaSound Source 默认启用 UE.Source.OneShot 接口,它会加入 On Finished 输出节点。如果 On Finished 永远不被触发,声音会无限播放;音乐、环境音这类无限时长的声音应在 Interfaces 面板中移除该接口。Trigger 由时序节点或游戏事件触发时精确到采样,但如果连接到非音频速率的节点,输出会退化为块速率 (block rate)。(MetaSounds Reference Guide in Unreal Engine)

Sound Class 与 Sound Class Mix

Sound Class 把多个声音分组,以便一次性调整参数:Volume、Pitch 是叠加在 Sound Wave 自身设置之上的乘数;Low Pass Filter Frequency 设置低通截止频率(20000 及以上等于不起作用);Always Play 可以防止该类声音被优先级更低的声音挤出语音池 (voice pool)。Sound Class 可以设置子类,子类设为 Inherited 时会继承父类的音高、音量和加载行为。被动混音修改器 (Passive Sound Mix Modifier) 在该类任一声音播放时自动生效,无需显式调用 Push Sound Mix Modifier;运行时也可以用 Sound Class Mix 动态调整参数。(Sound Classes in Unreal Engine)

下图是这几类资产在一次播放中的作用顺序(依据上面几份文档整理):

flowchart LR
  A[MetaSound / Sound Wave / Sound Cue] --> B{"Sound Concurrency 是否允许播放"}
  B -->|"拒绝或抢占"| X["不播放或停止旧声音"]
  B -->|"允许"| C["Sound Class 音量/音高/低通乘数"]
  C --> D["Sound Class Mix 运行时调整"]
  D --> E["Sound Attenuation 距离衰减与空间化"]
  E --> F["输出"]

图中的先后关系只是概念上的分工:并发决定「能不能播」,Sound Class 和 Mix 决定「这一类整体多响」,衰减决定「在这个位置听起来如何」。引擎内部的实际执行顺序,文档没有给出。

Sound Attenuation:距离与空间化

衰减形状的内区是满音量,离开内区后音量逐渐减小,到外区边界降到最小;减小的速度由衰减函数决定。(Sound Attenuation in Unreal Engine)

衰减函数特点与用途(官方)
Linear音量变化恒定,适合大型背景声的交叉淡化
Logarithmic近处变化大、远处变化小
Inverse与对数相似但更夸张,适合远处刚好听得到、靠近时明显变响的声音
Natural Sound尝试模拟更接近现实的衰减,介于对数和反比之间
形状典型用途
Sphere(默认)大多数点声源
Capsule水管这类沿长度分布的声音
Box盒形区域
Cone有方向性的声音,如广播喇叭

空间化 (Spatialization) 关闭时,声音变成 2D 声音,不做声像定位;空间化方法可以用内置插件,也可以在 Project Settings > Platforms > Audio > Spatialization Plugin 中换成第三方插件。Non-Spatialized Radius 让声音在听者靠近到一定距离内时逐渐过渡为非空间化,避免贴近大型声源时声像乱跳;3D Stereo Spread 控制立体声左右声道在世界中的间距。(Sound Attenuation in Unreal Engine)

Sound Concurrency:限制同时发声数

同时播放太多声音会消耗大量资源。Sound Concurrency 资产限制一组声音同时播放的数量,以及达到上限后怎么办;可以设为项目默认值,也可以在单个音源的 Concurrency Set 中指定多个(必须同时满足所有规则才能播放),或者用 Override Concurrency 单独覆盖。(Sound Concurrency Reference Guide)

属性说明
Max Count组内允许同时活跃的最大数量
Limit to Owner每个播放该声音的 Actor 单独计数
Resolution RulePrevent New / Stop Oldest / Stop Farthest Then Prevent New / Stop Farthest Then Oldest / Stop Lowest Priority / Stop Quietest / Stop Lowest Priority Then Prevent New
Retrigger Time两次播放之间的最小间隔;被它拒绝的声音不走虚拟化

常见的坑(官方):所有活跃的组件都计入 Max Count,不只是正在出声的;Source Bus 会占两个名额(原始音源一个、总线一个)。(Sound Concurrency Reference Guide)

Quartz:节拍对齐的精确调度

5.8 API 中,UQuartzSubsystem 提供 CreateNewClock(按名字创建时钟)、GetHandleForClock,以及 GetAudioRenderThreadToGameThreadMinLatency、GetRoundTripMinLatency 等查询游戏线程与音频渲染线程之间延迟的函数。(UQuartzSubsystem)它要解决的问题是:游戏线程下达播放命令到音频线程真正渲染之间有延迟,因此要提前调度,让声音落在精确的采样位置上。5.8 的《Quartz Quick Start》把 Quartz 定义为一个暴露给蓝图的调度系统,解决游戏线程、音频逻辑和音频渲染线程之间的时序问题,实现精确到采样的播放。官方示例(节拍器)的步骤(Quartz Quick Start):

  1. Get QuartzSubsystem → Create New Clock(Clock Name 设为 LevelClock,用 Make QuartzClockSettings / Make QuartzTimeSignature 设置拍号)。
  2. 把返回的 Clock Handle 提升为变量保存,官方说明这是为了防止它被垃圾回收。
  3. Set Beats Per Minute(示例为 100),再 Start Clock。
  4. Subscribe to All Quantization Events,在事件里对 EQuartzCommandQuantization 做 Switch:Bar(小节)时用一个 Make QuartzQuantizationBoundary 调用 Play Quantized 播放高音,Beat(拍)时播放低音。
flowchart LR
  S[QuartzSubsystem] -->|Create New Clock| H["Clock Handle 变量 防 GC"]
  H -->|Set BPM / Start Clock| C["音频渲染线程上的时钟"]
  C -->|"量化事件 Bar/Beat"| E["蓝图事件"]
  E -->|"Play Quantized + 量化边界"| A["Audio Component 在精确采样处发声"]

图中左半部分在游戏线程上执行,时钟本身运行在音频渲染线程上,Play Quantized 把播放命令排进时钟,在下一个量化边界的精确采样处执行。以 100 BPM 为例,一拍的长度是 60/100=0.660/100=0.6 秒,在 48 kHz 下是 0.6×48000=288000.6\times48000=28800 个采样(这是算例)。

取舍

  • 需要程序化、参数驱动、精确时序的声音用 MetaSound;简单的随机播放用 Sound Cue 也可以(这是归纳)。
  • MetaSound Source 默认是 OneShot;循环声忘了移除这个接口或从不触发 On Finished,都会导致声音行为异常。
  • 并发上限按「活跃组件」计数,大量挂着但不出声的 Audio Component 也会占名额。

GEA 的视角:通用音频引擎概念与 UE5 资产的对应(卷 II 15.4–15.6)

GEA 第 15 章用不依赖具体引擎的术语描述音频引擎,可以和本页的 UE5 资产对照(对应关系是对比归纳,UE5 侧的说法来自本页引用的官方文档):

GEA 概念本页中的 UE5 对应说明
音效提示 (sound cue):片段 + 播放元数据,程序只按事件播放(卷 II 15.5.7.2)Sound Cue、MetaSound SourceGEA 提到 Scream 的 cue 可以带任意脚本;MetaSound 更进一步,本身就是一张可在运行时合成的 DSP 图
分组 (group)、预主混、混音快照(卷 II 15.5.8.1、15.5.8.3)Sound Class、Sound Class Mix、被动混音修改器两边都用"分类 + 单值控制整类"实现;GEA 的闪避 (ducking) 可以由某类声音出现时自动触发,与 Passive Sound Mix Modifier"该类声音播放时自动生效"是同一思路
FO min / FO max 与衰减曲线(卷 II 15.4.3)Sound Attenuation 的内区/外区与衰减函数GEA 认为物理正确的增益衰减是 1/r1/r,并主张按游戏需要定制曲线;UE5 的 Natural Sound 函数是官方给出的"更接近现实"的选项
聚焦角:声源靠近或进入扬声器圆时铺开到多只扬声器(卷 II 15.4.4.5)Non-Spatialized Radius都是为了避免贴近声源时声像乱跳;GEA 的做法是加宽声像,UE5 文档的做法是逐渐过渡为非空间化
实例限制、按组限制、优先级与语音抢占(卷 II 15.5.8.4)Sound Concurrency(Max Count、Resolution Rule)、Sound Class 的 Always PlayResolution Rule 中的 Stop Farthest、Stop Lowest Priority、Stop Quietest 对应 GEA 列举的按距离(FO max)、按优先级抢占;Always Play 对应 GEA 的"不可抢占"标记
总线延迟、游戏线程与音频线程之间的缓冲(卷 II 15.5.6.3)Quartz 的延迟查询与量化调度GEA 讲缓冲大小带来的延迟;Quartz 通过提前调度到量化边界,把这段延迟变得可预测
动态音乐、插入乐与过渡时机(卷 II 15.6.3)Quartz 的 Bar/Beat 量化事件GEA 指出音乐过渡难在节拍对齐;Quartz 可以把切换放到小节或拍的边界上

细节见 音频引擎架构、三维音频渲染 和 游戏音频功能与角色对话。

分歧:GEA 的概览只说"Unreal Engine 提供自己的 3D 音频引擎和集成工具链"(卷 II 15.5.9.4),没有介绍 MetaSounds、Quartz 等具体系统;本页内容以 UE 5.8 官方文档为准。

  1. MetaSounds: The Next Generation Sound Sources in Unreal Engine UE 5.8 文档
  2. MetaSounds Reference Guide in Unreal Engine UE 5.8 文档
  3. Sound Classes in Unreal Engine UE 5.8 文档
  4. Sound Attenuation in Unreal Engine UE 5.8 文档
  5. Sound Concurrency Reference Guide UE 5.8 文档
  6. UQuartzSubsystem UE 5.8 API 参考
  7. Quartz Quick Start UE 5.8 文档
  8. Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
  9. Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 15 章 15.4–15.6 节

相关页面

游戏开发 · UE5Gameplay 框架Gameplay FrameworkGameplay 框架 (Gameplay Framework) 是 UE 提供的一组相互配合的类,用来搭建游戏的基本结构:Actor 与组件 (Component) 构成场景中的一切;GameMode 在服务器上定规则并生成玩家;玩家由“控制器 (Controller) + 棋子 (Pawn)”组成;GameState 与 PlayerState 负责把全局与每个玩家的状态复制给所有客户端;GameInstance 跨关卡存活。游戏开发 · UE5子系统Subsystems子系统 (Subsystem) 是自动实例化、生命周期绑定在宿主对象上的类:Engine、Editor、GameInstance、World、LocalPlayer 五种。宿主创建时自动创建并 Initialize(),宿主关闭时 Deinitialize(),之后无引用即被 GC。它替代了「继承 GameInstance 塞管理器」的老做法,自带按类型的蓝图节点和 Python 访问,特别适合插件。官方编程页只列四种,World 子系统依据 5.8 Python API 补充。游戏开发 · UE5配置文件系统Configuration FilesUE 的 .ini 配置按类别(Engine、Game、Input……)分层加载:从引擎 Base 文件到项目 Default 文件,再到平台文件和用户文件,后加载的同名键覆盖先加载的。数组可以用 +、-、! 等运算符跨层增删。UCLASS(config=X) 加上 UPROPERTY(Config) 可以让类的默认值从 ini 自动读取;命令行 -ini: 可以临时覆盖。游戏开发 · UE5Sequencer 过场动画SequencerSequencer 是 UE 的多轨道过场动画编辑器:在 Level Sequence 资产里添加轨道和关键帧,来驱动物体、角色和相机。数据存放在 Level Sequence 资产(内容浏览器中),由关卡里的 Level Sequence Actor 把它绑定到关卡并播放。Camera Cuts 轨道在播放时接管相机;最终的高质量输出通过 Movie Render Queue 完成,可以搭配路径追踪器。游戏开发音频引擎架构Audio Engine Architecture音频渲染软件和多数系统一样是分层的"栈":硬件 → 驱动 → 底层 API → 3D 音频引擎,功能集通常模仿录音棚的多通道调音台。每个 2D/3D 声音是一条语音 (voice),沿语音总线经过编解码、增益、预发送滤波、辅助发送分出干湿两路、混响、后发送滤波和声像,然后由主混音器合成多声道信号,再经主输出总线(预放、LFE 生成、EQ、压缩、主音量)送到扬声器。资产上分片段、音效提示 (cue)、声音库和流式声音;混音靠分组、闪避、总线预设与混音快照、实例限制和语音抢占(GEA4 卷 II 15.5)。游戏开发游戏音频功能与角色对话Game-Specific Audio Features & Character Dialog在 3D 音频渲染管线之上,游戏还要实现分屏、物理驱动音频、动态音乐、角色对话、声音合成和人群声音等专门功能。GEA 重点讲了分屏的多听者问题、顽皮狗《最后生还者》的角色对话系统(逻辑台词、随机不重复、优先级与打断、把对话作为一等实体、排他性、基于规则和事实字典的分支对话、按区域标签的情境台词、对话手势)以及音乐系统(播放列表、紧张度、插入乐、过渡)(GEA4 卷 II 15.6)。游戏开发三维音频渲染3D Audio Rendering3D 音频渲染引擎要尽可能可信地重现"玩家若真在游戏世界里会听到什么"。它的输入是世界里大量的 3D 声音,输出是少数几路扬声器声道;主要任务是合成、空间化(距离衰减 + 声像定位)、声学建模(混响、遮挡、衍射)、多普勒和混音。GEA 给出了恒功率声像律、聚焦角、混响区域交叉混合、遮挡/阻挡/排除的分析方法,以及顽皮狗《最后生还者》的随机传播建模和声音门户(GEA4 卷 II 15.4)。游戏开发对象池Object Pool对象池 (Object Pool) 预先一次性分配一组可复用对象,需要时从池里取一个未使用的对象并初始化,用完标记为未使用,而不是逐个 new/delete。它能避免频繁分配的开销和堆碎片,常用于粒子、子弹、正在播放的声音等。代价是池大小要调校、同时活跃的数量有上限、复用的对象不会被自动清零,在有 GC 的环境里还可能让本该回收的对象一直活着。

被这些页面引用1 篇

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原