我想从PlaybackTime类获取FActiveSound。但是我总是得到这个错误:

 Assertion failed: IsInAudioThread()

当我打电话给这个:
FActiveSound* ActiveSound = AudioDevice->FindActiveSound(AudioComponent->GetAudioComponentID());

我的问题是为什么呢?也许这不是一个问题,但是我不能让它对自己起作用。

编辑:1
我正在做的atm是这样的:Binding delegate : AudioComponent->OnAudioPlaybackPercent.AddDynamic(this, &UAudioController::GimmePlaybackPosition);
然后是我的函数,看起来像这样:
void UAudioController::GimmePlaybackPosition(const USoundWave* SoundWave, float PlaybackPercent){ FAudioDevice* AudioDevice = GEngine->GetAudioDevice(); if (AudioDevice) { FActiveSound* ActiveSound; } //GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Red, TEXT("Delegate fire"));}现在我在想,我该如何到达AudioComponent以获得PlaybackTime; /

最佳答案

您必须运行通过AudioDevice访问音频线程中的FAudioThread::RunCommandOnAudioThread的代码。

这是AudioComponent.cpp中使用的代码段:

if (FAudioDevice* AudioDevice = GetAudioDevice())
{
    const uint64 MyAudioComponentID = AudioComponentID;
    FAudioThread::RunCommandOnAudioThread([AudioDevice, MyAudioComponentID, InName, InFloat]()
    {
        FActiveSound* ActiveSound = AudioDevice->FindActiveSound(MyAudioComponentID);
        if (ActiveSound)
        {
            ActiveSound->SetFloatParameter(InName, InFloat);
        }
    }, GET_STATID(STAT_AudioSetFloatParameter));
}

09-10 16:10