mirror of
https://github.com/aelurum/AssetStudio.git
synced 2026-11-14 11:18:47 -05:00
Improve AudioClip support
This commit is contained in:
@@ -103,18 +103,19 @@ namespace AssetStudioCLI
|
||||
{
|
||||
debugLog = string.Empty;
|
||||
var m_AudioClip = (AudioClip)item.Asset;
|
||||
var m_AudioData = BigArrayPool<byte>.Shared.Rent(m_AudioClip.m_AudioData.Size);
|
||||
var audioBuff = BigArrayPool<byte>.Shared.Rent(m_AudioClip.m_AudioData.Size);
|
||||
try
|
||||
{
|
||||
string exportFullPath;
|
||||
var dataLen = m_AudioClip.m_AudioData.GetData(m_AudioData);
|
||||
var dataLen = m_AudioClip.m_AudioData.GetData(audioBuff);
|
||||
if (dataLen <= 0)
|
||||
{
|
||||
Logger.Error($"Export error. \"{item.Text}\": AudioData was not found");
|
||||
return false;
|
||||
}
|
||||
var converter = new AudioClipConverter(m_AudioClip);
|
||||
if (CLIOptions.o_audioFormat.Value != AudioFormat.None && (converter.IsSupport || converter.IsLegacy))
|
||||
var isWav = m_AudioClip.m_Type == FMODSoundType.WAV || m_AudioClip.IsLegacyRawWav();
|
||||
var converter = new AudioClipConverter(m_AudioClip, audioBuff);
|
||||
if (CLIOptions.o_audioFormat.Value != AudioFormat.None && !isWav && converter.IsSupport)
|
||||
{
|
||||
if (!TryExportFile(exportPath, item, ".wav", out exportFullPath))
|
||||
return false;
|
||||
@@ -125,12 +126,9 @@ namespace AssetStudioCLI
|
||||
debugLog += GenerateAudioClipInfo(m_AudioClip);
|
||||
}
|
||||
|
||||
var buffer = converter.IsLegacy
|
||||
? converter.RawAudioClipToWav(ref debugLog)
|
||||
: converter.ConvertToWav(m_AudioData, ref debugLog);
|
||||
if (buffer == null)
|
||||
if (!converter.TryConvertToWav(out var buffer, ref debugLog))
|
||||
{
|
||||
Logger.Error($"{debugLog}Export error. \"{item.Text}\": Failed to convert fmod audio to Wav");
|
||||
Logger.Error($"{debugLog}Export error. \"{item.Text}\": Failed to convert audio to wav");
|
||||
return false;
|
||||
}
|
||||
File.WriteAllBytes(exportFullPath, buffer);
|
||||
@@ -142,12 +140,21 @@ namespace AssetStudioCLI
|
||||
|
||||
if (CLIOptions.o_logLevel.Value <= LoggerEvent.Debug)
|
||||
{
|
||||
debugLog += $"Exporting non-fmod {item.TypeString} \"{m_AudioClip.m_Name}\"..\n";
|
||||
debugLog += $"Exporting {item.TypeString} \"{m_AudioClip.m_Name}\"..\n";
|
||||
debugLog += GenerateAudioClipInfo(m_AudioClip);
|
||||
}
|
||||
|
||||
using (var file = File.OpenWrite(exportFullPath))
|
||||
{
|
||||
file.Write(m_AudioData, 0, m_AudioClip.m_AudioData.Size);
|
||||
if (m_AudioClip.IsLegacyRawWav())
|
||||
{
|
||||
var buffer = converter.WrapWavData(ref debugLog);
|
||||
file.Write(buffer, 0, buffer.Length);
|
||||
}
|
||||
else
|
||||
{
|
||||
file.Write(audioBuff, 0, m_AudioClip.m_AudioData.Size);
|
||||
}
|
||||
}
|
||||
}
|
||||
debugLog += $"{item.TypeString} \"{item.Text}\" exported to \"{exportFullPath}\"";
|
||||
@@ -155,33 +162,23 @@ namespace AssetStudioCLI
|
||||
}
|
||||
finally
|
||||
{
|
||||
BigArrayPool<byte>.Shared.Return(m_AudioData, clearArray: true);
|
||||
BigArrayPool<byte>.Shared.Return(audioBuff, clearArray: true);
|
||||
}
|
||||
}
|
||||
|
||||
private static string GenerateAudioClipInfo(AudioClip m_AudioClip)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
if (m_AudioClip.version >= (2, 6))
|
||||
{
|
||||
sb.AppendLine(m_AudioClip.version < 5
|
||||
? $"AudioClip type: {m_AudioClip.m_Type}"
|
||||
: $"AudioClip compression format: {m_AudioClip.m_CompressionFormat}");
|
||||
if (m_AudioClip.version >= 5)
|
||||
{
|
||||
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}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var isRawWav = m_AudioClip.m_Format != 0x05;
|
||||
sb.AppendLine($"Is raw wav data: {isRawWav}");
|
||||
if (isRawWav)
|
||||
sb.AppendLine($"AudioClip channel count: {m_AudioClip.m_Channels}");
|
||||
sb.AppendLine($"AudioClip compression format: {m_AudioClip.GetCompressionFormatString()}");
|
||||
if (m_AudioClip.m_Length > 0)
|
||||
sb.AppendLine($"AudioClip length: {m_AudioClip.m_Length:0.0##}");
|
||||
if (m_AudioClip.m_Frequency > 0)
|
||||
sb.AppendLine($"AudioClip sample rate: {m_AudioClip.m_Frequency}");
|
||||
}
|
||||
if (m_AudioClip.m_Channels > 0)
|
||||
sb.AppendLine($"AudioClip channel count: {m_AudioClip.m_Channels}");
|
||||
if (m_AudioClip.version >= 5)
|
||||
sb.AppendLine($"AudioClip bit depth: {m_AudioClip.m_BitsPerSample}");
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user