mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-05-25 05:40:21 -04:00
[GUI] AudioClip improvements
- Increased loading speed of AudioClip preview - Optimized memory consumption of AudioClip preview - Fixed incorrect length detection for some sound types - Added channel count info (audio channels)
This commit is contained in:
parent
1cdb0b762a
commit
e3e343320c
@ -80,17 +80,18 @@ namespace AssetStudio
|
|||||||
lock (binaryReader)
|
lock (binaryReader)
|
||||||
{
|
{
|
||||||
binaryReader.BaseStream.Position = Offset;
|
binaryReader.BaseStream.Position = Offset;
|
||||||
return binaryReader.ReadBytes((int) size);
|
return binaryReader.ReadBytes((int)size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GetData(byte[] buff, int startIndex = 0)
|
public void GetData(byte[] buff, out int read, int startIndex = 0)
|
||||||
{
|
{
|
||||||
|
read = -1;
|
||||||
var binaryReader = GetReader();
|
var binaryReader = GetReader();
|
||||||
lock (binaryReader)
|
lock (binaryReader)
|
||||||
{
|
{
|
||||||
binaryReader.BaseStream.Position = Offset;
|
binaryReader.BaseStream.Position = Offset;
|
||||||
binaryReader.Read(buff, startIndex, (int) size);
|
read = binaryReader.Read(buff, startIndex, (int)size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,8 +102,8 @@ namespace AssetStudioCLI
|
|||||||
var m_AudioData = BigArrayPool<byte>.Shared.Rent(m_AudioClip.m_AudioData.Size);
|
var m_AudioData = BigArrayPool<byte>.Shared.Rent(m_AudioClip.m_AudioData.Size);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
m_AudioClip.m_AudioData.GetData(m_AudioData);
|
m_AudioClip.m_AudioData.GetData(m_AudioData, out var read);
|
||||||
if (m_AudioData == null || m_AudioData.Length == 0)
|
if (read <= 0)
|
||||||
{
|
{
|
||||||
Logger.Error($"Export error. \"{item.Text}\": AudioData was not found");
|
Logger.Error($"Export error. \"{item.Text}\": AudioData was not found");
|
||||||
return false;
|
return false;
|
||||||
@ -116,24 +116,8 @@ namespace AssetStudioCLI
|
|||||||
|
|
||||||
if (CLIOptions.o_logLevel.Value <= LoggerEvent.Debug)
|
if (CLIOptions.o_logLevel.Value <= LoggerEvent.Debug)
|
||||||
{
|
{
|
||||||
var sb = new StringBuilder();
|
debugLog += $"Converting {item.TypeString} \"{m_AudioClip.m_Name}\" to wav..\n";
|
||||||
sb.AppendLine($"Converting {item.TypeString} \"{m_AudioClip.m_Name}\" to wav..");
|
debugLog += GenerateAudioClipInfo(m_AudioClip);
|
||||||
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}");
|
|
||||||
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
|
|
||||||
{
|
|
||||||
sb.AppendLine($"Is raw AudioClip: {m_AudioClip.m_Format != 0x05}");
|
|
||||||
sb.AppendLine($"AudioClip channel count: {m_AudioClip.m_Channels}");
|
|
||||||
sb.AppendLine($"AudioClip sample rate: {m_AudioClip.m_Frequency}");
|
|
||||||
}
|
|
||||||
debugLog += sb.ToString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var debugLogConverter = "";
|
var debugLogConverter = "";
|
||||||
@ -155,23 +139,8 @@ namespace AssetStudioCLI
|
|||||||
|
|
||||||
if (CLIOptions.o_logLevel.Value <= LoggerEvent.Debug)
|
if (CLIOptions.o_logLevel.Value <= LoggerEvent.Debug)
|
||||||
{
|
{
|
||||||
var sb = new StringBuilder();
|
debugLog += $"Exporting non-fmod {item.TypeString} \"{m_AudioClip.m_Name}\"..\n";
|
||||||
sb.AppendLine($"Exporting non-fmod {item.TypeString} \"{m_AudioClip.m_Name}\"..");
|
debugLog += GenerateAudioClipInfo(m_AudioClip);
|
||||||
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}");
|
|
||||||
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
|
|
||||||
{
|
|
||||||
sb.AppendLine($"Is raw AudioClip: {m_AudioClip.m_Format != 0x05}");
|
|
||||||
sb.AppendLine($"AudioClip sample rate: {m_AudioClip.m_Frequency}");
|
|
||||||
}
|
|
||||||
debugLog += sb.ToString();
|
|
||||||
}
|
}
|
||||||
using (var file = File.OpenWrite(exportFullPath))
|
using (var file = File.OpenWrite(exportFullPath))
|
||||||
{
|
{
|
||||||
@ -187,6 +156,32 @@ namespace AssetStudioCLI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 sample rate: {m_AudioClip.m_Frequency}");
|
||||||
|
}
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
private static bool TryExportFile(string dir, AssetItem item, string extension, out string fullPath)
|
private static bool TryExportFile(string dir, AssetItem item, string extension, out string fullPath)
|
||||||
{
|
{
|
||||||
var fileName = FixFileName(item.Text);
|
var fileName = FixFileName(item.Text);
|
||||||
|
46
AssetStudioGUI/AssetStudioGUIForm.Designer.cs
generated
46
AssetStudioGUI/AssetStudioGUIForm.Designer.cs
generated
@ -124,7 +124,8 @@
|
|||||||
this.previewPanel = new System.Windows.Forms.PictureBox();
|
this.previewPanel = new System.Windows.Forms.PictureBox();
|
||||||
this.assetInfoLabel = new System.Windows.Forms.Label();
|
this.assetInfoLabel = new System.Windows.Forms.Label();
|
||||||
this.FMODpanel = new System.Windows.Forms.Panel();
|
this.FMODpanel = new System.Windows.Forms.Panel();
|
||||||
this.FMODcopyright = new System.Windows.Forms.Label();
|
this.FMODaudioChannelsLabel = new System.Windows.Forms.Label();
|
||||||
|
this.FMODcopyrightLabel = new System.Windows.Forms.Label();
|
||||||
this.FMODinfoLabel = new System.Windows.Forms.Label();
|
this.FMODinfoLabel = new System.Windows.Forms.Label();
|
||||||
this.FMODtimerLabel = new System.Windows.Forms.Label();
|
this.FMODtimerLabel = new System.Windows.Forms.Label();
|
||||||
this.FMODstatusLabel = new System.Windows.Forms.Label();
|
this.FMODstatusLabel = new System.Windows.Forms.Label();
|
||||||
@ -1077,7 +1078,8 @@
|
|||||||
// FMODpanel
|
// FMODpanel
|
||||||
//
|
//
|
||||||
this.FMODpanel.BackColor = System.Drawing.SystemColors.ControlDark;
|
this.FMODpanel.BackColor = System.Drawing.SystemColors.ControlDark;
|
||||||
this.FMODpanel.Controls.Add(this.FMODcopyright);
|
this.FMODpanel.Controls.Add(this.FMODaudioChannelsLabel);
|
||||||
|
this.FMODpanel.Controls.Add(this.FMODcopyrightLabel);
|
||||||
this.FMODpanel.Controls.Add(this.FMODinfoLabel);
|
this.FMODpanel.Controls.Add(this.FMODinfoLabel);
|
||||||
this.FMODpanel.Controls.Add(this.FMODtimerLabel);
|
this.FMODpanel.Controls.Add(this.FMODtimerLabel);
|
||||||
this.FMODpanel.Controls.Add(this.FMODstatusLabel);
|
this.FMODpanel.Controls.Add(this.FMODstatusLabel);
|
||||||
@ -1094,18 +1096,31 @@
|
|||||||
this.FMODpanel.TabIndex = 2;
|
this.FMODpanel.TabIndex = 2;
|
||||||
this.FMODpanel.Visible = false;
|
this.FMODpanel.Visible = false;
|
||||||
//
|
//
|
||||||
// FMODcopyright
|
// FMODaudioChannelsLabel
|
||||||
//
|
//
|
||||||
this.FMODcopyright.Anchor = System.Windows.Forms.AnchorStyles.Top;
|
this.FMODaudioChannelsLabel.Anchor = System.Windows.Forms.AnchorStyles.Top;
|
||||||
this.FMODcopyright.AutoSize = true;
|
this.FMODaudioChannelsLabel.AutoSize = true;
|
||||||
this.FMODcopyright.BackColor = System.Drawing.Color.Transparent;
|
this.FMODaudioChannelsLabel.BackColor = System.Drawing.Color.Transparent;
|
||||||
this.FMODcopyright.ForeColor = System.Drawing.Color.White;
|
this.FMODaudioChannelsLabel.ForeColor = System.Drawing.Color.White;
|
||||||
this.FMODcopyright.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
this.FMODaudioChannelsLabel.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||||
this.FMODcopyright.Location = new System.Drawing.Point(214, 365);
|
this.FMODaudioChannelsLabel.Location = new System.Drawing.Point(368, 255);
|
||||||
this.FMODcopyright.Name = "FMODcopyright";
|
this.FMODaudioChannelsLabel.Name = "FMODaudioChannelsLabel";
|
||||||
this.FMODcopyright.Size = new System.Drawing.Size(283, 13);
|
this.FMODaudioChannelsLabel.Size = new System.Drawing.Size(38, 13);
|
||||||
this.FMODcopyright.TabIndex = 9;
|
this.FMODaudioChannelsLabel.TabIndex = 10;
|
||||||
this.FMODcopyright.Text = "Audio Engine supplied by FMOD by Firelight Technologies.";
|
this.FMODaudioChannelsLabel.Text = "Stereo";
|
||||||
|
//
|
||||||
|
// FMODcopyrightLabel
|
||||||
|
//
|
||||||
|
this.FMODcopyrightLabel.Anchor = System.Windows.Forms.AnchorStyles.Top;
|
||||||
|
this.FMODcopyrightLabel.AutoSize = true;
|
||||||
|
this.FMODcopyrightLabel.BackColor = System.Drawing.Color.Transparent;
|
||||||
|
this.FMODcopyrightLabel.ForeColor = System.Drawing.Color.White;
|
||||||
|
this.FMODcopyrightLabel.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||||
|
this.FMODcopyrightLabel.Location = new System.Drawing.Point(214, 365);
|
||||||
|
this.FMODcopyrightLabel.Name = "FMODcopyrightLabel";
|
||||||
|
this.FMODcopyrightLabel.Size = new System.Drawing.Size(283, 13);
|
||||||
|
this.FMODcopyrightLabel.TabIndex = 9;
|
||||||
|
this.FMODcopyrightLabel.Text = "Audio Engine supplied by FMOD by Firelight Technologies.";
|
||||||
//
|
//
|
||||||
// FMODinfoLabel
|
// FMODinfoLabel
|
||||||
//
|
//
|
||||||
@ -1126,7 +1141,7 @@
|
|||||||
this.FMODtimerLabel.BackColor = System.Drawing.Color.Transparent;
|
this.FMODtimerLabel.BackColor = System.Drawing.Color.Transparent;
|
||||||
this.FMODtimerLabel.ForeColor = System.Drawing.Color.White;
|
this.FMODtimerLabel.ForeColor = System.Drawing.Color.White;
|
||||||
this.FMODtimerLabel.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
this.FMODtimerLabel.ImeMode = System.Windows.Forms.ImeMode.NoControl;
|
||||||
this.FMODtimerLabel.Location = new System.Drawing.Point(457, 253);
|
this.FMODtimerLabel.Location = new System.Drawing.Point(457, 255);
|
||||||
this.FMODtimerLabel.Name = "FMODtimerLabel";
|
this.FMODtimerLabel.Name = "FMODtimerLabel";
|
||||||
this.FMODtimerLabel.Size = new System.Drawing.Size(102, 13);
|
this.FMODtimerLabel.Size = new System.Drawing.Size(102, 13);
|
||||||
this.FMODtimerLabel.TabIndex = 7;
|
this.FMODtimerLabel.TabIndex = 7;
|
||||||
@ -1649,7 +1664,7 @@
|
|||||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||||
private System.Windows.Forms.TextBox classTextBox;
|
private System.Windows.Forms.TextBox classTextBox;
|
||||||
private System.Windows.Forms.ToolStripMenuItem exportClassStructuresMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem exportClassStructuresMenuItem;
|
||||||
private System.Windows.Forms.Label FMODcopyright;
|
private System.Windows.Forms.Label FMODcopyrightLabel;
|
||||||
private OpenTK.GLControl glControl1;
|
private OpenTK.GLControl glControl1;
|
||||||
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
||||||
private System.Windows.Forms.ToolStripMenuItem showOriginalFileToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem showOriginalFileToolStripMenuItem;
|
||||||
@ -1735,6 +1750,7 @@
|
|||||||
private System.Windows.Forms.ToolStripMenuItem colorThemeAutoToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem colorThemeAutoToolStripMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem colorThemeLightToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem colorThemeLightToolStripMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem colorThemeDarkToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem colorThemeDarkToolStripMenuItem;
|
||||||
|
private System.Windows.Forms.Label FMODaudioChannelsLabel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,6 +43,7 @@ namespace AssetStudioGUI
|
|||||||
private FMOD.Channel channel;
|
private FMOD.Channel channel;
|
||||||
private FMOD.SoundGroup masterSoundGroup;
|
private FMOD.SoundGroup masterSoundGroup;
|
||||||
private FMOD.MODE loopMode = FMOD.MODE.LOOP_OFF;
|
private FMOD.MODE loopMode = FMOD.MODE.LOOP_OFF;
|
||||||
|
private byte[] soundBuff;
|
||||||
private uint FMODlenms;
|
private uint FMODlenms;
|
||||||
private uint FMODloopstartms;
|
private uint FMODloopstartms;
|
||||||
private uint FMODloopendms;
|
private uint FMODloopendms;
|
||||||
@ -1101,17 +1102,16 @@ namespace AssetStudioGUI
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
soundBuff = BigArrayPool<byte>.Shared.Rent(m_AudioClip.m_AudioData.Size);
|
||||||
var m_AudioData = m_AudioClip.m_AudioData.GetData();
|
m_AudioClip.m_AudioData.GetData(soundBuff, out var read);
|
||||||
if (m_AudioData == null || m_AudioData.Length == 0)
|
if (read <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var exinfo = new FMOD.CREATESOUNDEXINFO();
|
var exinfo = new FMOD.CREATESOUNDEXINFO();
|
||||||
|
|
||||||
exinfo.cbsize = Marshal.SizeOf(exinfo);
|
exinfo.cbsize = Marshal.SizeOf(exinfo);
|
||||||
exinfo.length = (uint)m_AudioClip.m_Size;
|
exinfo.length = (uint)m_AudioClip.m_Size;
|
||||||
|
|
||||||
var result = system.createSound(m_AudioData, FMOD.MODE.OPENMEMORY | loopMode, ref exinfo, out sound);
|
var result = system.createStream(soundBuff, FMOD.MODE.OPENMEMORY | FMOD.MODE.LOWMEM | FMOD.MODE.IGNORETAGS | FMOD.MODE.ACCURATETIME | loopMode, ref exinfo, out sound);
|
||||||
if (result != FMOD.RESULT.OK)
|
if (result != FMOD.RESULT.OK)
|
||||||
{
|
{
|
||||||
if (m_AudioClip.version < (2, 6) || m_AudioClip.version >= 5)
|
if (m_AudioClip.version < (2, 6) || m_AudioClip.version >= 5)
|
||||||
@ -1141,7 +1141,6 @@ namespace AssetStudioGUI
|
|||||||
}
|
}
|
||||||
|
|
||||||
sound.getNumSubSounds(out var numsubsounds);
|
sound.getNumSubSounds(out var numsubsounds);
|
||||||
|
|
||||||
if (numsubsounds > 0)
|
if (numsubsounds > 0)
|
||||||
{
|
{
|
||||||
result = sound.getSubSound(0, out var subsound);
|
result = sound.getSubSound(0, out var subsound);
|
||||||
@ -1172,6 +1171,20 @@ namespace AssetStudioGUI
|
|||||||
|
|
||||||
FMODinfoLabel.Text = frequency + " Hz";
|
FMODinfoLabel.Text = frequency + " Hz";
|
||||||
FMODtimerLabel.Text = $"00:00.00 / {(FMODlenms / 1000 / 60):00}:{(FMODlenms / 1000 % 60):00}.{(FMODlenms / 10 % 100):00}";
|
FMODtimerLabel.Text = $"00:00.00 / {(FMODlenms / 1000 / 60):00}:{(FMODlenms / 1000 % 60):00}.{(FMODlenms / 10 % 100):00}";
|
||||||
|
|
||||||
|
sound.getFormat(out _, out _, out var audioChannels, out _);
|
||||||
|
switch (audioChannels)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
FMODaudioChannelsLabel.Text = "Mono";
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
FMODaudioChannelsLabel.Text = "Stereo";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
FMODaudioChannelsLabel.Text = $"{audioChannels}-Channel";
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PreviewVideoClip(AssetItem assetItem, VideoClip m_VideoClip)
|
private void PreviewVideoClip(AssetItem assetItem, VideoClip m_VideoClip)
|
||||||
@ -2589,6 +2602,7 @@ namespace AssetStudioGUI
|
|||||||
FMODtimerLabel.Text = "00:00.00 / 00:00.00";
|
FMODtimerLabel.Text = "00:00.00 / 00:00.00";
|
||||||
FMODstatusLabel.Text = "Stopped";
|
FMODstatusLabel.Text = "Stopped";
|
||||||
FMODinfoLabel.Text = "";
|
FMODinfoLabel.Text = "";
|
||||||
|
FMODaudioChannelsLabel.Text = "";
|
||||||
|
|
||||||
if (sound.hasHandle())
|
if (sound.hasHandle())
|
||||||
{
|
{
|
||||||
@ -2596,6 +2610,11 @@ namespace AssetStudioGUI
|
|||||||
ERRCHECK(result);
|
ERRCHECK(result);
|
||||||
sound.clearHandle();
|
sound.clearHandle();
|
||||||
}
|
}
|
||||||
|
if (soundBuff != null)
|
||||||
|
{
|
||||||
|
BigArrayPool<byte>.Shared.Return(soundBuff, clearArray: true);
|
||||||
|
soundBuff = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FMODplayButton_Click(object sender, EventArgs e)
|
private void FMODplayButton_Click(object sender, EventArgs e)
|
||||||
|
@ -101,8 +101,8 @@ namespace AssetStudioGUI
|
|||||||
var m_AudioData = BigArrayPool<byte>.Shared.Rent(m_AudioClip.m_AudioData.Size);
|
var m_AudioData = BigArrayPool<byte>.Shared.Rent(m_AudioClip.m_AudioData.Size);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
m_AudioClip.m_AudioData.GetData(m_AudioData);
|
m_AudioClip.m_AudioData.GetData(m_AudioData, out var read);
|
||||||
if (m_AudioData == null || m_AudioData.Length == 0)
|
if (read <= 0)
|
||||||
{
|
{
|
||||||
Logger.Warning($"Failed to export \"{item.Text}\": AudioData was not found");
|
Logger.Warning($"Failed to export \"{item.Text}\": AudioData was not found");
|
||||||
return false;
|
return false;
|
||||||
@ -115,25 +115,8 @@ namespace AssetStudioGUI
|
|||||||
|
|
||||||
if (GUILogger.ShowDebugMessage)
|
if (GUILogger.ShowDebugMessage)
|
||||||
{
|
{
|
||||||
var sb = new StringBuilder();
|
debugLog += $"Converting {item.TypeString} \"{m_AudioClip.m_Name}\" to wav..\n";
|
||||||
sb.AppendLine($"Converting {item.TypeString} \"{m_AudioClip.m_Name}\" to wav..");
|
debugLog += GenerateAudioClipInfo(m_AudioClip);
|
||||||
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}");
|
|
||||||
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
|
|
||||||
{
|
|
||||||
sb.AppendLine($"Is raw AudioClip: {m_AudioClip.m_Format != 0x05}");
|
|
||||||
sb.AppendLine($"AudioClip channel count: {m_AudioClip.m_Channels}");
|
|
||||||
sb.AppendLine($"AudioClip sample rate: {m_AudioClip.m_Frequency}");
|
|
||||||
}
|
|
||||||
|
|
||||||
debugLog += sb.ToString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var debugLogConverter = "";
|
var debugLogConverter = "";
|
||||||
@ -155,24 +138,8 @@ namespace AssetStudioGUI
|
|||||||
|
|
||||||
if (GUILogger.ShowDebugMessage)
|
if (GUILogger.ShowDebugMessage)
|
||||||
{
|
{
|
||||||
var sb = new StringBuilder();
|
debugLog += $"Exporting non-fmod {item.TypeString} \"{m_AudioClip.m_Name}\"..\n";
|
||||||
sb.AppendLine($"Exporting non-fmod {item.TypeString} \"{m_AudioClip.m_Name}\"..");
|
debugLog += GenerateAudioClipInfo(m_AudioClip);
|
||||||
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}");
|
|
||||||
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
|
|
||||||
{
|
|
||||||
sb.AppendLine($"Is raw AudioClip: {m_AudioClip.m_Format != 0x05}");
|
|
||||||
sb.AppendLine($"AudioClip sample rate: {m_AudioClip.m_Frequency}");
|
|
||||||
}
|
|
||||||
|
|
||||||
debugLog += sb.ToString();
|
|
||||||
}
|
}
|
||||||
using (var file = File.OpenWrite(exportFullPath))
|
using (var file = File.OpenWrite(exportFullPath))
|
||||||
{
|
{
|
||||||
@ -188,6 +155,32 @@ namespace AssetStudioGUI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 sample rate: {m_AudioClip.m_Frequency}");
|
||||||
|
}
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
private static bool TryExportFile(string dir, AssetItem item, string extension, out string fullPath)
|
private static bool TryExportFile(string dir, AssetItem item, string extension, out string fullPath)
|
||||||
{
|
{
|
||||||
var fileName = FixFileName(item.Text);
|
var fileName = FixFileName(item.Text);
|
||||||
|
@ -38,7 +38,7 @@ namespace AssetStudio
|
|||||||
var exinfo = new CREATESOUNDEXINFO();
|
var exinfo = new CREATESOUNDEXINFO();
|
||||||
exinfo.cbsize = Marshal.SizeOf(exinfo);
|
exinfo.cbsize = Marshal.SizeOf(exinfo);
|
||||||
exinfo.length = (uint)m_AudioClip.m_Size;
|
exinfo.length = (uint)m_AudioClip.m_Size;
|
||||||
var result = system.createSound(m_AudioData, MODE.OPENMEMORY, ref exinfo, out var sound);
|
var result = system.createSound(m_AudioData, MODE.OPENMEMORY | MODE.LOWMEM | MODE.ACCURATETIME, ref exinfo, out var sound);
|
||||||
if (ErrorCheck(result, out debugLog))
|
if (ErrorCheck(result, out debugLog))
|
||||||
return null;
|
return null;
|
||||||
result = sound.getNumSubSounds(out var numsubsounds);
|
result = sound.getNumSubSounds(out var numsubsounds);
|
||||||
@ -106,19 +106,20 @@ namespace AssetStudio
|
|||||||
|
|
||||||
public byte[] RawAudioClipToWav(out string debugLog)
|
public byte[] RawAudioClipToWav(out string debugLog)
|
||||||
{
|
{
|
||||||
var audioSize = m_AudioClip.m_Size;
|
var audioSize = (uint)m_AudioClip.m_Size;
|
||||||
var channels = m_AudioClip.m_Channels;
|
var channels = m_AudioClip.m_Channels;
|
||||||
var sampleRate = m_AudioClip.m_Frequency;
|
var sampleRate = m_AudioClip.m_Frequency;
|
||||||
var bits = 16;
|
var bits = 16;
|
||||||
|
|
||||||
debugLog = "[Legacy wav converter] Generating wav header..\n";
|
debugLog = "[Legacy wav converter] Generating wav header..\n";
|
||||||
var buffer = new byte[audioSize + 44];
|
var buffer = new byte[audioSize + 44];
|
||||||
m_AudioClip.m_AudioData.GetData(buffer, 44);
|
m_AudioClip.m_AudioData.GetData(buffer, out var read, 44);
|
||||||
WriteWavHeader(buffer, audioSize, sampleRate, channels, bits);
|
if (read > 0)
|
||||||
|
WriteWavHeader(buffer, audioSize, sampleRate, channels, bits);
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void WriteWavHeader(byte[] buffer, long size, int sampleRate, int channels, int bits)
|
private static void WriteWavHeader(byte[] buffer, uint size, int sampleRate, int channels, int bits)
|
||||||
{
|
{
|
||||||
Encoding.ASCII.GetBytes("RIFF").CopyTo(buffer, 0);
|
Encoding.ASCII.GetBytes("RIFF").CopyTo(buffer, 0);
|
||||||
BitConverter.GetBytes(size + 36).CopyTo(buffer, 4);
|
BitConverter.GetBytes(size + 36).CopyTo(buffer, 4);
|
||||||
|
@ -89,7 +89,7 @@ namespace AssetStudio
|
|||||||
var buff = BigArrayPool<byte>.Shared.Rent(reader.Size);
|
var buff = BigArrayPool<byte>.Shared.Rent(reader.Size);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
reader.GetData(buff);
|
reader.GetData(buff, out _);
|
||||||
if (switchSwizzled)
|
if (switchSwizzled)
|
||||||
{
|
{
|
||||||
var unswizzledData = BigArrayPool<byte>.Shared.Rent(reader.Size);
|
var unswizzledData = BigArrayPool<byte>.Shared.Rent(reader.Size);
|
||||||
|
Loading…
Reference in New Issue
Block a user