社区问答

欢迎来到 Audiokinetic 社区问答论坛。在此,Wwise 和 Strata 用户可互帮互助。如需我们团队直接提供协助,请前往技术支持申请单页面。若要报告问题,请在 Audiokinetic Launcher 中选择“报告错误”选项(注意,问答论坛并不会接收错误报告)。我们内部设有专门的错误报告系统,会有专人查看报告并设法解决问题。

要想尽快得到满意的解答,请在提问时注意以下几点:

  • 描述尽量具体:比如,想达到什么样的目的,或者具体哪里有问题。
  • 包含关键细节:比如,Wwise 和游戏引擎版本以及所用操作系统等等。
  • 阐明所做努力:阐明自己为了排除故障都采取了哪些措施。
  • 聚焦问题本身:聚焦于问题本身的相关技术细节,以便别人可以快速找到解决方案。

0 投票

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.
 

分类:General Discussion | 用户: Jason W. (100 分)
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.

...