2017-05-09 18 views
1

PlaybackTimeFActiveSoundクラスから取得したいと考えています。しかし、私は常に、このエラーが出る:私はこの電話の際アクティブサウンドを検索中にアサーションエラーが発生しました

Assertion failed: IsInAudioThread() 

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

をつまり、なぜ私の質問はありますか?それはnooby質問かもしれないが、私はそれを自分で動作させることはできません。

編集:私は気圧やって何を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")); } そして今、私は私が得ることができるか、思ったんだけどは、 PlaybackTimeを取得するために私のAudioComponentがあります。/

答えて

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)); 
} 
+0

あなたの助けをありがとう!ドキュメンテーションがとても悪いので私は少し失われています。私はエンジンコードを調べ始めました。うまくいけば、私にとってもっと有益になるでしょう:そのコードは私に1トンの助けをしました、ありがとう! – Avengar

0

エラーは通常、間違ったスレッドからAudioDeviceにアクセスしようとしたことを意味します。おそらく、より良い回答を得るためにコードを投稿するべきでしょう。

+0

私のコードで私の質問を編集します。まだ私は私のオーディオコンポーネントを内部に渡すことができますかそこからそれを得るための手がかりがありません – Avengar

関連する問題