Questions et réponses de la communauté

Bienvenue sur le forum de questions et réponses d'Audiokinetic, propulsé par la communauté. C'est l'endroit où les utilisateurs de Wwise et Strata s'entraident. Pour obtenir une aide directe de notre équipe, veuillez utiliser la page « Tickets de soutien ». Pour signaler un bug, utilisez l'option Bug Report dans l'Audiokinetic Launcher. (Veuillez noter que les rapports de bug soumis au forum questions-réponses seront rejetés. L'utilisation de notre système de rapport de bug dédié garantit que votre rapport est vu par les bonnes personnes et a les meilleures chances d'être corrigé.)

Pour obtenir rapidement les meilleures réponses, suivez ces conseils lorsque vous posez une question :

  • Soyez précis : qu'essayez-vous de réaliser ou quel est le problème spécifique que vous rencontrez ?
  • Pensez à inclure les détails importants : incluez des détails tels que les versions de Wwise et du moteur de jeu, le système d'exploitation, etc.
  • Expliquez ce que vous avez essayé de faire : indiquez aux autres les mesures que vous avez déjà prises pour essayer de résoudre le problème.
  • Concentrez-vous sur les faits : décrivez les aspects techniques de votre problème. Se concentrer sur le problème aide les autres personnes à trouver rapidement une solution.

+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!
dans General Discussion par 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.

UFunctions
https://docs.unrealengine.com/en-us/Programming/UnrealArchitecture/Reference/Functions


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++.

3 Réponses

–2 votes

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

par Paul B. (160 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);

par 军懿 (160 points)
edité par 军懿
0 votes

Let me give u an example. It just cost me lots of time to find a way to make my c++ callback work just like BP:

(Be careful about the event mask, u should set it to the event type u want to listen, set to 0 will miss all events. And also have a notice on the UFUNCTION macro of the callback, it's for dynamic delegate.)

class ATest : public AActor
{
public:
    FOnAkPostEventCallback OnAkPostEventDelegate;

    virtual void BeginPlay() override;
    virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
    
    UFUNCTION()
    void OnAkPostEventCallback(EAkCallbackType CallbackType, UAkCallbackInfo* CallbackInfo);

    void LetWwiseSpeakSomething(AActor* Actor, UAkAudioEvent* AkEvent);
};

void ATest::BeginPlay()
{
    OnAkPostEventDelegate.BindDynamic(this, &ATest::OnAkPostEventCallback);
    
    // other codes;
}

void ATest::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
    OnAkPostEventDelegate.Clear();
    // other codes;
}


inline void ATest::LetWwiseSpeakSomething(AActor* Actor, UAkAudioEvent* AkEvent)
{
    UAkGameplayStatics::PostEvent(AkEvent, Actor, AK_EndOfEvent, OnAkPostEventDelegate);
}
par Yuju S. (150 points)
...