文章

Wwise杂记

开发相关Note

  1. 事件Notes需要写备注
  2. 事件命名需要有一个规则
  3. 音频重复段的复用,尽可能的少、短 - 影响内存
  4. 需求整理 - 什么地方有音效、什么时机、不同场景是否不同
  5. 程序如何发起GameCall,以及GameCall的附加信息
  6. 需要多少种类的输出总线,各总线的效果器、闪避规则,对应的转码设置
  7. SoundBank组织的规划 => 类比AB包
  8. 音频命名规则
    • 专属行为
    • 专属类型
    • 专属地图
  9. 工作如何组织规划
  10. 每个音频对象都需要设置并发数
  11. 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 程序之间进行通信

本文由作者按照 CC BY 4.0 进行授权