Wwise SDK 2023.1.8
|
With many new features, you will need to pay attention to several things when migrating to Wwise 2017.1.
In Wwise 2017.1, listeners are now game objects. There is no longer a limit of 8 listeners and the API has been streamlined to remove calls that operate only on listeners; they now operate on any game object. Games that use multiple listeners in Wwise must register a game object per listener; they will now perform a complete mix per listener.
Busses are no longer global entities; they can be instantiated multiple times in a manner similar to voices in the Actor-Mixer Hierarchy. It is possible to set game object scoped RTPCs on bus parameters that pertain to a mixing bus. However, be aware that the Voice parameters in the bus’s General Settings tab actually pertain to the game object from which the voice is playing, not the bus’s game object.
The specific game object that is associated with a bus instance is determined by a combination of the Enable Positioning property in the Wwise project, and the emitter-listener associations defined by the game. Refer to the sections below, The behavior or the 'Positioning Enabled' flag in the authoring tool has changed and The algorithm to construct the Voices Graph has changed, for more details. Dynamic signal routing and 3D-positioned busses are now possible in Wwise; however, a basic setup will have various sources playing from one or more ‘emitter’ game objects and the entire mixing bus chain on another game object, the ‘listener’.
Wwise does not provide a game object for you. To migrate to 2017.1 and have equivalent behavior, it is necessary to register a game object at initialization time and set it as the default listener.
Assigning a game object as the default listener is simply for the sake of convenience. It removes the need to call SetListeners()
after registering subsequent game objects – they will automatically have the default listener assigned as their listener.
Note that if you are using SoundFrame you do not have access to the AK::SoundEngine::SetDefaultListeners
API and you need to use SetListeners()
explicitly.
When setting a game-defined send through the API, it is now necessary to fill out an additional field to specify which game object will receive the send (both an Auxiliary Bus ID and a game object ID are necessary to uniquely identify a mixing bus instance). Specifying a game object when setting a game defined aux send is another way to add an emitter-listener association. It is similar to the SetListeners()
API call, which defines the emitter-listener associations for the main bus output (sometimes called the “dry path”).
For the sake of convenience, it is possible to set the listenerID
field to AK_INVALID_GAME_OBJECT
, which will tell the sound engine to simply use the listener(s) that have already been specified with the SetListeners()
or SetDefaultListeners()
API calls. This feature facilitates both code migration and the most common auxiliary send scenarios, whereby the listener is the same as the one for the direct output.
In Wwise 2017.1, busses may now have aux sends to other busses, opening up a wide range of new routing possibilities. As with voices, auxiliary sends may be user defined or game defined. There are a few things to keep in mind when creating aux sends from busses:
The Enable Positioning flag in the authoring tool now takes on a very important purpose: it determines whether or not to evaluate the emitter-listener associations for the current game object at this node in the voice graph. Furthermore, the 2D panner is now independent from the Enable Positioning flag; it is possible to pan a sound without positioning it. It is also possible to have a 2D sound that is Positioning Enabled; this means that we will evaluate the emitter-listener associations (the downstream node will be on a different game object), but not preform 3D spatialization. Here are some examples to demonstrate the usage of the Enable Positioning flag:
Note: If you see two instances of the Master Audio Bus in the Voice Graph when you do not expect to, it is a good indication that you forgot to set the Enable Positioning flag at some point in your signal chain. |
Before 2017.1, the Voices Graph constructed when playing a sound was entirely specified by the Wwise project; there was little that the game could do to manipulate it. In Wwise 2017.1, the Voices Graph is based on a combination of the routing defined by the hierarchies in the Wwise project and the emitter-listener associations defined in the game. The algorithm to construct the Voices Graph can be summarized as follows:
The rules that define the routing of a sound can be complicated. The new Voices Graph in the Wwise Advanced Profiler now groups nodes by game object and is an extremely useful tool when debugging routing issues.
For the sake of consistency, AkGameObjectID
is now 64 bits wide on all platforms, including native 32-bit platforms.
A game object ID can now be any 64-bit unsigned integer ranging from 0 to 0xFFFFFFFFFFFFFFDF (which is -33 as a signed integer). The game object ID range 0xFFFFFFFFFFFFFFE0 (-32) to 0xFFFFFFFFFFFFFFFF (-1) is reserved for internal use. The transport game object, which is registered by the authoring tool, now uses game object ID 0xFFFFFFFFFFFFFFFE (-2).
Following the changes made to the game object and listener system, Watches are not compatible anymore and will be reset.
Plug-ins built with versions prior to the official 2017.1 release are not compatible with Wwise 2017.1. They need to be rebuilt.
These flags are no longer required, so they were removed.
AkPluginInfo::bIsAsynchronous
AkFileSystemFlags::bIsFromRSX
Prior to Wwise 2017.1, the sound engine was arbitrarily clamping the trigger rate transition time of Random and Sequence Containers to never be less than 22 ms. We removed this limitation to enable creative content.
The Metro platform has been renamed to Universal Windows Platform and is also available for Visual Studio 2017.
Spherical coordinates are no longer computed systematically for all emitter-listener pairs. Thus, they are not directly available from AkEmitterListenerPair
anymore. Azimuth()
and Elevation()
accessors have been removed. Plug-ins and game code that use AkEmitterListenerPair
spherical coordinates will need to call the new service AK::IAkGlobalPluginContext->ComputeSphericalCoordinates()
to obtain them. The preferred approach is to use Cartesian coordinates with the overload of AK::IAkMixerPluginContext::Compute3DPositioning()
that accepts Cartesian transforms.
When importing Tab Delimited files using the UseExisting option, the behavior has changed. Like before, if the Wwise object at destination already exists, it will reuse it. However, if a matching object is found and the source's WAV file name is different, the new source will be imported as a new inactive version.
where
transform in ak.wwise.core.object.get
. Refer to transform for more information.merge
mode in ak.wwise.core.object.create
. Refer to Understanding the name conflict modes for more information.ak.wwise.core.object.create
. Use the type Folder
. Refer to ak.wwise.core.object.create for more information.ak.wwise.core.object.preDelete
was renamed to ak.wwise.core.object.preDeleted
.ak.wwise.core.object.postDelete
was renamed to ak.wwise.core.object.postDeleted
.ak.wwise.core.object.create
.ak.wwise.core.object.get
. Refer to ak.wwise.core.object.get for more information.ak.wwise.core.object.nameChanged
, ak.wwise.core.object.notesChanged
, ak.wwise.core.object.created
, ak.wwise.core.object.preDeleted
, ak.wwise.core.object.postDeleted
, ak.wwise.core.object.childAdded
, ak.wwise.core.object.childRemoved
, ak.wwise.core.object.curveChanged
, ak.wwise.core.object.attenuationCurveChanged
, and ak.wwise.core.object.attenuationCurveLinkChanged
. Questions? Problems? Need more info? Contact us, and we can help!
Visit our Support pageRegister your project and we'll help you get started with no strings attached!
Get started with Wwise