From cadcf0b492bc1787cca2f2407621130c2ca0a532 Mon Sep 17 00:00:00 2001 From: VaDiM Date: Thu, 21 Mar 2024 17:15:02 +0300 Subject: [PATCH] Fix displayed info for non-fmod audio clips --- AssetStudio/Classes/AudioClip.cs | 2 +- AssetStudioCLI/Exporter.cs | 13 ++++- AssetStudioCLI/Options/CLIOptions.cs | 4 +- AssetStudioGUI/AssetStudioGUIForm.cs | 18 +++++-- AssetStudioGUI/ExportOptions.Designer.cs | 4 +- AssetStudioUtility/AudioClipConverter.cs | 60 ++++++++++++------------ 6 files changed, 63 insertions(+), 38 deletions(-) diff --git a/AssetStudio/Classes/AudioClip.cs b/AssetStudio/Classes/AudioClip.cs index 90a226c..2237272 100644 --- a/AssetStudio/Classes/AudioClip.cs +++ b/AssetStudio/Classes/AudioClip.cs @@ -95,7 +95,7 @@ namespace AssetStudio public enum FMODSoundType { UNKNOWN = 0, - ACC = 1, + AAC = 1, AIFF = 2, ASF = 3, AT3 = 4, diff --git a/AssetStudioCLI/Exporter.cs b/AssetStudioCLI/Exporter.cs index 2d9f819..e273c10 100644 --- a/AssetStudioCLI/Exporter.cs +++ b/AssetStudioCLI/Exporter.cs @@ -118,7 +118,7 @@ namespace AssetStudioCLI var buffer = converter.ConvertToWav(m_AudioData); if (buffer == null) { - Logger.Error($"Export error. \"{item.Text}\": Failed to convert to Wav"); + Logger.Error($"Export error. \"{item.Text}\": Failed to convert fmod audio to Wav"); return false; } File.WriteAllBytes(exportFullPath, buffer); @@ -127,6 +127,17 @@ namespace AssetStudioCLI { if (!TryExportFile(exportPath, item, converter.GetExtensionName(), out exportFullPath)) return false; + + if (CLIOptions.o_logLevel.Value <= LoggerEvent.Debug) + { + var sb = new StringBuilder(); + sb.AppendLine($"Exporting non-fmod {item.TypeString} \"{m_AudioClip.m_Name}\".."); + sb.AppendLine(m_AudioClip.version[0] < 5 ? $"AudioClip type: {m_AudioClip.m_Type}" : $"AudioClip compression format: {m_AudioClip.m_CompressionFormat}"); + sb.AppendLine($"AudioClip channel count: {m_AudioClip.m_Channels}"); + sb.AppendLine($"AudioClip sample rate: {m_AudioClip.m_Frequency}"); + sb.AppendLine($"AudioClip bit depth: {m_AudioClip.m_BitsPerSample}"); + Logger.Debug(sb.ToString()); + } File.WriteAllBytes(exportFullPath, m_AudioData); } diff --git a/AssetStudioCLI/Options/CLIOptions.cs b/AssetStudioCLI/Options/CLIOptions.cs index 5de18bb..0669c5d 100644 --- a/AssetStudioCLI/Options/CLIOptions.cs +++ b/AssetStudioCLI/Options/CLIOptions.cs @@ -290,9 +290,9 @@ namespace AssetStudioCLI.Options ( optionDefaultValue: AudioFormat.Wav, optionName: "--audio-format ", - optionDescription: "Specify the format for converting audio assets\n" + + optionDescription: "Specify the format for converting FMOD audio assets\n" + "\n" + - "None - Do not convert audios and export them in their own format\n", + "None - Do not convert fmod audios and export them in their own format\n", optionExample: "Example: \"--audio-format wav\"", optionHelpGroup: HelpGroups.Convert ); diff --git a/AssetStudioGUI/AssetStudioGUIForm.cs b/AssetStudioGUI/AssetStudioGUIForm.cs index b9f6e5f..98ca27f 100644 --- a/AssetStudioGUI/AssetStudioGUIForm.cs +++ b/AssetStudioGUI/AssetStudioGUIForm.cs @@ -952,8 +952,8 @@ namespace AssetStudioGUI { switch (m_AudioClip.m_Type) { - case FMODSoundType.ACC: - assetItem.InfoText += "Acc"; + case FMODSoundType.AAC: + assetItem.InfoText += "AAC"; break; case FMODSoundType.AIFF: assetItem.InfoText += "AIFF"; @@ -1036,6 +1036,18 @@ namespace AssetStudioGUI var m_AudioData = m_AudioClip.m_AudioData.GetData(); if (m_AudioData == null || m_AudioData.Length == 0) return; + + if (!m_AudioClip.IsConvertSupport()) + { + assetItem.InfoText += + $"\nLength: {m_AudioClip.m_Length:.0##}\n" + + $"Channel count: {m_AudioClip.m_Channels}\n" + + $"Sample rate: {m_AudioClip.m_Frequency}\n" + + $"Bit depth: {m_AudioClip.m_BitsPerSample}"; + StatusStripUpdate("Preview is not available for non-fmod sounds. Try to export instead."); + return; + } + var exinfo = new FMOD.CREATESOUNDEXINFO(); exinfo.cbsize = Marshal.SizeOf(exinfo); @@ -2298,7 +2310,7 @@ namespace AssetStudioGUI ERRCHECK(result); if (version < FMOD.VERSION.number) { - Logger.Error($"Error! You are using an old version of FMOD {version:X}. This program requires {FMOD.VERSION.number:X}."); + Logger.Error($"Error! You are using an old version of FMOD {version:X}. This program requires {FMOD.VERSION.number:X}."); Application.Exit(); } diff --git a/AssetStudioGUI/ExportOptions.Designer.cs b/AssetStudioGUI/ExportOptions.Designer.cs index b655ae4..ca13d11 100644 --- a/AssetStudioGUI/ExportOptions.Designer.cs +++ b/AssetStudioGUI/ExportOptions.Designer.cs @@ -214,9 +214,9 @@ this.convertAudio.CheckState = System.Windows.Forms.CheckState.Checked; this.convertAudio.Location = new System.Drawing.Point(6, 173); this.convertAudio.Name = "convertAudio"; - this.convertAudio.Size = new System.Drawing.Size(179, 17); + this.convertAudio.Size = new System.Drawing.Size(213, 17); this.convertAudio.TabIndex = 7; - this.convertAudio.Text = "Convert AudioClip to WAV(PCM)"; + this.convertAudio.Text = "Convert FMOD AudioClip to WAV(PCM)"; this.convertAudio.UseVisualStyleBackColor = true; // // panel1 diff --git a/AssetStudioUtility/AudioClipConverter.cs b/AssetStudioUtility/AudioClipConverter.cs index 1cde7aa..c088e99 100644 --- a/AssetStudioUtility/AudioClipConverter.cs +++ b/AssetStudioUtility/AudioClipConverter.cs @@ -7,6 +7,8 @@ namespace AssetStudio { public class AudioClipConverter { + public bool IsSupport => m_AudioClip.IsConvertSupport(); + private AudioClip m_AudioClip; public AudioClipConverter(AudioClip audioClip) @@ -96,7 +98,7 @@ namespace AssetStudio { switch (m_AudioClip.m_Type) { - case FMODSoundType.ACC: + case FMODSoundType.AAC: return ".m4a"; case FMODSoundType.AIFF: return ".aif"; @@ -152,40 +154,40 @@ namespace AssetStudio return ".AudioClip"; } + } - public bool IsSupport + public static class AudioClipExtension + { + public static bool IsConvertSupport(this AudioClip m_AudioClip) { - get + if (m_AudioClip.version[0] < 5) { - if (m_AudioClip.version[0] < 5) + switch (m_AudioClip.m_Type) { - switch (m_AudioClip.m_Type) - { - case FMODSoundType.AIFF: - case FMODSoundType.IT: - case FMODSoundType.MOD: - case FMODSoundType.S3M: - case FMODSoundType.XM: - case FMODSoundType.XMA: - case FMODSoundType.AUDIOQUEUE: - return true; - default: - return false; - } + case FMODSoundType.AIFF: + case FMODSoundType.IT: + case FMODSoundType.MOD: + case FMODSoundType.S3M: + case FMODSoundType.XM: + case FMODSoundType.XMA: + case FMODSoundType.AUDIOQUEUE: + return true; + default: + return false; } - else + } + else + { + switch (m_AudioClip.m_CompressionFormat) { - switch (m_AudioClip.m_CompressionFormat) - { - case AudioCompressionFormat.PCM: - case AudioCompressionFormat.Vorbis: - case AudioCompressionFormat.ADPCM: - case AudioCompressionFormat.MP3: - case AudioCompressionFormat.XMA: - return true; - default: - return false; - } + case AudioCompressionFormat.PCM: + case AudioCompressionFormat.Vorbis: + case AudioCompressionFormat.ADPCM: + case AudioCompressionFormat.MP3: + case AudioCompressionFormat.XMA: + return true; + default: + return false; } } }