搜索Active Sound时,评估失败错误

时间:2017-05-09 15:20:37

标签: c++ audio unreal-engine4

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

 Assertion failed: IsInAudioThread()

我称之为:

FActiveSound* ActiveSound = AudioDevice->FindActiveSound(AudioComponent->GetAudioComponentID());

我的问题是为什么?这可能是一个愚蠢的问题,但我不能让它自己工作。

编辑:1 我正在做的是这样的: 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; /

2 个答案:

答案 0 :(得分:1)

您必须通过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));
}

答案 1 :(得分:0)

错误通常意味着您尝试从错误的线程访问AudioDevice。也许,您应该发布您的代码以获得更好的答案。