@@ -1108,7 +1108,7 @@ public void ExtractAndScroll(CancellationToken cancellationToken, string fullPat
11081108 TabControl . SelectedTab . AddImage ( sourceFile . SubstringAfterLast ( '/' ) , false , bitmap , false , updateUi ) ;
11091109 return false ;
11101110 }
1111- // The Dark Pictures Anthology
1111+ // Supermassive Games (for example - The Dark Pictures Anthology: House of Ashes etc.)
11121112 case UExternalSource when ( isNone || saveAudio ) && pointer . Object . Value is UExternalSource externalSource :
11131113 {
11141114 var audioName = Path . GetFileNameWithoutExtension ( externalSource . ExternalSourcePath ) ;
@@ -1166,6 +1166,10 @@ public void ExtractAndScroll(CancellationToken cancellationToken, string fullPat
11661166 case UAkMediaAssetData when isNone || saveAudio :
11671167 case USoundWave when isNone || saveAudio :
11681168 {
1169+ // If UAkMediaAsset exists in the same package it should be used to handle the audio instead (because it contains actual audio name)
1170+ if ( pointer . Object . Value is UAkMediaAssetData dataObj && dataObj . Outer is UAkMediaAsset )
1171+ return false ;
1172+
11691173 var shouldDecompress = UserSettings . Default . CompressedAudioMode == ECompressedAudio . PlayDecompressed ;
11701174 pointer . Object . Value . Decode ( shouldDecompress , out var audioFormat , out var data ) ;
11711175 var hasAf = ! string . IsNullOrEmpty ( audioFormat ) ;
@@ -1178,6 +1182,36 @@ public void ExtractAndScroll(CancellationToken cancellationToken, string fullPat
11781182 SaveAndPlaySound ( TabControl . SelectedTab . Entry . PathWithoutExtension . Replace ( '\\ ' , '/' ) , audioFormat , data , saveAudio ) ;
11791183 return false ;
11801184 }
1185+ case UAkMediaAsset when ( isNone || saveAudio ) && pointer . Object . Value is UAkMediaAsset akMediaAsset :
1186+ {
1187+ var audioName = akMediaAsset . MediaName ;
1188+ if ( akMediaAsset . CurrentMediaAssetData ? . TryLoad < UAkMediaAssetData > ( out var akMediaAssetData ) is true )
1189+ {
1190+ var shouldDecompress = UserSettings . Default . CompressedAudioMode is ECompressedAudio . PlayDecompressed ;
1191+ akMediaAssetData . Decode ( shouldDecompress , out var audioFormat , out var data ) ;
1192+
1193+ SaveAndPlaySound ( audioName , audioFormat , data , saveAudio ) ;
1194+ }
1195+ return false ;
1196+ }
1197+ case UAkAudioEventData when ( isNone || saveAudio ) && pointer . Object . Value is UAkAudioEventData akAudioEventData :
1198+ {
1199+ var shouldDecompress = UserSettings . Default . CompressedAudioMode is ECompressedAudio . PlayDecompressed ;
1200+ foreach ( var mediaIndex in akAudioEventData . MediaList )
1201+ {
1202+ if ( mediaIndex . TryLoad < UAkMediaAsset > ( out var akMediaAsset ) )
1203+ {
1204+ if ( akMediaAsset . CurrentMediaAssetData ? . TryLoad < UAkMediaAssetData > ( out var akMediaAssetData ) is true )
1205+ {
1206+ var audioName = akMediaAsset . MediaName ?? $ "{ akAudioEventData . Outer . Name } ({ akMediaAsset . ID } )";
1207+ akMediaAssetData . Decode ( shouldDecompress , out var audioFormat , out var data ) ;
1208+
1209+ SaveAndPlaySound ( audioName , audioFormat , data , saveAudio ) ;
1210+ }
1211+ }
1212+ }
1213+ return false ;
1214+ }
11811215 case UWorld when isNone && UserSettings . Default . PreviewWorlds :
11821216 case UBlueprintGeneratedClass when isNone && UserSettings . Default . PreviewWorlds && TabControl . SelectedTab . ParentExportType switch
11831217 {
0 commit comments