UDN
Search public documentation:
AudioSystemCH
English Translation
日本語訳
한국어
Interested in the Unreal Engine?
Visit the Unreal Technology site.
Looking for jobs and company info?
Check out the Epic games site.
Questions about support via UDN?
Contact the UDN Staff
日本語訳
한국어
Interested in the Unreal Engine?
Visit the Unreal Technology site.
Looking for jobs and company info?
Check out the Epic games site.
Questions about support via UDN?
Contact the UDN Staff
音频系统
概述
常用概念
Audio Device(音频设备)
正如上面所描述的,这是音频系统的主要接口。它维护这一系列加载的资源,处理收听者并管理声源。- Init - 初始化硬件,分配通道以及其它为了听到音频所需要做的工作。
- TearDown - 关闭硬件并把释放所有资源给系统。
- Update - 更新接收者的位置、方向和速度。
- Exec - 处理运行任何输入到控制台的调试命令。
Sound Sources(声源)
Sound Sources(也成为声音)代表用于混合到最终输出的一个单独声音。声源的数量是有限制的,根据硬件限制或者通过配置文件进行定义。每个声源都有一个位置、音量、音调和速度属性。所有平台的默认 MaxChannels(最大通道)数为 32,该数量被限定在 1 到 64 之间。设置 MaxChannels(最大通道)为 0 是获取所有音频代码的最快方法。- Init - 找到要播放的声音资源,并把它提交给硬件。
- Update - 把引擎中的音量、音调、位置和速度信息更新到硬件中。
- Play - 开始播放声源。
- Stop - 停止播放声源。
- Pause - 暂停这个声源的播放。
- IsFinished - 处理声音的结束、根据需要发送通知并且使队列缓存加倍。
Sound Buffers(声音缓冲)
Sound Buffers 是波形数据的容器。控制台命令 "ListSounds" 将会显示当前加载的素有波形及它们的格式。如果内存允许,可以由无限数量的波形。这些波形的进入通常有两种基本类型: 当声音系统完全地包含所有的数据并且引擎具有最小控制时声音进入内存;当引擎需要知道声音什么时候进行循环或者什么时候进行实时地解压时开始把声音进行排队(也就是在 PC 上解压 ogg vorbis 格式的文件)。- Init - 放置声音资源并根据需要进行加载。
UAudioComponent(音频组件)
AudioComponents 主要介绍了引擎如何和音频设备进行交互。当引擎要播放声音时,它调用 UAudioDevice::CreateComponent 并设置返回的结构体的属性。这个结构体然后被附加到 actor 的一系列组件上以便稍后进行管理。如果向 UAudioDevice::CreateComponent 函数中传递一个位置,将会进行简单的距离剔除检测来判断声音是否很短,以及组件是否被创建。通常检测 UAudioDevice::CreateComponent 返回的值是否为 NULL 是很重要的,因为这可以判断使用 -nosound 禁用音频时的运行状况。 UAudioComponent 中最重要的变量是 class USoundCue* SoundCue; //要播放的声音BITFIELD bUseOwnerLocation:1; //空间化这个声音到附加这个声音的 actor 的位置处。
BITFIELD bAllowSpatialization:1; //在3d空间中空间化这个声音。
FVector Location; // Location to use for spatialisation if not attached
FVector ComponentLocation; //如果声音附加到了 actor 上,使用这个位置进行空间化处理。
Sound Classes(声音类别)
每个声效都可以被分配给在包 Content\Sounds\SoundClassesAndModes.upk 中定义的一个声音类别。声效类的这些特定的属性和层次放置在 FSoundClassProperties 类中。这些属性及层次和传递给所有子节点的某些父类属性在同一个层次中。根声音类别成为 "Master",并且它是必需的。 可以建立这些层次,并在声音类编辑器中改变属性。它的工作方式和声效编辑器是类似的。 这些组可以用于应用于音量 和/或 音调的调整。UTGame 的测试地图 "DM-SoundMode" 可以解释这个应用;在命令行中调用 SetSoundMode'lowpass', 'bandpass', 'highpass', 'quick' 和 'slow'来了解它的工作原理。其中的一个警告是声音类的属性不能在层次结构上起作用。Reverb Effect(混响效果)
这些是以不考虑特定平台的情况下实现的,可以根据需要使用目标平台可以使用的参数。参数定义在代码中的 FAudioEffectsManager::ReverbPresets 表格中。在 UnPlayer.cpp 中,代码获得玩家所在的 Reverb volumes(混响体积)的混响设置,并把这些设置传递到 FAudioEffectsManager::SetReverbSetting 进行插值,再传递到特定的平台层次。因为对参数进行了插值,所以没有混响中断。混响体积可以通过右击画刷并选择“Add Volume(添加体积)” --> “Reverb Volume(混响体积)”来创建。_FAudioEffectsManager_ 是基类;特定平台的接口从它那继承而来。AmbientZone Effects(环境区域特效)
现在 Reverb volumes(混响体积)合并‘AmbientZone(环境区域)’设置;这些有用模仿环境声音的遮挡。当在内部时,可以把 Volume(体积) 和/或 低通滤波器效果应用到外面的声音上,反之当在外部时把它们应用到里面的声音上。比如,您可以放置一个巨大的室外环境声音风声的效果来覆盖到整个关卡中,但是当玩家移动到内部时,风声将会渐弱,并且和玩家在同一个体积内的声音将会渐强。 要获取更多文档资料,请查看使用环境区域页面。DistanceModel Attenuation(距离模型衰减)
Attenuation(衰减)是指当玩家远离一个声音过程中声音变弱的能力–衰减的速率在 DistanceModel 属性中进行定义。 请参阅DistanceModel Attenution(距离模型衰减)页面了解更多信息。Low Pass Filter(低通滤波器)
目前这是通过衰减声音节点实现的。它有一个标志用于启用这个功能,还有要使用的最小和最大距离。它实际上是作为高架滤波器来实现的,当它在最小距离时不对任何东西进行插值,当在最大距离是它将对高频率部分进行插值。Sound Modes(声音模型)
声音模型随着时间变化改变一组声音类。声音组是声音类的已经废弃的别名(因为这容易和包中的组混淆)比如 Ambient 和 Weapon。 您可以使用声音修改功能设立一系列的声音类效果。比如,过场动画会话,可以在对话时提高音量,降低特效的音量(这些不能层次上进行应用)。设置声音模型在第一次延迟后开始淡入模型(在整个淡入时间内),持续一段时间,然后淡出为默认值(在整个淡出时间)。当时间间隔小于 0 时,意味着在另一个模型被设置之前将一直持续这个模型。您应该有一个称为 soundmodes(声音模型)的包,它具有默认的 soundmode(声音模型)入口;可以把新的声音模型添加到那个包中。新的声音模型可以通过游戏脚本进行触发。 UDKGame 中的地图 SoundMode 可以充分地说明这个问题。运行该地图,并在命令行中输入 'setsoundmode quick'、'setsoundmode slow' 或者 'setsoundmode loud'。您可以在 PIE 中运行它,并且可以在到处查看的过程中编辑或创建您自己的声音模型。 以下是音量调节的应用实例。Volume Ducking(音量调整控制)
Volume Ducking 通常会降低除了您想听到的声音以外的所有其它声音,通常这个声音是对话(但不仅限于电影中)。它通常可以控制:- 识别导致音量调整的声音组(对话)。
- 当来自那个组的某个声音被触发后,其它的组将会在 X 秒后降低相应的音量(
FadeStartTime
= 0.3 秒)。 - 其它组降低音量得多少(
FadeAmount
= -0.4)。 - 当 docking 组的声音停止时,其它组的音量在 X 秒后返回为正常值(
FadeStopTime
= 0.2 秒)。 - 也许您也想使得某些声音组在 ducking 过程不受到影响(比如音乐),或者名称为 Exceptions 不受影响。
导入声音
规格 | |
格式 | .Wav |
位速率 | 16 |
扬声器通道 | Mono, Stereo, 2.1, 4.1, 5.1 6.1, 7.1 |
扩展名 | 4.0 | 5.1 | 6.1 | 7.1 | ||
FrontLeft | _fl | * | * | * | * | |
FrontRight | _fr | * | * | * | * | |
FrontCenter | _fc | * | * | * | ||
LowFrequency | _lf | * | * | * | ||
SideLeft | _sl | * | * | * | * | |
SideRight | _sr | * | * | * | * |
BackRight | _br | * |
可视化编辑器工具
声效编辑器
您可以把音频文件的导入为 声音波形 ,然后在声效编辑器中对其应用称为 音频节点 的修改器。声音质量预览器
如果您在通用浏览器中右击一个 SoundNodeWave 资源,并选择 Sound Quality Previewer(声音质量预览器) ,引擎将会在 5, 10, 15, 20, 15, 30, 35, 40, 50, 和 60 压缩设置下压缩声音。然后您可以点击任何特定的质量设置并在它被重新解压为 16 位 PCM 后听到声音。这可以用于选择最好的保真度 VS 内存设置。点击 确定 将会把当前的设置应用到波形上。多通道导入/导出
在通用浏览器中… 导出:- 从菜单中选择 Import(导出) 。
- 选择文件 "Surround_fl.wav"、"Surround_fr.wav"、"Surround_sl.wav"、"Surround_sr.wav"。
- 选择您想将其保存到的包并点击 OK to all(适用到所有) 。
- 从菜单中选择 Export(导出) 。
- 选择保存文件的位置。
策略
对话 | ~1.4 |
音乐 | ~0.75 |
武器 | ~1.1 |
环境 | ~0.5 |
优化声音的内存使用
测试地图
- DM-SoundLoop - 用于测试无限循环和使用通知声音的循环。
- DM-SoundReverb - 用于测试使用低通滤波器的混响和衰减。
- DM-SoundMultichannel - 测试 5.1 播放。
- DM-SoundMode - 测试声音模型。可用的测试模型是 loud(大)、quiet(静)、quick(快)、slow(慢)、 lowpass(低通滤波)、bandpass(带通滤波)、highpass(高通滤波)。
- DM-SoundInterior - 测试环境区域功能。
动态载入
调试命令
- ResetSoundState: 关闭任何以及所有调试命令。
- TestLowPassFilter: 应用低通滤波器到所有的源。
- IsolateDryAudio: 过滤掉混响声音,仅留下未被混响的声音。
- IsolateReverb: 过滤掉未经过任何处理的声音,仅留下混响声音。
- SetSoundMode x: 从声音组属性中应用音量和音调修改,并且从 UnAudioEffects.cpp 中定义的表格中应用一个 EQ 过滤器。
- ListSounds, ListSoundDurations, ListAudioComponents: 列出当前加载的声音的详细信息。
- ListWaves: 列出当前播放的声音的详细信息。
已知问题
- TTP 60174: 当游戏窗口移动时,音频将会重新开始。
- TTP 64605: -nosound 不会传递给 PIE。
- TTP 80463: AmbientSoundSimple actor 不是总能在编辑器的实时预览重新启动。
- TTP 92710: 使用 Delay Node 节点的 Sound Cues 不能在通用浏览器或者声效编辑器中进行正确地预览。
- TTP 120345: AmbientSoundSimpleToggleable 的音量渐变功能被破坏。
- TTP 122495: 如果把 Looping Node(循环节点)放置到 mixer(混合器)后并且同时也连接了非循环节点时,Looping Node(循环节点)不能正常工作。
- TTP 122683: Distance Crossfade(距离交叉衰减)节点会不正确地重新触发播放 SoundNodeWave。