@@ -780,7 +780,7 @@ public void Extract(CancellationToken cancellationToken, GameFile entry, bool ad
780780 case "bank" :
781781 {
782782 var archive = entry . CreateReader ( ) ;
783- if ( ! FModProvider . TryLoadBank ( archive , entry . NameWithoutExtension , out var fmodReader ) )
783+ if ( ! FmodProvider . TryLoadBank ( archive , entry . NameWithoutExtension , out var fmodReader ) )
784784 {
785785 Log . Error ( $ "Failed to load FMOD bank { entry . Path } ") ;
786786 break ;
@@ -792,7 +792,7 @@ public void Extract(CancellationToken cancellationToken, GameFile entry, bool ad
792792 var directory = Path . GetDirectoryName ( entry . Path ) ?? "/FMOD/Desktop/" ;
793793 foreach ( var sound in extractedSounds )
794794 {
795- SaveAndPlaySound ( Path . Combine ( directory , sound . Name ) , sound . Extension , sound . Data , saveAudio ) ;
795+ SaveAndPlaySound ( Path . Combine ( directory , sound . Name ) , sound . Extension , sound . Data , saveAudio , updateUi ) ;
796796 }
797797
798798 break ;
@@ -807,7 +807,7 @@ public void Extract(CancellationToken cancellationToken, GameFile entry, bool ad
807807 var medias = WwiseProvider . ExtractBankSounds ( wwise ) ;
808808 foreach ( var media in medias )
809809 {
810- SaveAndPlaySound ( media . OutputPath , media . Extension , media . Data , saveAudio ) ;
810+ SaveAndPlaySound ( media . OutputPath , media . Extension , media . Data , saveAudio , updateUi ) ;
811811 }
812812
813813 break ;
@@ -823,7 +823,7 @@ public void Extract(CancellationToken cancellationToken, GameFile entry, bool ad
823823 var extractedSounds = CriWareProvider . ExtractCriWareSounds ( awbReader , archive . Name ) ;
824824 foreach ( var sound in extractedSounds )
825825 {
826- SaveAndPlaySound ( Path . Combine ( directory , sound . Name ) , sound . Extension , sound . Data , saveAudio ) ;
826+ SaveAndPlaySound ( Path . Combine ( directory , sound . Name ) , sound . Extension , sound . Data , saveAudio , updateUi ) ;
827827 }
828828
829829 break ;
@@ -839,7 +839,7 @@ public void Extract(CancellationToken cancellationToken, GameFile entry, bool ad
839839 var extractedSounds = CriWareProvider . ExtractCriWareSounds ( acbReader , archive . Name ) ;
840840 foreach ( var sound in extractedSounds )
841841 {
842- SaveAndPlaySound ( Path . Combine ( directory , sound . Name ) , sound . Extension , sound . Data , saveAudio ) ;
842+ SaveAndPlaySound ( Path . Combine ( directory , sound . Name ) , sound . Extension , sound . Data , saveAudio , updateUi ) ;
843843 }
844844
845845 break ;
@@ -854,7 +854,7 @@ public void Extract(CancellationToken cancellationToken, GameFile entry, bool ad
854854 // todo: CSCore.MediaFoundation.MediaFoundationException The byte stream type of the given URL is unsupported. case "aif":
855855 {
856856 var data = Provider . SaveAsset ( entry ) ;
857- SaveAndPlaySound ( entry . PathWithoutExtension , entry . Extension , data , saveAudio ) ;
857+ SaveAndPlaySound ( entry . PathWithoutExtension , entry . Extension , data , saveAudio , updateUi ) ;
858858
859859 break ;
860860 }
@@ -1114,15 +1114,15 @@ public void ExtractAndScroll(CancellationToken cancellationToken, string fullPat
11141114 case UExternalSource when ( isNone || saveAudio ) && pointer . Object . Value is UExternalSource externalSource :
11151115 {
11161116 var audioName = Path . GetFileNameWithoutExtension ( externalSource . ExternalSourcePath ) ;
1117- SaveAndPlaySound ( audioName , "wem" , externalSource . Data ? . WemFile ?? [ ] , saveAudio ) ;
1117+ SaveAndPlaySound ( audioName , "wem" , externalSource . Data ? . WemFile ?? [ ] , saveAudio , updateUi ) ;
11181118 return false ;
11191119 }
11201120 case UAkAudioEvent when ( isNone || saveAudio ) && pointer . Object . Value is UAkAudioEvent audioEvent :
11211121 {
11221122 var extractedSounds = WwiseProvider . ExtractAudioEventSounds ( audioEvent ) ;
11231123 foreach ( var sound in extractedSounds )
11241124 {
1125- SaveAndPlaySound ( sound . OutputPath , sound . Extension , sound . Data , saveAudio ) ;
1125+ SaveAndPlaySound ( sound . OutputPath , sound . Extension , sound . Data , saveAudio , updateUi ) ;
11261126 }
11271127 return false ;
11281128 }
@@ -1132,7 +1132,7 @@ public void ExtractAndScroll(CancellationToken cancellationToken, string fullPat
11321132 var directory = Path . GetDirectoryName ( fmodEvent . Owner ? . Name ) ?? "/FMOD/Desktop/" ;
11331133 foreach ( var sound in extractedSounds )
11341134 {
1135- SaveAndPlaySound ( Path . Combine ( directory , sound . Name ) , sound . Extension , sound . Data , saveAudio ) ;
1135+ SaveAndPlaySound ( Path . Combine ( directory , sound . Name ) , sound . Extension , sound . Data , saveAudio , updateUi ) ;
11361136 }
11371137 return false ;
11381138 }
@@ -1142,7 +1142,7 @@ public void ExtractAndScroll(CancellationToken cancellationToken, string fullPat
11421142 var directory = Path . GetDirectoryName ( fmodBank . Owner ? . Name ) ?? "/FMOD/Desktop/" ;
11431143 foreach ( var sound in extractedSounds )
11441144 {
1145- SaveAndPlaySound ( Path . Combine ( directory , sound . Name ) , sound . Extension , sound . Data , saveAudio ) ;
1145+ SaveAndPlaySound ( Path . Combine ( directory , sound . Name ) , sound . Extension , sound . Data , saveAudio , updateUi ) ;
11461146 }
11471147 return false ;
11481148 }
@@ -1161,7 +1161,7 @@ public void ExtractAndScroll(CancellationToken cancellationToken, string fullPat
11611161 directory = Path . GetDirectoryName ( atomObject . Owner . Provider . FixPath ( directory ) ) ;
11621162 foreach ( var sound in extractedSounds )
11631163 {
1164- SaveAndPlaySound ( Path . Combine ( directory , sound . Name ) . Replace ( "\\ " , "/" ) , sound . Extension , sound . Data , saveAudio ) ;
1164+ SaveAndPlaySound ( Path . Combine ( directory , sound . Name ) . Replace ( "\\ " , "/" ) , sound . Extension , sound . Data , saveAudio , updateUi ) ;
11651165 }
11661166 return false ;
11671167 }
@@ -1181,7 +1181,7 @@ public void ExtractAndScroll(CancellationToken cancellationToken, string fullPat
11811181 return false ;
11821182 }
11831183
1184- SaveAndPlaySound ( TabControl . SelectedTab . Entry . PathWithoutExtension . Replace ( '\\ ' , '/' ) , audioFormat , data , saveAudio ) ;
1184+ SaveAndPlaySound ( TabControl . SelectedTab . Entry . PathWithoutExtension . Replace ( '\\ ' , '/' ) , audioFormat , data , saveAudio , updateUi ) ;
11851185 return false ;
11861186 }
11871187 case UAkMediaAsset when ( isNone || saveAudio ) && pointer . Object . Value is UAkMediaAsset akMediaAsset :
@@ -1192,7 +1192,7 @@ public void ExtractAndScroll(CancellationToken cancellationToken, string fullPat
11921192 var shouldDecompress = UserSettings . Default . CompressedAudioMode is ECompressedAudio . PlayDecompressed ;
11931193 akMediaAssetData . Decode ( shouldDecompress , out var audioFormat , out var data ) ;
11941194
1195- SaveAndPlaySound ( audioName , audioFormat , data , saveAudio ) ;
1195+ SaveAndPlaySound ( audioName , audioFormat , data , saveAudio , updateUi ) ;
11961196 }
11971197 return false ;
11981198 }
@@ -1208,7 +1208,7 @@ public void ExtractAndScroll(CancellationToken cancellationToken, string fullPat
12081208 var audioName = akMediaAsset . MediaName ?? $ "{ akAudioEventData . Outer . Name } ({ akMediaAsset . ID } )";
12091209 akMediaAssetData . Decode ( shouldDecompress , out var audioFormat , out var data ) ;
12101210
1211- SaveAndPlaySound ( audioName , audioFormat , data , saveAudio ) ;
1211+ SaveAndPlaySound ( audioName , audioFormat , data , saveAudio , updateUi ) ;
12121212 }
12131213 }
12141214 }
@@ -1225,7 +1225,7 @@ public void ExtractAndScroll(CancellationToken cancellationToken, string fullPat
12251225 var extractedSounds = WwiseProvider . ExtractAudioEventBorderlands4 ( faceFXAnimData . ID . Name , false ) ;
12261226 foreach ( var sound in extractedSounds )
12271227 {
1228- SaveAndPlaySound ( sound . OutputPath , sound . Extension , sound . Data , saveAudio ) ;
1228+ SaveAndPlaySound ( sound . OutputPath , sound . Extension , sound . Data , saveAudio , updateUi ) ;
12291229 }
12301230 }
12311231
@@ -1239,7 +1239,7 @@ public void ExtractAndScroll(CancellationToken cancellationToken, string fullPat
12391239 var extractedSounds = WwiseProvider . ExtractAudioEventBorderlands4 ( eventName , useSoundTag ) ;
12401240 foreach ( var sound in extractedSounds )
12411241 {
1242- SaveAndPlaySound ( sound . OutputPath , sound . Extension , sound . Data , saveAudio ) ;
1242+ SaveAndPlaySound ( sound . OutputPath , sound . Extension , sound . Data , saveAudio , updateUi ) ;
12431243 }
12441244 }
12451245
@@ -1379,7 +1379,7 @@ public void Decompile(GameFile entry)
13791379 TabControl . SelectedTab . SetDocumentText ( cpp , false , false ) ;
13801380 }
13811381
1382- private void SaveAndPlaySound ( string fullPath , string ext , byte [ ] data , bool isBulk )
1382+ private void SaveAndPlaySound ( string fullPath , string ext , byte [ ] data , bool isBulk , bool updateUi )
13831383 {
13841384 if ( fullPath . StartsWith ( '/' ) ) fullPath = fullPath [ 1 ..] ;
13851385 var savedAudioPath = Path . Combine ( UserSettings . Default . AudioDirectory ,
@@ -1389,9 +1389,28 @@ private void SaveAndPlaySound(string fullPath, string ext, byte[] data, bool isB
13891389 {
13901390 Directory . CreateDirectory ( savedAudioPath . SubstringBeforeLast ( '/' ) ) ;
13911391 using var stream = new FileStream ( savedAudioPath , FileMode . Create , FileAccess . Write ) ;
1392- using var writer = new BinaryWriter ( stream ) ;
1393- writer . Write ( data ) ;
1394- writer . Flush ( ) ;
1392+ using ( var writer = new BinaryWriter ( stream ) )
1393+ {
1394+ writer . Write ( data ) ;
1395+ writer . Flush ( ) ;
1396+ }
1397+
1398+ if ( UserSettings . Default . ConvertAudioOnBulkExport )
1399+ {
1400+ AudioPlayerViewModel . TryConvert ( savedAudioPath , data , out string wavFilePath ) ;
1401+ savedAudioPath = wavFilePath ;
1402+ }
1403+
1404+ Log . Information ( "Successfully saved {FilePath}" , savedAudioPath ) ;
1405+ if ( updateUi )
1406+ {
1407+ FLogger . Append ( ELog . Information , ( ) =>
1408+ {
1409+ FLogger . Text ( "Successfully saved " , Constants . WHITE ) ;
1410+ FLogger . Link ( Path . GetFileName ( savedAudioPath ) , savedAudioPath , true ) ;
1411+ } ) ;
1412+ }
1413+
13951414 return ;
13961415 }
13971416
0 commit comments