搜索 Active Sound 时断言失败错误
Asseration failed error while searching for Active Sound
我想从 FActiveSound
class 得到 PlaybackTime
。但是我总是得到这个错误:
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 ;/
该错误通常意味着您试图从错误的线程访问 AudioDevice
。也许,您应该 post 您的代码以获得更好的答案。
您必须 运行 通过 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));
}
我想从 FActiveSound
class 得到 PlaybackTime
。但是我总是得到这个错误:
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 ;/
该错误通常意味着您试图从错误的线程访问 AudioDevice
。也许,您应该 post 您的代码以获得更好的答案。
您必须 运行 通过 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));
}