参考 07:平台差异、性能预算与编解码
参考 07:平台差异、性能预算与编解码
1. 平台差异速查
| 平台 | 输出格式 | 空间音频 | 关键约束 |
|---|---|---|---|
| PS5 | Tempest 3D AudioTech(硬件加速) | Object-based + HRTF | 需按 Sony 规范;认证对响度/声道严格 |
| Xbox Series | Windows Sonic / Dolby Atmos / DTS:X | 用户可选 | 支持硬件解码 XMA |
| Switch | 立体声 / 5.1 虚拟 | 有限 HRTF | 内存最紧,CPU 弱,编解码用 Opus/ADPCM |
| PC (Steam) | 用户设备决定 | Steam Audio / Sonic / Atmos | 设备差异最大,必须做多设备测试 |
| iOS / Android | 立体声为主 | 轻量 HRTF | 延迟敏感;蓝牙耳机延迟 100–300ms 需补偿 |
| VR (Quest / PSVR2) | HRTF 必开 | Ambisonics + 头部追踪 | 延迟 > 20ms 破坏沉浸;帧率优先 |
| Web / 小游戏 | 立体声 | Web Audio API | 需用户手势解锁音频;包体极小 |
2. 音频内存预算
| 平台 | 常驻音频内存 | 单关卡 | 总包体(压缩后) |
|---|---|---|---|
| 主机 / PC(3A) | 40–80 MB | 20–40 MB | 500 MB–2 GB |
| 主机 / PC(中型) | 20–40 MB | 10–20 MB | 100–300 MB |
| 移动端(中端) | 12–25 MB | 5–12 MB | 30–80 MB |
| Switch | 20–30 MB | 8–15 MB | 50–120 MB |
分配建议(以 40MB 预算为例):
常驻通用(UI + 玩家角色 + 通用反馈) 8 MB
环境音(当前场景) 6 MB
音乐(Stream,不计入常驻内存) —
语音(按语言 Stream) —
武器 / 敌人 / 载具(按关卡加载) 20 MB
余量 6 MB
3. CPU 预算
| 指标 | 主机 / PC | 移动端 | VR |
|---|---|---|---|
| 音频线程每帧耗时 | ≤ 2 ms | ≤ 1.5 ms | ≤ 1 ms |
| 占总帧时间比例 | ≤ 8% | ≤ 10% | ≤ 6% |
| 并发发声(真实 voice) | 96–128 | 24–32 | 48–64 |
| 效果器实例(混响等) | ≤ 12 | ≤ 4 | ≤ 6 |
| 音频更新线程数 | 1(独立线程) | 1 | 1(高优先级) |
CPU 大头排序:卷积混响 > 颗粒合成 > HRTF 空间化 > 压缩/失真 > EQ > 播放 → 优化顺序:先砍卷积混响数量(改用算法混响),再降 HRTF 质量阶数。
4. 编解码选型
| 格式 | 压缩比 | CPU 开销 | 适用 |
|---|---|---|---|
| PCM (WAV) | 1:1 | 极低 | 极短音效(< 1s)、UI、需精确循环起点 |
| ADPCM (IMA4) | 4:1 | 低 | 短 SFX(1–5s),移动端首选,无解码延迟 |
| Vorbis (.ogg) | 4–12:1 | 中 | 音乐、中长 SFX、PC/主机常用 |
| Opus | 6–20:1 | 中 | 语音、移动端、网络传输,低延迟 |
| AAC / HE-AAC | 10–20:1 | 中 | iOS 生态、流媒体 |
| 平台原生 (XMA / ATRAC9 / AT9) | 4–16:1 | 极低(硬件解码) | 主机平台优先,能省 CPU |
决策树:
时长 < 1s → PCM / ADPCM
时长 1–5s, 高频播放 → ADPCM(移动) / Vorbis(PC主机)
时长 5–30s → Vorbis + Stream
时长 > 30s / 音乐 → Vorbis/Opus + Stream(必选)
语音 → Opus + Stream
主机平台 → 优先用平台原生编码(硬件解码)
5. Stream vs In-Memory
| 判据 | 选择 |
|---|---|
| 时长 > 10s | Stream |
| 压缩后 > 500KB | Stream |
| 播放频繁(每秒多次,如脚步) | In-Memory(避免 I/O 卡顿) |
| 需要极短延迟(武器、UI) | In-Memory |
| 音乐 / 长环境音 | Stream(+ 预读缓冲) |
注意:
- Stream 需要 预读缓冲,切换时要异步加载,否则首播卡顿
- 移动端 Stream 会持续耗电与带宽,移动端音乐建议也部分常驻
- 同一时刻 Stream 数量限制:主机 ≤ 8,移动 ≤ 2–4
6. 延迟(Latency)
| 来源 | 典型值 | 对策 |
|---|---|---|
| 引擎音频缓冲 | 5–20 ms | 低延迟模式(增大 CPU 占用) |
| 中间件 DSP | 1–5 ms | 减少串行效果器 |
| 蓝牙耳机 | 100–300 ms | 移动端音游/节奏类需提供"延迟校准"选项 |
| 系统混音 | 10–40 ms | 不可控 |
交互音延迟红线:点击 UI 到听到声音 ≤ 50ms,否则玩家会觉得"卡"。 节奏类游戏:必须做延迟校准(玩家手动校准 offset)。
7. 性能优化清单
- 所有 3D 音设置 Max Distance(最重要的单项优化)
- 关闭听不见的声源:距离、遮挡、音量阈值(-60dB)三重剔除
- Voice Limit 按类设置,优先级排序正确
- 启用 Virtual Voice(而非直接 Kill,除非一次性音)
- 卷积混响数量 ≤ 2,其余用算法混响
- 高频播放的音效(脚步)用 ADPCM 并常驻内存
- 移除所有 HPF 以下的无用低频(省 CPU 且更干净)
- 随机容器(Random Container)不要一次加载全部变体到内存
- 避免每帧 Post Event,加状态判断与节流
- Bank 按关卡分包并正确卸载
- 用中间件 Profiler 跑最坏场景(大规模战斗)测峰值
8. 最坏场景测试(Worst Case)
必须构造并测量的场景:
- 最大规模战斗:N 个敌人同时开火 + 爆炸 + 音乐 + VO
- 快速场景切换:连续切 10 次关卡,检查 Bank 泄漏
- 长时间挂机:跑 2–4 小时,检查内存增长(泄漏)
- 暂停 / 切后台 / 恢复:检查声音是否正确恢复
- 设备插拔:拔插耳机、切换蓝牙,检查输出路由
- 多语言切换:检查 VO Bank 卸载干净
9. 平台认证要点
| 平台 | 音频相关认证项 |
|---|---|
| Sony (PS5) | 响度规范、声道配置、Tempest 兼容、无爆音、TRC 相关音频条目 |
| Microsoft (Xbox) | XR 音频规范、响度、Dolby 授权合规 |
| Nintendo | 响度上限、声道、内存上限、无 clipping |
| Apple (iOS) | 后台音频行为、静音开关行为、音频会话类别 |
| Google (Android) | 音频焦点(Audio Focus)处理、来电中断恢复 |
通用红线:游戏中任何时刻不得出现削波(clipping)、爆音(click/pop)、静默死区(音频卡死)。