Community Q&A

Welcome to Audiokinetic’s community-driven Q&A forum. This is the place where Wwise and Strata users help each other out. For direct help from our team, please use the Support Tickets page. To report a bug, use the Bug Report option in the Audiokinetic Launcher. (Note that Bug Reports submitted to the Q&A forum will be rejected. Using our dedicated Bug Report system ensures your report is seen by the right people and has the best chance of being fixed.)

To get the best answers quickly, follow these tips when posting a question:

  • Be Specific: What are you trying to achieve, or what specific issue are you running into?
  • Include Key Details: Include details like your Wwise and game engine versions, operating system, etc.
  • Explain What You've Tried: Let others know what troubleshooting steps you've already taken.
  • Focus on the Facts: Describe the technical facts of your issue. Focusing on the problem helps others find a solution quickly.

0 votes

Hey, everyone.

To my surprise, the UE4 integration doesn't seem to support callbacks or play position checking in *any* way. So, following the API, I'm attempting to rewrite some of the code to allow it. Can anyone maybe tell me what I'm doing wrong? I'm performing these actions on an AkAudio Component with 30 seconds of "interactive music" playing at 120 BPM.

In AudioDevice.cpp:

AkPlayingID FAkAudioDevice::PostEvent(
    UAkAudioEvent * in_pEvent, 
    AActor * in_pActor,
    AkUInt32 in_uFlags /*= 0*/,
    AkCallbackFunc in_pfnCallback /*= NULL*/,
    void * in_pCookie /*= NULL*/,
    bool in_bStopWhenOwnerDestroyed /*= false*/
    )
{
    if (!in_pEvent)
        return AK_INVALID_PLAYING_ID;

    return PostEvent(in_pEvent->GetName(), in_pActor, AK_MusicSyncBeat, MusicCallback, in_pCookie, in_bStopWhenOwnerDestroyed);
}

void FAkAudioDevice::MusicCallback(
    AkCallbackType in_eType,            // Type of callback reason, in this case it could be AK_MusicSyncBeat
    AkCallbackInfo* in_pCallbackInfo    // Pointer to callback information structure, in this case
                                        // AkMusicSyncCallbackInfo*.
    ) 
{
    UE_LOG(LogAkAudio, Warning, TEXT("Currently in Audio Callback!"));
}

Also couldn't get GetSourcePlaybackPosition to work, even after feeding in 0x100000 in the callback flags argument.

Any ideas? Really beating my head against a wall, here. This stuff is required for *anything* requiring feedback from Wwise to display on-screen, and it's a bit disappointing it isn't available.
 

in General Discussion by Jason W. (100 points)
Have you solved this problem?

I declare a callback function:
static void EndOfEventCallbackFunc(AkCallbackType in_eType, AkCallbackFunc* in_pCallbackInfo);

and pass it when calling the function declared in AkComponet:

PlayingID = pAkComp->PostAkEventByNameWithCallback((in_pAkEvent)->GetName(), AK_EndOfEvent, &EndOfEventCallbackFunc);

However, it fails to compile and gets the error message:

error C2664: 'AkPlayingID UAkComponent::PostAkEventByNameWithCallback(const FString &,AkUInt32,AkCallbackFunc,void *,const TArray<FAkExternalSourceInfo,FDefaultAllocator> &)': cannot convert argument 3 from 'void (__cdecl *)(AkCallbackType,AkCallbackFunc *)' to 'AkCallbackFunc'

note: This conversion requires a reinterpret_cast, a C-style cast or function-style cast

Any ideas?  I am very appreciative of your assistance.
Almost been a year, but like the compiler suggests this works if you add a cast.
PlayingID = pAkComp->PostAkEventByNameWithCallback((in_pAkEvent)->GetName(), AK_EndOfEvent, AkCallbackFunc(&EndOfEventCallbackFunc));

Please sign-in or register to answer this question.

...