ue4編輯器下程序化導入音頻SoundWave
導入音頻并保存為藍圖資產,返回SoundSave軟對象
bool SaveCubeWaveSound(const FString& AssetPath, const FString& ObjectName, const FString& SoundFilePath, TSoftObjectPtr<USoundWave>& WaveSoundObj)
{
? ?FAssetToolsModule& AssetToolsModule = FModuleManager::Get().LoadModuleChecked<FAssetToolsModule>("AssetTools");
? ?USoundFactory* FbxFactory = NewObject<USoundFactory>(USoundFactory::StaticClass());
? ?FbxFactory->AddToRoot();
? ?
? ?UAssetImportTask* Task = NewObject<UAssetImportTask>();
? ?Task->AddToRoot();
? ?Task->bAutomated = true;
? ?Task->bReplaceExisting = true;
? ?Task->DestinationPath = AssetPath;
? ?Task->bSave = true;
? ?Task->Filename = SoundFilePath;
? ?Task->Factory = FbxFactory;
? ?FbxFactory->SetAssetImportTask(Task);
? ?TArray<UAssetImportTask*> Tasks;
? ?Tasks.Add(Task);
? ?AssetToolsModule.Get().ImportAssetTasks(Tasks);
? ?TArray<UObject*> SoundObjList = Task->GetObjects();
? ?
? ?if (SoundObjList.Num()>0)
? ?{
? ? ? FSoftObjectPath SolftObjPath = FSoftObjectPath(SoundObjList[0]);
? ? ? WaveSoundObj = TSoftObjectPtr<USoundWave>(SolftObjPath);
? ? ?
? ? ? TArray<UPackage*> PackagesToSave;
? ? ? PackagesToSave.Reset(SoundObjList.Num());
? ? ?
? ? ? PackagesToSave.AddUnique(SoundObjList[0]->GetOutermost());
? ? ?
? ? ? UEditorLoadingAndSavingUtils::SavePackages(PackagesToSave, false);
? ? ? Task->RemoveFromRoot();
? ? ? FbxFactory->RemoveFromRoot();
? ? ? return true;
? ?}
? ?return false;
}