c++ - 搜索 Active Sound 时断言失败错误

标签 c++ audio unreal-engine4

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

 Assertion failed: IsInAudioThread()

当我调用它时:

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

我的问题是为什么会这样?这可能是个新问题,但我无法让它对自己起作用。

编辑:1 我正在做的是这样的: 绑定(bind)委托(delegate):AudioComponent->OnAudioPlaybackPercent.AddDynamic(this, &UAudioController::GimmePlaybackPosition);

然后是我的函数,看起来像这样:

void UAudioController::GimmePlaybackPosition(const USoundWave* SoundWave, float PlaybackPercent) { FAudioDevice* AudioDevice = GEngine->GetAudioDevice(); 如果(音频设备) { FActiveSound* ActiveSound; } //GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Red, TEXT("Delegate fire")); 现在我想知道,我怎样才能到达我的 AudioComponent,以获得 PlaybackTime ;/

最佳答案

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

这是 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));
}

关于c++ - 搜索 Active Sound 时断言失败错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43873770/

相关文章:

c++ - 在虚幻中没有调用函数

php - PHP:将乘数应用于大量值

java - Java Android DC音频输出

C++ unordered_map,高效的延迟加载和值的使用

c++ - Qt 资源文件不编译就不会更新

Android Studio - SoundPool - 手指从ImageView拿开后停止声音

unreal-engine4 - 使用虚幻引擎4进行开发需要什么?

unreal-engine4 - 我可以使用虚幻引擎 4 编写软件而不从源代码编译虚幻引擎 4 吗?

c++ - 将 MPI_Bcast 用于

c++ - 你在 C++ 的析构函数中调用 delete 吗?