Community Q&A

Where Wwise users help each other out!

Audiokinetic's Community Q&A is the forum where Wwise users ask and answer questions within the Wwise community. If you would like to get an answer from Audiokinetic's Technical support team, make sure you use the Support Tickets page.

How to pass FOnAkPostEventCallback struct in UE4 Wwise

+3 votes
I have recently updated to the latest Wwise and Unreal Engine versions. What I noticed is that my "PostEvent" functions were now throwing errors, because they no longer require two parameters. One of the new parameters is a reference to a struct of type "FOnAkPostEventCallback", for which visual studio says that the declaration is undefined. So what exactly am I supposed to pass into this function? Would highly appreciate a descriptive response!
asked Aug 9, 2018 in General Discussion by Marc B. (130 points)
Ditto. Please advise. In addition, please implement a deprecation/change strategy for the Ak UE4 plugin code.

PostAkEvent() is a UFunction, and deprecation metadata can be added to the UFUNCTION attribute. Perhaps with a deprecation message like, 'PostAkEventDEPRECATED() will be removed in Wwise [major.minor]. Please convert caller to use the updated PostAkEvent().', etc.

Due to limitations with UHT, we can't have UFUNCTION overloads, so perhaps AkComponent::PostAkEvent(...) could have been copied to a PostAkEventDEPRECATED(...), so that callers would at least have a way to unblock in the short term.


FWIW: On the Unity side, they respect System.ObsoleteAttribute.

- thanks
I would also like to know this. Please could we get an official response for how to do this in C++.

2 Answers

–1 vote

Marc B., look at AkComponent.cpp for a workaround...

if you need to call a Blueprint function, you can use PostAkEventByName(), which calls PostAkEventByNameWithCallback() with the appropriate default/null args...
int32 UAkComponent::PostAkEventByName(const FString& in_EventName)

From cpp, you can call PostAkEventByNameWithCallback directly with the default/null args specified here in comments, if you want...
AkPlayingID UAkComponent::PostAkEventByNameWithCallback(const FString& in_EventName, AkUInt32 in_uFlags /*= 0*/, AkCallbackFunc in_pfnUserCallback /*= NULL*/, void * in_pUserCookie /*= NULL*/)

Whatever works for you. All roads eventually lead to AudioDevice->PostEvent().

- cheers

answered Aug 10, 2018 by Paul B. (180 points)
–1 vote

Though this question is asked at years ago, but for anyone in the future who steps into this QA.

Got me confused today too, but finally I noticed that the "FOnAkPostEventCallback" is a delegation's name, and it is defined in AkGameplayTypes.h (my Wwise SDK version is 2019.1.9.7221). The UE4 Delegate could be used like a class or struct, but the compiler won't find its reference or implement when it's used in another .h file... Here's the definition copied from AkGameplayTypes.h:

DECLARE_DYNAMIC_DELEGATE_TwoParams(FOnAkPostEventCallback, EAkCallbackType, CallbackType, UAkCallbackInfo*, CallbackInfo);

answered Sep 16 by 军懿 (120 points)
edited Sep 16 by 军懿