diff --git a/CUE4Parse b/CUE4Parse index 62ffed7e..3a333f2d 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit 62ffed7e682a3dc83f1c6c53778640b9d4bfd669 +Subproject commit 3a333f2d95ec77ce162ea80ab05be0b279e43807 diff --git a/FModel/Settings/UserSettings.cs b/FModel/Settings/UserSettings.cs index 66c126bf..6abd1d1e 100644 --- a/FModel/Settings/UserSettings.cs +++ b/FModel/Settings/UserSettings.cs @@ -439,6 +439,13 @@ namespace FModel.Settings set => SetProperty(ref _cameraMode, value); } + private int _wwiseMaxBnkPrefetch; + public int WwiseMaxBnkPrefetch + { + get => _wwiseMaxBnkPrefetch; + set => SetProperty(ref _wwiseMaxBnkPrefetch, value); + } + private int _previewMaxTextureSize = 1024; public int PreviewMaxTextureSize { diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index fa23482b..11a43195 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -41,7 +41,6 @@ using CUE4Parse.FileProvider.Objects; using CUE4Parse.UE4.Assets; using CUE4Parse.UE4.BinaryConfig; using CUE4Parse.UE4.Objects.UObject; -using CUE4Parse.UE4.Objects.UObject; using CUE4Parse.Utils; using EpicManifestParser; using EpicManifestParser.UE; @@ -117,8 +116,8 @@ public class CUE4ParseViewModel : ViewModel public AssetsFolderViewModel AssetsFolder { get; } public SearchViewModel SearchVm { get; } public TabControlViewModel TabControl { get; } - public ConfigIni IoStoreOnDemand { get; } - private Lazy _wwiseProviderLazy; + public ConfigIni IoStoreOnDemand { get; } + private Lazy _wwiseProviderLazy; public WwiseProvider WwiseProvider => _wwiseProviderLazy.Value; public CUE4ParseViewModel() @@ -268,8 +267,8 @@ public class CUE4ParseViewModel : ViewModel } } - Provider.Initialize(); - _wwiseProviderLazy = new Lazy(() => new WwiseProvider(Provider)); + Provider.Initialize(); + _wwiseProviderLazy = new Lazy(() => new WwiseProvider(Provider, UserSettings.Default.WwiseMaxBnkPrefetch)); Log.Information($"{Provider.Versions.Game} ({Provider.Versions.Platform}) | Archives: x{Provider.UnloadedVfs.Count} | AES: x{Provider.RequiredKeys.Count} | Loose Files: x{Provider.Files.Count}"); }); } @@ -674,9 +673,11 @@ public class CUE4ParseViewModel : ViewModel var archive = entry.CreateReader(); var wwise = new WwiseReader(archive); TabControl.SelectedTab.SetDocumentText(JsonConvert.SerializeObject(wwise, Formatting.Indented), saveProperties, updateUi); - foreach (var (name, data) in wwise.WwiseEncodedMedias) + + var medias = WwiseProvider.ExtractBankSounds(wwise); + foreach (var media in medias) { - SaveAndPlaySound(entry.Path.SubstringBeforeWithLast('/') + name, "WEM", data); + SaveAndPlaySound(media.OutputPath, media.Extension, media.Data); } break; @@ -857,12 +858,12 @@ public class CUE4ParseViewModel : ViewModel return false; } case UAkAudioEvent when isNone && pointer.Object.Value is UAkAudioEvent audioEvent: - { - var extractedSounds = WwiseProvider.ExtractAudioEventSounds(audioEvent); - foreach (var sound in extractedSounds) - { - SaveAndPlaySound(sound.OutputPath, sound.Extension, sound.Data); - } + { + var extractedSounds = WwiseProvider.ExtractAudioEventSounds(audioEvent); + foreach (var sound in extractedSounds) + { + SaveAndPlaySound(sound.OutputPath, sound.Extension, sound.Data); + } return false; } case UAkMediaAssetData when isNone: diff --git a/FModel/Views/SettingsView.xaml b/FModel/Views/SettingsView.xaml index d8a79e24..b59ad295 100644 --- a/FModel/Views/SettingsView.xaml +++ b/FModel/Views/SettingsView.xaml @@ -44,6 +44,7 @@ + @@ -227,6 +228,11 @@ + + +