Files
runelite/runescape-client/src/main/java/VorbisSample.java
Owain van Brakel 6485eb9bed project: Rev 182
2019-08-29 16:17:19 +02:00

648 lines
17 KiB
Java

import net.runelite.mapping.Export;
import net.runelite.mapping.Implements;
import net.runelite.mapping.ObfuscatedName;
import net.runelite.mapping.ObfuscatedSignature;
@ObfuscatedName("cs")
@Implements("VorbisSample")
public class VorbisSample extends Node {
@ObfuscatedName("t")
@Export("VorbisSample_bytes")
static byte[] VorbisSample_bytes;
@ObfuscatedName("q")
@Export("VorbisSample_byteOffset")
static int VorbisSample_byteOffset;
@ObfuscatedName("x")
@Export("VorbisSample_bitOffset")
static int VorbisSample_bitOffset;
@ObfuscatedName("d")
@Export("VorbisSample_blockSize0")
static int VorbisSample_blockSize0;
@ObfuscatedName("f")
@Export("VorbisSample_blockSize1")
static int VorbisSample_blockSize1;
@ObfuscatedName("c")
@ObfuscatedSignature(
signature = "[Lcx;"
)
@Export("VorbisSample_codebooks")
static VorbisCodebook[] VorbisSample_codebooks;
@ObfuscatedName("r")
@ObfuscatedSignature(
signature = "[Ldr;"
)
@Export("VorbisSample_floors")
static VorbisFloor[] VorbisSample_floors;
@ObfuscatedName("y")
@ObfuscatedSignature(
signature = "[Ldc;"
)
@Export("VorbisSample_residues")
static VorbisResidue[] VorbisSample_residues;
@ObfuscatedName("p")
@ObfuscatedSignature(
signature = "[Ldw;"
)
@Export("VorbisSample_mappings")
static VorbisMapping[] VorbisSample_mappings;
@ObfuscatedName("b")
@Export("VorbisSample_blockFlags")
static boolean[] VorbisSample_blockFlags;
@ObfuscatedName("g")
@Export("VorbisSample_mapping")
static int[] VorbisSample_mapping;
@ObfuscatedName("e")
static boolean field1345;
@ObfuscatedName("h")
static float[] field1329;
@ObfuscatedName("v")
static float[] field1330;
@ObfuscatedName("m")
static float[] field1343;
@ObfuscatedName("o")
static float[] field1353;
@ObfuscatedName("av")
static float[] field1354;
@ObfuscatedName("am")
static float[] field1355;
@ObfuscatedName("ai")
static float[] field1356;
@ObfuscatedName("af")
static int[] field1357;
@ObfuscatedName("az")
static int[] field1341;
@ObfuscatedName("s")
byte[][] field1348;
@ObfuscatedName("j")
@Export("sampleRate")
int sampleRate;
@ObfuscatedName("i")
@Export("sampleCount")
int sampleCount;
@ObfuscatedName("k")
@Export("start")
int start;
@ObfuscatedName("u")
@Export("end")
int end;
@ObfuscatedName("n")
boolean field1342;
@ObfuscatedName("z")
float[] field1346;
@ObfuscatedName("a")
int field1347;
@ObfuscatedName("w")
int field1335;
@ObfuscatedName("l")
boolean field1349;
@ObfuscatedName("aj")
@Export("samples")
byte[] samples;
@ObfuscatedName("an")
int field1360;
@ObfuscatedName("at")
int field1361;
static {
field1345 = false;
}
VorbisSample(byte[] var1) {
this.read(var1);
}
@ObfuscatedName("u")
@Export("read")
void read(byte[] var1) {
Buffer var2 = new Buffer(var1);
this.sampleRate = var2.readInt();
this.sampleCount = var2.readInt();
this.start = var2.readInt();
this.end = var2.readInt();
if (this.end < 0) {
this.end = ~this.end;
this.field1342 = true;
}
int var3 = var2.readInt();
this.field1348 = new byte[var3][];
for (int var4 = 0; var4 < var3; ++var4) {
int var5 = 0;
int var6;
do {
var6 = var2.readUnsignedByte();
var5 += var6;
} while(var6 >= 255);
byte[] var7 = new byte[var5];
var2.readBytes(var7, 0, var5);
this.field1348[var4] = var7;
}
}
@ObfuscatedName("t")
float[] method2282(int var1) {
VorbisSample_setData(this.field1348[var1], 0);
readBit();
int var2 = readBits(class160.iLog(VorbisSample_mapping.length - 1));
boolean var3 = VorbisSample_blockFlags[var2];
int var4 = var3 ? VorbisSample_blockSize1 : VorbisSample_blockSize0;
boolean var5 = false;
boolean var6 = false;
if (var3) {
var5 = readBit() != 0;
var6 = readBit() != 0;
}
int var7 = var4 >> 1;
int var8;
int var9;
int var10;
if (var3 && !var5) {
var8 = (var4 >> 2) - (VorbisSample_blockSize0 >> 2);
var9 = (VorbisSample_blockSize0 >> 2) + (var4 >> 2);
var10 = VorbisSample_blockSize0 >> 1;
} else {
var8 = 0;
var9 = var7;
var10 = var4 >> 1;
}
int var11;
int var12;
int var13;
if (var3 && !var6) {
var11 = var4 - (var4 >> 2) - (VorbisSample_blockSize0 >> 2);
var12 = (VorbisSample_blockSize0 >> 2) + (var4 - (var4 >> 2));
var13 = VorbisSample_blockSize0 >> 1;
} else {
var11 = var7;
var12 = var4;
var13 = var4 >> 1;
}
VorbisMapping var14 = VorbisSample_mappings[VorbisSample_mapping[var2]];
int var16 = var14.mappingMux;
int var17 = var14.submapFloor[var16];
boolean var15 = !VorbisSample_floors[var17].readSubmapFloor();
boolean var45 = var15;
for (var17 = 0; var17 < var14.submaps; ++var17) {
VorbisResidue var18 = VorbisSample_residues[var14.submapResidue[var17]];
float[] var19 = field1329;
var18.method2444(var19, var4 >> 1, var45);
}
int var40;
if (!var15) {
var17 = var14.mappingMux;
var40 = var14.submapFloor[var17];
VorbisSample_floors[var40].method2321(field1329, var4 >> 1);
}
int var42;
if (var15) {
for (var17 = var4 >> 1; var17 < var4; ++var17) {
field1329[var17] = 0.0F;
}
} else {
var17 = var4 >> 1;
var40 = var4 >> 2;
var42 = var4 >> 3;
float[] var43 = field1329;
int var21;
for (var21 = 0; var21 < var17; ++var21) {
var43[var21] *= 0.5F;
}
for (var21 = var17; var21 < var4; ++var21) {
var43[var21] = -var43[var4 - var21 - 1];
}
float[] var44 = var3 ? field1354 : field1330;
float[] var22 = var3 ? field1355 : field1343;
float[] var23 = var3 ? field1356 : field1353;
int[] var24 = var3 ? field1341 : field1357;
int var25;
float var26;
float var27;
float var28;
float var29;
for (var25 = 0; var25 < var40; ++var25) {
var26 = var43[var25 * 4] - var43[var4 - var25 * 4 - 1];
var27 = var43[var25 * 4 + 2] - var43[var4 - var25 * 4 - 3];
var28 = var44[var25 * 2];
var29 = var44[var25 * 2 + 1];
var43[var4 - var25 * 4 - 1] = var26 * var28 - var27 * var29;
var43[var4 - var25 * 4 - 3] = var26 * var29 + var27 * var28;
}
float var30;
float var31;
for (var25 = 0; var25 < var42; ++var25) {
var26 = var43[var17 + var25 * 4 + 3];
var27 = var43[var17 + var25 * 4 + 1];
var28 = var43[var25 * 4 + 3];
var29 = var43[var25 * 4 + 1];
var43[var17 + var25 * 4 + 3] = var26 + var28;
var43[var17 + var25 * 4 + 1] = var27 + var29;
var30 = var44[var17 - 4 - var25 * 4];
var31 = var44[var17 - 3 - var25 * 4];
var43[var25 * 4 + 3] = (var26 - var28) * var30 - (var27 - var29) * var31;
var43[var25 * 4 + 1] = (var27 - var29) * var30 + (var26 - var28) * var31;
}
var25 = class160.iLog(var4 - 1);
int var47;
int var48;
int var49;
int var50;
for (var47 = 0; var47 < var25 - 3; ++var47) {
var48 = var4 >> var47 + 2;
var49 = 8 << var47;
for (var50 = 0; var50 < 2 << var47; ++var50) {
int var51 = var4 - var48 * var50 * 2;
int var52 = var4 - var48 * (var50 * 2 + 1);
for (int var32 = 0; var32 < var4 >> var47 + 4; ++var32) {
int var33 = var32 * 4;
float var34 = var43[var51 - 1 - var33];
float var35 = var43[var51 - 3 - var33];
float var36 = var43[var52 - 1 - var33];
float var37 = var43[var52 - 3 - var33];
var43[var51 - 1 - var33] = var34 + var36;
var43[var51 - 3 - var33] = var35 + var37;
float var38 = var44[var32 * var49];
float var39 = var44[var32 * var49 + 1];
var43[var52 - 1 - var33] = (var34 - var36) * var38 - (var35 - var37) * var39;
var43[var52 - 3 - var33] = (var35 - var37) * var38 + (var34 - var36) * var39;
}
}
}
for (var47 = 1; var47 < var42 - 1; ++var47) {
var48 = var24[var47];
if (var47 < var48) {
var49 = var47 * 8;
var50 = var48 * 8;
var30 = var43[var49 + 1];
var43[var49 + 1] = var43[var50 + 1];
var43[var50 + 1] = var30;
var30 = var43[var49 + 3];
var43[var49 + 3] = var43[var50 + 3];
var43[var50 + 3] = var30;
var30 = var43[var49 + 5];
var43[var49 + 5] = var43[var50 + 5];
var43[var50 + 5] = var30;
var30 = var43[var49 + 7];
var43[var49 + 7] = var43[var50 + 7];
var43[var50 + 7] = var30;
}
}
for (var47 = 0; var47 < var17; ++var47) {
var43[var47] = var43[var47 * 2 + 1];
}
for (var47 = 0; var47 < var42; ++var47) {
var43[var4 - 1 - var47 * 2] = var43[var47 * 4];
var43[var4 - 2 - var47 * 2] = var43[var47 * 4 + 1];
var43[var4 - var40 - 1 - var47 * 2] = var43[var47 * 4 + 2];
var43[var4 - var40 - 2 - var47 * 2] = var43[var47 * 4 + 3];
}
for (var47 = 0; var47 < var42; ++var47) {
var27 = var23[var47 * 2];
var28 = var23[var47 * 2 + 1];
var29 = var43[var17 + var47 * 2];
var30 = var43[var17 + var47 * 2 + 1];
var31 = var43[var4 - 2 - var47 * 2];
float var53 = var43[var4 - 1 - var47 * 2];
float var54 = var28 * (var29 - var31) + var27 * (var30 + var53);
var43[var17 + var47 * 2] = (var29 + var31 + var54) * 0.5F;
var43[var4 - 2 - var47 * 2] = (var29 + var31 - var54) * 0.5F;
var54 = var28 * (var30 + var53) - var27 * (var29 - var31);
var43[var17 + var47 * 2 + 1] = (var30 - var53 + var54) * 0.5F;
var43[var4 - 1 - var47 * 2] = (-var30 + var53 + var54) * 0.5F;
}
for (var47 = 0; var47 < var40; ++var47) {
var43[var47] = var43[var17 + var47 * 2] * var22[var47 * 2] + var43[var17 + var47 * 2 + 1] * var22[var47 * 2 + 1];
var43[var17 - 1 - var47] = var43[var17 + var47 * 2] * var22[var47 * 2 + 1] - var43[var17 + var47 * 2 + 1] * var22[var47 * 2];
}
for (var47 = 0; var47 < var40; ++var47) {
var43[var47 + (var4 - var40)] = -var43[var47];
}
for (var47 = 0; var47 < var40; ++var47) {
var43[var47] = var43[var40 + var47];
}
for (var47 = 0; var47 < var40; ++var47) {
var43[var40 + var47] = -var43[var40 - var47 - 1];
}
for (var47 = 0; var47 < var40; ++var47) {
var43[var17 + var47] = var43[var4 - var47 - 1];
}
float[] var10000;
for (var47 = var8; var47 < var9; ++var47) {
var27 = (float)Math.sin(((double)(var47 - var8) + 0.5D) / (double)var10 * 0.5D * 3.141592653589793D);
var10000 = field1329;
var10000[var47] *= (float)Math.sin(1.5707963267948966D * (double)var27 * (double)var27);
}
for (var47 = var11; var47 < var12; ++var47) {
var27 = (float)Math.sin(((double)(var47 - var11) + 0.5D) / (double)var13 * 0.5D * 3.141592653589793D + 1.5707963267948966D);
var10000 = field1329;
var10000[var47] *= (float)Math.sin(1.5707963267948966D * (double)var27 * (double)var27);
}
}
float[] var41 = null;
if (this.field1347 > 0) {
var40 = var4 + this.field1347 >> 2;
var41 = new float[var40];
int var20;
if (!this.field1349) {
for (var42 = 0; var42 < this.field1335; ++var42) {
var20 = var42 + (this.field1347 >> 1);
var41[var42] += this.field1346[var20];
}
}
if (!var15) {
for (var42 = var8; var42 < var4 >> 1; ++var42) {
var20 = var41.length - (var4 >> 1) + var42;
var41[var20] += field1329[var42];
}
}
}
float[] var46 = this.field1346;
this.field1346 = field1329;
field1329 = var46;
this.field1347 = var4;
this.field1335 = var12 - (var4 >> 1);
this.field1349 = var15;
return var41;
}
@ObfuscatedName("d")
@ObfuscatedSignature(
signature = "([I)Lco;"
)
@Export("toRawSound")
RawSound toRawSound(int[] var1) {
if (var1 != null && var1[0] <= 0) {
return null;
} else {
if (this.samples == null) {
this.field1347 = 0;
this.field1346 = new float[VorbisSample_blockSize1];
this.samples = new byte[this.sampleCount];
this.field1360 = 0;
this.field1361 = 0;
}
for (; this.field1361 < this.field1348.length; ++this.field1361) {
if (var1 != null && var1[0] <= 0) {
return null;
}
float[] var2 = this.method2282(this.field1361);
if (var2 != null) {
int var3 = this.field1360;
int var4 = var2.length;
if (var4 > this.sampleCount - var3) {
var4 = this.sampleCount - var3;
}
for (int var5 = 0; var5 < var4; ++var5) {
int var6 = (int)(128.0F + var2[var5] * 128.0F);
if ((var6 & -256) != 0) {
var6 = ~var6 >> 31;
}
this.samples[var3++] = (byte)(var6 - 128);
}
if (var1 != null) {
var1[0] -= var3 - this.field1360;
}
this.field1360 = var3;
}
}
this.field1346 = null;
byte[] var7 = this.samples;
this.samples = null;
return new RawSound(this.sampleRate, var7, this.start, this.end, this.field1342);
}
}
@ObfuscatedName("s")
@Export("float32Unpack")
static float float32Unpack(int var0) {
int var1 = var0 & 2097151;
int var2 = var0 & Integer.MIN_VALUE;
int var3 = (var0 & 2145386496) >> 21;
if (var2 != 0) {
var1 = -var1;
}
return (float)((double)var1 * Math.pow(2.0D, (double)(var3 - 788)));
}
@ObfuscatedName("j")
@Export("VorbisSample_setData")
static void VorbisSample_setData(byte[] var0, int var1) {
VorbisSample_bytes = var0;
VorbisSample_byteOffset = var1;
VorbisSample_bitOffset = 0;
}
@ObfuscatedName("i")
@Export("readBit")
static int readBit() {
int var0 = VorbisSample_bytes[VorbisSample_byteOffset] >> VorbisSample_bitOffset & 1;
++VorbisSample_bitOffset;
VorbisSample_byteOffset += VorbisSample_bitOffset >> 3;
VorbisSample_bitOffset &= 7;
return var0;
}
@ObfuscatedName("k")
@Export("readBits")
static int readBits(int var0) {
int var1 = 0;
int var2;
int var3;
for (var2 = 0; var0 >= 8 - VorbisSample_bitOffset; var0 -= var3) {
var3 = 8 - VorbisSample_bitOffset;
int var4 = (1 << var3) - 1;
var1 += (VorbisSample_bytes[VorbisSample_byteOffset] >> VorbisSample_bitOffset & var4) << var2;
VorbisSample_bitOffset = 0;
++VorbisSample_byteOffset;
var2 += var3;
}
if (var0 > 0) {
var3 = (1 << var0) - 1;
var1 += (VorbisSample_bytes[VorbisSample_byteOffset] >> VorbisSample_bitOffset & var3) << var2;
VorbisSample_bitOffset += var0;
}
return var1;
}
@ObfuscatedName("n")
static void method2294(byte[] var0) {
VorbisSample_setData(var0, 0);
VorbisSample_blockSize0 = 1 << readBits(4);
VorbisSample_blockSize1 = 1 << readBits(4);
field1329 = new float[VorbisSample_blockSize1];
int var1;
int var2;
int var3;
int var4;
int var5;
for (var1 = 0; var1 < 2; ++var1) {
var2 = var1 != 0 ? VorbisSample_blockSize1 : VorbisSample_blockSize0;
var3 = var2 >> 1;
var4 = var2 >> 2;
var5 = var2 >> 3;
float[] var6 = new float[var3];
for (int var7 = 0; var7 < var4; ++var7) {
var6[var7 * 2] = (float)Math.cos((double)(var7 * 4) * 3.141592653589793D / (double)var2);
var6[var7 * 2 + 1] = -((float)Math.sin((double)(var7 * 4) * 3.141592653589793D / (double)var2));
}
float[] var12 = new float[var3];
for (int var8 = 0; var8 < var4; ++var8) {
var12[var8 * 2] = (float)Math.cos((double)(var8 * 2 + 1) * 3.141592653589793D / (double)(var2 * 2));
var12[var8 * 2 + 1] = (float)Math.sin((double)(var8 * 2 + 1) * 3.141592653589793D / (double)(var2 * 2));
}
float[] var13 = new float[var4];
for (int var9 = 0; var9 < var5; ++var9) {
var13[var9 * 2] = (float)Math.cos((double)(var9 * 4 + 2) * 3.141592653589793D / (double)var2);
var13[var9 * 2 + 1] = -((float)Math.sin((double)(var9 * 4 + 2) * 3.141592653589793D / (double)var2));
}
int[] var14 = new int[var5];
int var10 = class160.iLog(var5 - 1);
for (int var11 = 0; var11 < var5; ++var11) {
var14[var11] = WorldMapSection0.method215(var11, var10);
}
if (var1 != 0) {
field1354 = var6;
field1355 = var12;
field1356 = var13;
field1341 = var14;
} else {
field1330 = var6;
field1343 = var12;
field1353 = var13;
field1357 = var14;
}
}
var1 = readBits(8) + 1;
VorbisSample_codebooks = new VorbisCodebook[var1];
for (var2 = 0; var2 < var1; ++var2) {
VorbisSample_codebooks[var2] = new VorbisCodebook();
}
var2 = readBits(6) + 1;
for (var3 = 0; var3 < var2; ++var3) {
readBits(16);
}
var2 = readBits(6) + 1;
VorbisSample_floors = new VorbisFloor[var2];
for (var3 = 0; var3 < var2; ++var3) {
VorbisSample_floors[var3] = new VorbisFloor();
}
var3 = readBits(6) + 1;
VorbisSample_residues = new VorbisResidue[var3];
for (var4 = 0; var4 < var3; ++var4) {
VorbisSample_residues[var4] = new VorbisResidue();
}
var4 = readBits(6) + 1;
VorbisSample_mappings = new VorbisMapping[var4];
for (var5 = 0; var5 < var4; ++var5) {
VorbisSample_mappings[var5] = new VorbisMapping();
}
var5 = readBits(6) + 1;
VorbisSample_blockFlags = new boolean[var5];
VorbisSample_mapping = new int[var5];
for (int var15 = 0; var15 < var5; ++var15) {
VorbisSample_blockFlags[var15] = readBit() != 0;
readBits(16);
readBits(16);
VorbisSample_mapping[var15] = readBits(8);
}
}
@ObfuscatedName("q")
@ObfuscatedSignature(
signature = "(Lhz;)Z"
)
static boolean method2289(AbstractArchive var0) {
if (!field1345) {
byte[] var1 = var0.takeFile(0, 0);
if (var1 == null) {
return false;
}
method2294(var1);
field1345 = true;
}
return true;
}
@ObfuscatedName("x")
@ObfuscatedSignature(
signature = "(Lhz;II)Lcs;"
)
@Export("readMusicSample")
static VorbisSample readMusicSample(AbstractArchive var0, int var1, int var2) {
if (!method2289(var0)) {
var0.tryLoadFile(var1, var2);
return null;
} else {
byte[] var3 = var0.takeFile(var1, var2);
return var3 == null ? null : new VorbisSample(var3);
}
}
}