diff --git a/03-UnrealEngine/Editor/FBXAnimation导入&导出逻辑.md b/03-UnrealEngine/Editor/FBXAnimation导入&导出逻辑.md index c2c5db9..49954e2 100644 --- a/03-UnrealEngine/Editor/FBXAnimation导入&导出逻辑.md +++ b/03-UnrealEngine/Editor/FBXAnimation导入&导出逻辑.md @@ -171,4 +171,32 @@ void FFbxExporter::CorrectAnimTrackInterpolation( TArray& BoneNodes, F ``` ## 导入Curve相关逻辑 -UnFbx::FFbxImporter::ImportCurveToAnimSequence() => UnFbx::FFbxImporter::ImportCurve() \ No newline at end of file +UnFbx::FFbxImporter::ImportCurveToAnimSequence() => UnFbx::FFbxImporter::ImportCurve() + +## 异步机制改进 +```c++ +void URuntimeAudioImporterLibrary::ImportAudioFromFile(const FString& FilePath, ERuntimeAudioFormat AudioFormat) +{ + AsyncTask(ENamedThreads::AnyBackgroundHiPriTask, [WeakThis = TWeakObjectPtr(this), FilePath, AudioFormat]() mutable + { + if (!WeakThis.IsValid()) + { UE_LOG(LogRuntimeAudioImporter, Error, TEXT("Failed to import audio from file '%s' because the RuntimeAudioImporterLibrary object has been destroyed"), *FilePath); + return; + } + FGCObjectScopeGuard Guard(WeakThis.Get()); + + if (!FPaths::FileExists(FilePath)) + { WeakThis->OnResult_Internal(nullptr, ERuntimeImportStatus::AudioDoesNotExist); + return; + } + AudioFormat = AudioFormat == ERuntimeAudioFormat::Auto ? GetAudioFormat(FilePath) : AudioFormat; + AudioFormat = AudioFormat == ERuntimeAudioFormat::Invalid ? ERuntimeAudioFormat::Auto : AudioFormat; + + TArray64 AudioBuffer; + if (!LoadAudioFileToArray(AudioBuffer, *FilePath)) + { WeakThis->OnResult_Internal(nullptr, ERuntimeImportStatus::LoadFileToArrayError); + return; + } + WeakThis->ImportAudioFromBuffer(MoveTemp(AudioBuffer), AudioFormat); + });} +``` \ No newline at end of file