122 lines
4.1 KiB
C#
122 lines
4.1 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using AssetStudio.PInvoke;
|
|
|
|
namespace ACLLibs
|
|
{
|
|
public struct DecompressedClip
|
|
{
|
|
public IntPtr Values;
|
|
public int ValuesCount;
|
|
public IntPtr Times;
|
|
public int TimesCount;
|
|
}
|
|
public static class ACL
|
|
{
|
|
private const string DLL_NAME = "acl";
|
|
static ACL()
|
|
{
|
|
DllLoader.PreloadDll(DLL_NAME);
|
|
}
|
|
public static void DecompressAll(byte[] data, out float[] values, out float[] times)
|
|
{
|
|
var decompressedClip = new DecompressedClip();
|
|
DecompressAll(data, ref decompressedClip);
|
|
|
|
values = new float[decompressedClip.ValuesCount];
|
|
Marshal.Copy(decompressedClip.Values, values, 0, decompressedClip.ValuesCount);
|
|
|
|
times = new float[decompressedClip.TimesCount];
|
|
Marshal.Copy(decompressedClip.Times, times, 0, decompressedClip.TimesCount);
|
|
|
|
Dispose(ref decompressedClip);
|
|
}
|
|
|
|
#region importfunctions
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
|
|
private static extern void DecompressAll(byte[] data, ref DecompressedClip decompressedClip);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
|
|
private static extern void Dispose(ref DecompressedClip decompressedClip);
|
|
|
|
#endregion
|
|
}
|
|
|
|
public static class SRACL
|
|
{
|
|
private const string DLL_NAME = "sracl";
|
|
static SRACL()
|
|
{
|
|
DllLoader.PreloadDll(DLL_NAME);
|
|
}
|
|
public static void DecompressAll(byte[] data, out float[] values, out float[] times)
|
|
{
|
|
var decompressedClip = new DecompressedClip();
|
|
DecompressAll(data, ref decompressedClip);
|
|
|
|
values = new float[decompressedClip.ValuesCount];
|
|
Marshal.Copy(decompressedClip.Values, values, 0, decompressedClip.ValuesCount);
|
|
|
|
times = new float[decompressedClip.TimesCount];
|
|
Marshal.Copy(decompressedClip.Times, times, 0, decompressedClip.TimesCount);
|
|
|
|
Dispose(ref decompressedClip);
|
|
}
|
|
|
|
#region importfunctions
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
|
|
private static extern void DecompressAll(byte[] data, ref DecompressedClip decompressedClip);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
|
|
private static extern void Dispose(ref DecompressedClip decompressedClip);
|
|
|
|
#endregion
|
|
}
|
|
|
|
public static class DBACL
|
|
{
|
|
private const string DLL_NAME = "acldb";
|
|
static DBACL()
|
|
{
|
|
DllLoader.PreloadDll(DLL_NAME);
|
|
}
|
|
public static void DecompressTracks(byte[] data, byte[] db, out float[] values, out float[] times)
|
|
{
|
|
var decompressedClip = new DecompressedClip();
|
|
|
|
var dataPtr = Marshal.AllocHGlobal(data.Length + 8);
|
|
var dataAligned = new IntPtr(16 * (((long)dataPtr + 15) / 16));
|
|
Marshal.Copy(data, 0, dataPtr, data.Length);
|
|
|
|
var dbPtr = Marshal.AllocHGlobal(db.Length + 8);
|
|
var dbAligned = new IntPtr(16 * (((long)dbPtr + 15) / 16));
|
|
Marshal.Copy(db, 0, dbAligned, db.Length);
|
|
|
|
DecompressTracks(dataAligned, dbAligned, ref decompressedClip);
|
|
|
|
Marshal.FreeHGlobal(dataPtr);
|
|
Marshal.FreeHGlobal(dbPtr);
|
|
|
|
values = new float[decompressedClip.ValuesCount];
|
|
Marshal.Copy(decompressedClip.Values, values, 0, decompressedClip.ValuesCount);
|
|
|
|
times = new float[decompressedClip.TimesCount];
|
|
Marshal.Copy(decompressedClip.Times, times, 0, decompressedClip.TimesCount);
|
|
|
|
Dispose(ref decompressedClip);
|
|
}
|
|
|
|
#region importfunctions
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
|
|
private static extern void DecompressTracks(nint data, nint db, ref DecompressedClip decompressedClip);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)]
|
|
private static extern void Dispose(ref DecompressedClip decompressedClip);
|
|
|
|
#endregion
|
|
}
|
|
}
|