Wwise杂记
开发相关Note
- 事件Notes需要写备注
- 事件命名需要有一个规则
- 音频重复段的复用,尽可能的少、短 - 影响内存
- 需求整理 - 什么地方有音效、什么时机、不同场景是否不同
- 程序如何发起GameCall,以及GameCall的附加信息
- 需要多少种类的输出总线,各总线的效果器、闪避规则,对应的转码设置
- SoundBank组织的规划 => 类比AB包
- 音频命名规则
- 专属行为
- 专属类型
- 专属地图
- 工作如何组织规划
- 每个音频对象都需要设置并发数
- Wwwise工程如何进行版本管理&多人协助如何开展
如何优化
在移动平台(iOS和Android)上:
- 音频线程CPU:10%或更低的稳定性能。
- 音色数(总数):最多20个并发有效音色。
- 总媒体内存:总内存使用量为10 MB或更少。
- 流数(活动):总共10个并发流。
内存优化
- 使用压缩音频文件格式
- PCM 未压缩 最佳音质 (使用短而重复的音频文件,以减少处理能力或高保真声音的压力)
- Vorbis 以非常低的比特率保持音质 (适用于项目中的大多数声音,但避免在具有高重复率的音频文件上使用此格式,因为它需要一些处理能力来解压缩。)
- ADPCM 与PCM相比,ADPCM提供3:1的压缩比。与Vorbis相比,它几乎不使用CPU,这使它在许多情况下成为一个很好的编解码器。(环境或其他SFX,你想释放比PCM更多的内存。对于移动设备而言,它是Vorbis的一个很好的替代品,以节省CPU,并且它相较于PCM节省运行时内存)
- AAC iOS和Mac特定的音频文件格式。在iOS上,可以使用硬件辅助iOS解码器来缓解CPU压力。硬件一次只能解码一个音频源,因此请注意不要将并发播放声音分配给AAC或循环声音。(非常适合非循环和非并发声音,如对话)
- Opus 在比特率大致相同的情况下,Opus 编解码器在感知品质方面的表现比 Vorbis 稍胜一筹。然而,Opus 的 CPU 用量却比 Wwise Vorbis 编解码器高出 4 ~ 5 倍。不过,它在压缩大量对白、长音效或流播放乐段(非循环)时仍是不错的选择。
- 降低采样率(12,000Hz、自动选择低采样率)
- 减少声道数
- 流式播放音乐
- 减少Random Container的导出对象数量
CPU优化
- 只有大于某个音量以上的声音才需要使用声部(voice)渲染计算
- 限制最大播放 voice 数目,需要调度众多的voice优先级
- 限制单一对象在游戏中同时使用的voice个数
notes - 写事件备注 事件名称不区分大小写
播放给定的音频文件的话,使用 Sound SFX(Sound Effects,音效)对象就够了 Sound Voice(语音)对象来播放声音;然而,因为这些对象自带用于本地化的特性,对发布游戏的多语言版本很有用,所以 Sound Voice 对象一般用于语音对白
– 效果器 当太多的对象都在同时跑各种实时效果器的时候,这些效果器可能会用光游戏系统的 CPU。为了减轻 CPU 负担,你可以选择在重新生成 SoundBank 的时候将效果渲染为新音频文件。
– 音高
单位:音分
音量 声像控制器
混响
空间感
- 距离衰减
- 声椎衰减(音源朝向)
– 虚拟容器 - 类比行为树节点
- 随机选择容器
- 顺序容器 => 播放模式:步进、连续
– 脚步声
- 不同地面材质
- 不同移速
心跳声
- 不同血量
- 等等
当玩家从游戏中切换到菜单
玩家被震晕
浮出表面
–
游戏同步器=GameSync
游戏参数=GameParmeter
游戏状态=State(全局事件)
–
怪物
武器
跳跃
脚步
传送门
物品
建筑物件
音频总线
- 播放语音的时候
- 控制不同的音频用途,例如控制音乐的音量而不影响其他属性
. 环境总线 - Auxiliary Sends 辅助总线 在游戏中,当你走过各种游戏地图中的走廊的时候,环境混响效果器会格外明显;一般用与效果器的集合之后作为效果附加输出 . 音乐总线
交互式音乐、动态音乐和自适应音乐
- Explore(探索):玩家四处走动,非战斗模式。
- Combat(战斗):玩家和怪物对抗。
- Boss(boss 战):玩家与 boss 怪在关卡最后的大决战。
- Story(故事):关卡中的一段,玩家得根据文本提示找到秘密机关。
- Victory(胜利):玩家胜利过关时。
- Death(死亡):玩家死亡。
- Stinger(插播乐句):特殊的音乐,用来配合突出玩法中的某些特别情况。这些情况可能随时会发生。
如何集成到Unity里
http://gad.qq.com/article/detail/20389
- Android:
当应用程序放在后台时,应该调用
AkSoundEngine.Suspend()
。当应用回到前台时,使用AkSoundEngine.WakeupFromSuspend()
来恢复声音。目前,这是在AkInitializer
中实现的,但是如果合理的话,可以将它移动到游戏的其它部分 。
空间音频
- 表面反射
- 房间和门
第三人称的角色扮演类3D Listener
#if !(UNITY_DASHBOARD_WIDGET || UNITY_WEBPLAYER || UNITY_WII || UNITY_WIIU || UNITY_NACL || UNITY_FLASH || UNITY_BLACKBERRY) // Disable under unsupported platforms.
//
// Copyright (c) 2017 Audiokinetic Inc. / All Rights Reserved
//
using UnityEngine;
using System;
using System.Collections.Generic;
[AddComponentMenu ("Wwise/AkGameObj3rdPersonCam")]
[ExecuteInEditMode] //ExecuteInEditMode necessary to maintain proper state of isStaticObject.
public class AkGameObj3rdPersonCam : AkGameObj
{
public Transform target; // The position that this camera will be following. User can specify this to the player character's Unity gameObject in the Inspector.
// Sets the camera position to the player's position to handle distance attenuation.
public override Vector3 GetPosition ()
{
return target.GetComponent<AkGameObj> ().GetPosition ();
}
}
#endif // #if !(UNITY_DASHBOARD_WIDGET || UNITY_WEBPLAYER || UNITY_WII || UNITY_WIIU || UNITY_NACL || UNITY_FLASH || UNITY_BLACKBERRY) // Disable under unsupported platforms.
如何将Wwise工程版本控制
WAAPI
WAAPI 的作用是通过网络与 Wwise 进行通信,在程序之间收发信息包。为此,它采用了支持多语言编程的 WAMP 通信方式(译注:WAMP 全称 Web Application Messaging Protocol,即 Web 应用程序消息传输协议)。说白了,就是让你可以使用不同的语言编写 WAAPI 代码,自由地选择以本地方式或通过网络与 Wwise 进行通信。
利用 WAAPI,你可以自动导入音频文件、创建 Event(事件)、大规模修改属性、生成 SoundBank(音频包),甚至创建自定义 GUI(比如打造个性化调音台)。如果你觉得这还不够,可以试试在多个 Wwise 程序之间进行通信