我想从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));
}