Table of Contents
First the user must create Auxiliary busses in the Wwise project that will represent the environments, one aux bus per environment. The option "Use game-defined auxiliary sends" must have been set in the object properties or in the object it inherits its properties from for sounds that should use this feature. For the game to use these parameter sets, the effect in question must be registered in the sound engine. You do this in exactly the same way you register other effect plug-ins (see Plug-in Example for more details), as demonstrated in the following example:
#include <AK/SoundEngine/Common/AkSoundEngine.h> // Sound Engine #include <AK/Plugin/AkRoomVerbFXFactory.h> // Effect initialization functions (...) AK::InitAkRoomVerbFX(AK::SoundEngine::GetGlobalPluginContext());
To allow the initialization functions to be found at link time, your C++ project must link with the appropriate plug-in library. Refer to Overview of Libraries and Header Files Contained in the SDK for more information on libraries.
// In this example we hardcode the 3 values for Dry, Hangar, and Tunnel. In // a game you would compute these values based on the game object's position // in its environment. AkReal32 nDryRatio = 0.5f; AkReal32 nHangarRatio = 0.25f; AkReal32 nTunnelRatio = 0.25f; AkAuxSendValue aEnvs; aEnvs.listenerID = AK_INVALID_GAME_OBJECT; // Use the same set of listeners assigned via the SetListeners/SetDefaultListeners API. aEnvs.auxBusID = AK::SoundEngine::GetIDFromString( L"Hangar" ); aEnvs.fControlValue = nHangarRatio; aEnvs.listenerID = AK_INVALID_GAME_OBJECT; // Use the same set of listeners assigned via the SetListeners/SetDefaultListeners API. aEnvs.auxBusID = AK::SoundEngine::GetIDFromString( L"Tunnel" ); aEnvs.fControlValue = nTunnelRatio; AK::SoundEngine::SetGameObjectOutputBusVolume( GAME_OBJECT_ID_HUMAN, nDryRatio ); AK::SoundEngine::SetGameObjectAuxSendValues( GAME_OBJECT_ID_HUMAN, aEnvs, 2 );
Refer to Integration Details - Environments and Game-defined Auxiliary Sends for information on the meaning of these ratios.
||Note: The names passed to AK::SoundEngine::GetIDFromString() are the names of the Auxiliary busses as defined in Wwise. Refer to Using IDs or Strings (Unicode or ANSI) for more information.|
In the sample program you can experiment with Environments by moving the first three sliders in the "Environments: Footsteps" group, which let you set the ratio (0% on the left, to 100% on the right) for Dry, Hangar, and Tunnel environments.
Refer to Integration Details - Environments and Game-defined Auxiliary Sends for more details, and to Integration Demo Sample for the sample project.
Obstruction and occlusion can be computed for each game object relative to each listener, as it depends on the environment and positions of game objects and listeners.
Setting obstruction and occlusion is done by calling AK::SoundEngine::SetObjectObstructionAndOcclusion() as demonstrated here:
// In this example we use hardcoded values for obstruction and occlusion. In a game you need // to compute these values based on the position of the game object and the listener, and // the composition of their environments. AkReal32 fObstruction = 0.05f; AkReal32 fOcclusion = 0.0f; // In this case we compute and set the values for Listener 0 only. If you have multiple listeners, // the values must be computed and set for each listener independently. AK::SoundEngine::SetObjectObstructionAndOcclusion( GAME_OBJECT_ID_HUMAN, 0 /*listener*/, fObstruction, fOcclusion );
In the sample program you can experiment with Obstruction and Occlusion by moving the last two sliders in the "Environments: Footsteps" group which let you set the ratio (0 to 100%) for obstruction and occlusion.
||Note: This sample code comes from the Sound Engine Integration Sample Project available in the Samples section. Refer to Integration Demo Sample for more information.|