Wwise SDK 2023.1.9
|
Due to some of the new features in 2023.1 (refer to New Features Overview 2023.1), there are several important things to be aware of before you migrate to Wwise 2023.1.
Previously, WwiseConsole's convert-external-source
and generate-soundbank
commands sometimes resolved arguments as paths relative to the project's directory. All paths passed to WwiseConsole are now resolved as relative to the console's current working directory.
The executables previously located under Authoring/x64/Release/bin/Tools are now located in the same directory as Wwise.exe at Authoring/x64/Release/bin. If your project used the FilePackager as a SoundBank Post-Generation step, you must update the path to the FilePackager.Console.exe executable.
The Low-Level I/O Hook interface was changed significantly in 23.1 to improve the efficiency of streaming interfaces on high-latency devices such as Web applications. Also, a general refactor of the interface was done to integrate previous changes into a more coherent interface. The major changes that can break the game build are described in the following sections.
The blocking I/O hook sample has been removed. Although the blocking I/O calls were made in a separate thread, this prevented out-of-order execution of I/O calls, which added unnecessary latency to file access on some systems. If your game used this sample, replace it with CAkDefaultIOHookDeferred
. The API is the same.
The AK::StreamMgr::IAkLowLevelIOHook
, AK::StreamMgr::IAkIOHookDeferred
, and AK::StreamMgr::IAkIOHookDeferredBatch
interfaces were merged into AK::StreamMgr::IAkLowLevelIOHook
. Previously, these interfaces were separated to allow the "blocking" variant, but now that this isn't supported, there is no reason to maintain such divisions. If your I/O hook derived from IAkIOHookBlocking
, IAkIOHookDeferred
, or IAkIOHookDeferredBatch
, replace it with IAkLowLevelIOHook
and implement any missing functions.
If the game already uses the default CAkDefaultIOHookDeferred
sample class, this section is not relevant because all necessary changes were made to the sample.
If your game implements its own I/O hook or file location resolver, the most important change is the relocation and rename of AK::StreamMgr::IAkFileLocationResolver::Open()
to the I/O device-specific interface. In the new interface, the AK::StreamMgr::IAkLowLevelIOHook::BatchOpen()
function accepts multiple file open requests at the same time, instead of just one. It can either perform the operation immediately (synchronous) or dispatch it and notify later (asynchronous). Like the BatchRead()
function, BatchOpen()
now receives a callback function pointer to send a notification of the operation result. For more information about this change, refer to Deferred Opening.
If your game handles multiple I/O devices, be aware of the implementation of the new AK::StreamMgr::IAkFileLocationResolver::GetNextPreferredDevice
function. For single-device games it can return AK_NotImplemented and the system behaves correctly. However, for multiple devices you must either use the CAkDefaultLowLevelIODispatcher
sample or read more about the subject here: File Location Resolver
The uSchedulerTypeFlags
member of AkDeviceSettings
used in the creation of I/O devices is no longer used and has been removed. The associated AK_SCHEDULER_BLOCKING
and AK_SCHEDULER_DEFERRED_LINED_UP
constants have also been removed. If your code refers to any of these symbols, delete the associated code.
The AkFileDesc
structure that identifies a file for the Streaming Manager must now be created by the AK::StreamMgr::IAkLowLevelIOHook::BatchOpen()
function, and deleted by the AK::StreamMgr::IAkLowLevelIOHook::Close()
function.
The AkFileDesc::pCustomParam
and AkFileDesc::uCustomParamSize
members were removed because their usage was unclear when used in child classes of CAkDefaultIOHookDeferred
. If your I/O hook needs to keep additional data along the AkFileDesc
, derive from the base structure. As explained in the previous section, the I/O hook now creates and destroys AkFileDesc
structures.
For I/O hooks that derive from the CAkDefaultIOHookDeferred
sample, the AkFileDescType
typedef is available for child classes to also derive the AkFileDesc
type, and intermediate child classes, if necessary. Override the CAkDefaultIOHookDeferred::CreateDescriptor
function as well to create the right type, if AkFileDesc
is extended.
As announced in Important Migration Notes 2022.1, Mixer plug-ins have been removed from Wwise 2023.1.
You must convert Mixer plug-ins to Effect plug-ins:
IAkOutOfPlaceObjectPlugin
interface, which replaces the previous IAkMixerEffectPlugin
interface.ConsumeInput
function to the Execute
function.Note: The in_objects.ppObjects[i]->arCustomMetadata contains the metadata that is passed to the function. This effectively replaces the removed GetInputParam function. |
The AK Channel Router plug-in has been transformed from a Mixer plug-in to an Effect plug-in, which is inserted in the Effects tab of the Property Editor. The Effect can only be inserted on a bus that has its Bus Configuration set to Audio Objects.
The Audio Objects bus configuration has two notable properties:
The migration removes all instances of the Ak Channel Router Mixer plug-in but doesn't automatically replace them with an AK Channel Router Effect plug-in. You must manually add the AK Channel Router Effect to the appropriate busses. A new type of metadata, Channel Router Settings, replaces the existing AttachableMixerInput of the Ak Channel Router Mixer plug-in. The migration removes all instances of AttachableMixerInput and replaces them with the new metadata.
The sample Subversion source control plug-in has been deprecated and will be removed in a future version of Wwise.
It is now possible to perform Source Control operations without a user interface. When Silent Mode is enabled, dialog boxes do not appear when WAAPI requests interact with Source Control. To implement this change, the AK::Wwise::ISourceControlProgress class (formerly AK::Wwise::ISourceControlOperationProgress
) was redesigned. The following methods have been changed or added:
ShowProgress()
method to BeginOperation()
OperationCompleted()
method to EndOperation()
IsSilent()
methodIsAutoCheckout()
methodThe autoAddToSourceControl
argument is now true by default for the following WAAPI functions:
Note that because of issue WG-61743, the following functions already behaved as if autoAddToSourceControl
were true by default in most cases:
The bypassSave
argument is now true by default for the following WAAPI functions:
The following command identifiers have been renamed:
Refer to Wwise Authoring Command Identifiers for more information.
Attenuation, Occlusion, Obstruction, Transmission Loss, and Diffraction of the wet path are now applied to the Emitter-Room connection, using the attenuation specified on the emitter. Attenuation curves on Room Auxiliary Busses no longer have any effect and need to be moved to the source sound. The output of a Room Auxiliary Bus is always 0db unless modified in the project or through the API.
Diffraction on the wet path is now calculated per emitter, based on the paths between the emitter and the listener. Wet path diffraction cannot exceed dry path diffraction.
Geometric Transmission Loss now applies to the wet path, using the maximum Transmission Loss value of all surfaces intersected by the ray between the emitter and the listener. Room Transmission Loss is the minimum value between all possible paths from the emitter to the listener. The Transmission Loss for a single path is the maximum value of the Transmission Loss of all Rooms on that path.
Rays in the the Room-Listener connection are now only used for spatialization and do not contribute to the volume of the connection. Therefore, they no longer appear in the Voice Inspector.
An emitter that has the Enable Game-Defined Sends check box selected now sends to its own Room's bus as well as all adjacent Rooms that have active paths back to the listener. If an emitter is in the same Room as the listener, it sends to all adjacent rooms.
AkSpatialAudioInitSettings::uMaxEmitterRoomAuxSends
has been added to limit the number of Emitter-Room connections to adjacent Rooms created per emitter. The default value of 0 disables the limit. If a limit is set, the most prominent sends are kept, based on spread to adjacent portals from the emitters perspective. A limit of 1 sends exclusively to the Room the emitter is in, and to the Room an emitter is transitioning to, while in a portal.
The System Audio Device in Wwise now supports AVAudioEngine for audio output to the system, which provides flexibility in channel configurations and synergy between macOS and iOS/tvOS platforms.
Consequently, AkPlatformInitSettings::eAudioAPI
has been added for Apple platforms. The default value, AkAudioAPI_Default
, automatically selects AVAudioEngine for operating systems that support it (macOS 10.15 or higher, and iOS/tvOS 13 or higher). Any Wwise installations that run on older operating systems continue to use the AudioUnit API, which only offers basic functionality.
Refer to Audio Output on Platforms for more information on the new behavior of the AVAudioEngine-based sink.
Additionally, on iOS/tvOS, AK::SoundEngine::GetPlatformInitSettings
returns the Audio Session's default sample rate instead of a fixed 48000Hz.
Finally, on iOS/tvOS, the AudioInputCallbackFunc
function signature has been updated to enforce const-ness on the audio buffers.
Because of this change, your application must now link with AVFoundation.framework.
On some platforms, the AK::SoundEngine::Suspend()
and AK::SoundEngine::WakeupFromSuspend()
calls used to suspend and wake up the AK::Comm
module automatically, and disconnected any connected Wwise Profilers. Now, clients must manage AK::Comm
separately. Refer to Handling System-Specific Events to learn how to manage the AK::Comm
module in the context of application lifecycle events for your supported platforms.
The range of the HF Damping value returned by AK::SpatialAudio::ReverbEstimation::EstimateHFDamping()
has been doubled and is now -1 to 1. RTPCs mapped to this value now range from -1 to 1.
The new ISourceControl::Connect()
and ISourceControl::Disconnect()
methods support source control login from the ak.wwise.core.sourceControl.setProvider
WAAPI function. To ensure compatibility with this version of Wwise, you must add these methods to your ISourceControl
and rebuild its plug-in.
If your source control implementation does not support connections, these methods return OperationResult_NotImplemented
.
It is no longer possible to use maxRadiusAttenuation and maxDurationSource in a WAQL query to refer directly to the object itself, for example when using "select". For those cases, please use the new accessors maxRadiusAttenuationObject and maxDurationSourceObject respectively.
When using ak.wwise.core.audio.import, it no longer reports an error through WAAPI when a warning or an error is found in the import log. The import log is now being returned by the call and should be parsed to detect import errors and warnings.
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