2017-05-09 64 views
1

我想從FActiveSound類中獲得PlaybackTime。當我把這個搜索Active Sound時的評估失敗錯誤

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;/

回答

1

您必須運行通過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)); 
} 
+0

謝謝你的幫助!由於文檔太糟糕了,我有點迷路了。我已經開始研究引擎代碼,希望對我更有利:D代碼對我幫助很大,所以謝謝! – Avengar

0

該錯誤通常意味着您嘗試從錯誤的線程訪問AudioDevice。也許,你應該發佈你的代碼來獲得更好的答案。

+0

編輯我的問題,我的代碼。仍然沒有線索我怎麼能通過我的音頻組件或從那裏得到它 – Avengar