126 lines
3.6 KiB
C#
126 lines
3.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace AssetStudio
|
|
{
|
|
public sealed class AudioClip : NamedObject
|
|
{
|
|
public int m_Format;
|
|
public AudioType m_Type;
|
|
public bool m_3D;
|
|
public bool m_UseHardware;
|
|
|
|
//version 5
|
|
public int m_LoadType;
|
|
public int m_Channels;
|
|
public int m_Frequency;
|
|
public int m_BitsPerSample;
|
|
public float m_Length;
|
|
public bool m_IsTrackerFormat;
|
|
public int m_SubsoundIndex;
|
|
public bool m_PreloadAudioData;
|
|
public bool m_LoadInBackground;
|
|
public bool m_Legacy3D;
|
|
public AudioCompressionFormat m_CompressionFormat;
|
|
|
|
public string m_Source;
|
|
public ulong m_Offset;
|
|
public long m_Size;
|
|
public ResourceReader m_AudioData;
|
|
|
|
public AudioClip(ObjectReader reader) : base(reader)
|
|
{
|
|
if (version[0] < 5)
|
|
{
|
|
m_Format = reader.ReadInt32();
|
|
m_Type = (AudioType)reader.ReadInt32();
|
|
m_3D = reader.ReadBoolean();
|
|
m_UseHardware = reader.ReadBoolean();
|
|
reader.AlignStream();
|
|
|
|
if (version[0] >= 4 || (version[0] == 3 && version[1] >= 2)) //3.2.0 to 5
|
|
{
|
|
int m_Stream = reader.ReadInt32();
|
|
m_Size = reader.ReadInt32();
|
|
var tsize = m_Size % 4 != 0 ? m_Size + 4 - m_Size % 4 : m_Size;
|
|
if (reader.byteSize + reader.byteStart - reader.Position != tsize)
|
|
{
|
|
m_Offset = reader.ReadUInt32();
|
|
m_Source = assetsFile.fullName + ".resS";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_Size = reader.ReadInt32();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_LoadType = reader.ReadInt32();
|
|
m_Channels = reader.ReadInt32();
|
|
m_Frequency = reader.ReadInt32();
|
|
m_BitsPerSample = reader.ReadInt32();
|
|
m_Length = reader.ReadSingle();
|
|
m_IsTrackerFormat = reader.ReadBoolean();
|
|
reader.AlignStream();
|
|
m_SubsoundIndex = reader.ReadInt32();
|
|
m_PreloadAudioData = reader.ReadBoolean();
|
|
m_LoadInBackground = reader.ReadBoolean();
|
|
m_Legacy3D = reader.ReadBoolean();
|
|
reader.AlignStream();
|
|
|
|
//StreamedResource m_Resource
|
|
m_Source = reader.ReadAlignedString();
|
|
m_Offset = reader.ReadUInt64();
|
|
m_Size = reader.ReadInt64();
|
|
m_CompressionFormat = (AudioCompressionFormat)reader.ReadInt32();
|
|
}
|
|
|
|
ResourceReader resourceReader;
|
|
if (!string.IsNullOrEmpty(m_Source))
|
|
{
|
|
resourceReader = new ResourceReader(m_Source, assetsFile, m_Offset, (int)m_Size);
|
|
}
|
|
else
|
|
{
|
|
resourceReader = new ResourceReader(reader, reader.BaseStream.Position, (int)m_Size);
|
|
}
|
|
m_AudioData = resourceReader;
|
|
}
|
|
}
|
|
|
|
public enum AudioType
|
|
{
|
|
UNKNOWN,
|
|
ACC,
|
|
AIFF,
|
|
IT = 10,
|
|
MOD = 12,
|
|
MPEG,
|
|
OGGVORBIS,
|
|
S3M = 17,
|
|
WAV = 20,
|
|
XM,
|
|
XMA,
|
|
VAG,
|
|
AUDIOQUEUE
|
|
}
|
|
|
|
public enum AudioCompressionFormat
|
|
{
|
|
PCM,
|
|
Vorbis,
|
|
ADPCM,
|
|
MP3,
|
|
VAG,
|
|
HEVAG,
|
|
XMA,
|
|
AAC,
|
|
GCADPCM,
|
|
ATRAC9
|
|
}
|
|
}
|