import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("cd") @Implements("MusicSample") public class MusicSample extends Node { @ObfuscatedName("g") static byte[] field603; @ObfuscatedName("l") static int field604; @ObfuscatedName("e") static int field605; @ObfuscatedName("x") static int field606; @ObfuscatedName("d") static int field607; @ObfuscatedName("k") @ObfuscatedSignature( signature = "[Lcc;" ) static class98[] field1323; @ObfuscatedName("n") @ObfuscatedSignature( signature = "[Lca;" ) static class102[] field1324; @ObfuscatedName("i") @ObfuscatedSignature( signature = "[Lda;" ) static class109[] field1344; @ObfuscatedName("a") @ObfuscatedSignature( signature = "[Ldg;" ) static class114[] field1326; @ObfuscatedName("z") static boolean[] field608; @ObfuscatedName("j") static int[] field609; @ObfuscatedName("s") static boolean field610; @ObfuscatedName("c") static float[] field611; @ObfuscatedName("r") static float[] field612; @ObfuscatedName("p") static float[] field613; @ObfuscatedName("v") static float[] field614; @ObfuscatedName("ag") static float[] field615; @ObfuscatedName("aq") static float[] field616; @ObfuscatedName("aj") static float[] field617; @ObfuscatedName("av") static int[] field618; @ObfuscatedName("ar") static int[] field619; @ObfuscatedName("m") byte[][] field620; @ObfuscatedName("f") @Export("sampleRate") int sampleRate; @ObfuscatedName("q") @Export("sampleCount") int sampleCount; @ObfuscatedName("w") @Export("start") int start; @ObfuscatedName("o") @Export("end") int end; @ObfuscatedName("u") boolean field621; @ObfuscatedName("t") float[] field622; @ObfuscatedName("y") int field623; @ObfuscatedName("h") int field624; @ObfuscatedName("b") boolean field625; @ObfuscatedName("ac") @Export("samples") byte[] samples; @ObfuscatedName("ay") int field626; @ObfuscatedName("ah") int field627; MusicSample(byte[] var1) { this.read(var1); } @ObfuscatedName("o") @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.field621 = true; } int var3 = var2.readInt(); this.field620 = 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.method46(var7, 0, var5); this.field620[var4] = var7; } } @ObfuscatedName("g") float[] method225(int var1) { method2337(this.field620[var1], 0); method2338(); int var2 = method2352(WorldMapCacheName.method634(field609.length - 1)); boolean var3 = field608[var2]; int var4 = var3 ? field607 : field606; boolean var5 = false; boolean var6 = false; if (var3) { var5 = method2338() != 0; var6 = method2338() != 0; } int var7 = var4 >> 1; int var8; int var9; int var10; if (var3 && !var5) { var8 = (var4 >> 2) - (field606 >> 2); var9 = (field606 >> 2) + (var4 >> 2); var10 = field606 >> 1; } else { var8 = 0; var9 = var7; var10 = var4 >> 1; } int var11; int var12; int var13; if (var3 && !var6) { var11 = var4 - (var4 >> 2) - (field606 >> 2); var12 = (field606 >> 2) + (var4 - (var4 >> 2)); var13 = field606 >> 1; } else { var11 = var7; var12 = var4; var13 = var4 >> 1; } class114 var14 = field1326[field609[var2]]; int var15 = var14.field1454; int var16 = var14.field1452[var15]; boolean var17 = !field1324[var16].method2367(); boolean var18 = var17; for (var16 = 0; var16 < var14.field1453; ++var16) { class109 var19 = field1344[var14.field1455[var16]]; float[] var20 = field611; var19.method2473(var20, var4 >> 1, var18); } int var48; if (!var17) { var16 = var14.field1454; var48 = var14.field1452[var16]; field1324[var48].method2375(field611, var4 >> 1); } float[] var21; int var22; int var49; if (var17) { for (var16 = var4 >> 1; var16 < var4; ++var16) { field611[var16] = 0.0F; } } else { var16 = var4 >> 1; var48 = var4 >> 2; var49 = var4 >> 3; var21 = field611; for (var22 = 0; var22 < var16; ++var22) { var21[var22] *= 0.5F; } for (var22 = var16; var22 < var4; ++var22) { var21[var22] = -var21[var4 - var22 - 1]; } float[] var23 = var3 ? field615 : field612; float[] var24 = var3 ? field616 : field613; float[] var25 = var3 ? field617 : field614; int[] var26 = var3 ? field619 : field618; int var27; float var28; float var29; float var30; float var31; for (var27 = 0; var27 < var48; ++var27) { var28 = var21[var27 * 4] - var21[var4 - var27 * 4 - 1]; var29 = var21[var27 * 4 + 2] - var21[var4 - var27 * 4 - 3]; var30 = var23[var27 * 2]; var31 = var23[var27 * 2 + 1]; var21[var4 - var27 * 4 - 1] = var28 * var30 - var29 * var31; var21[var4 - var27 * 4 - 3] = var28 * var31 + var29 * var30; } float var32; float var33; for (var27 = 0; var27 < var49; ++var27) { var28 = var21[var16 + var27 * 4 + 3]; var29 = var21[var16 + var27 * 4 + 1]; var30 = var21[var27 * 4 + 3]; var31 = var21[var27 * 4 + 1]; var21[var16 + var27 * 4 + 3] = var28 + var30; var21[var16 + var27 * 4 + 1] = var29 + var31; var32 = var23[var16 - 4 - var27 * 4]; var33 = var23[var16 - 3 - var27 * 4]; var21[var27 * 4 + 3] = (var28 - var30) * var32 - (var29 - var31) * var33; var21[var27 * 4 + 1] = (var29 - var31) * var32 + (var28 - var30) * var33; } var27 = WorldMapCacheName.method634(var4 - 1); int var34; int var35; int var36; int var37; for (var34 = 0; var34 < var27 - 3; ++var34) { var35 = var4 >> var34 + 2; var36 = 8 << var34; for (var37 = 0; var37 < 2 << var34; ++var37) { int var38 = var4 - var35 * var37 * 2; int var39 = var4 - var35 * (var37 * 2 + 1); for (int var40 = 0; var40 < var4 >> var34 + 4; ++var40) { int var41 = var40 * 4; float var42 = var21[var38 - 1 - var41]; float var43 = var21[var38 - 3 - var41]; float var44 = var21[var39 - 1 - var41]; float var45 = var21[var39 - 3 - var41]; var21[var38 - 1 - var41] = var42 + var44; var21[var38 - 3 - var41] = var43 + var45; float var46 = var23[var40 * var36]; float var47 = var23[var40 * var36 + 1]; var21[var39 - 1 - var41] = (var42 - var44) * var46 - (var43 - var45) * var47; var21[var39 - 3 - var41] = (var43 - var45) * var46 + (var42 - var44) * var47; } } } for (var34 = 1; var34 < var49 - 1; ++var34) { var35 = var26[var34]; if (var34 < var35) { var36 = var34 * 8; var37 = var35 * 8; var32 = var21[var36 + 1]; var21[var36 + 1] = var21[var37 + 1]; var21[var37 + 1] = var32; var32 = var21[var36 + 3]; var21[var36 + 3] = var21[var37 + 3]; var21[var37 + 3] = var32; var32 = var21[var36 + 5]; var21[var36 + 5] = var21[var37 + 5]; var21[var37 + 5] = var32; var32 = var21[var36 + 7]; var21[var36 + 7] = var21[var37 + 7]; var21[var37 + 7] = var32; } } for (var34 = 0; var34 < var16; ++var34) { var21[var34] = var21[var34 * 2 + 1]; } for (var34 = 0; var34 < var49; ++var34) { var21[var4 - 1 - var34 * 2] = var21[var34 * 4]; var21[var4 - 2 - var34 * 2] = var21[var34 * 4 + 1]; var21[var4 - var48 - 1 - var34 * 2] = var21[var34 * 4 + 2]; var21[var4 - var48 - 2 - var34 * 2] = var21[var34 * 4 + 3]; } for (var34 = 0; var34 < var49; ++var34) { var29 = var25[var34 * 2]; var30 = var25[var34 * 2 + 1]; var31 = var21[var16 + var34 * 2]; var32 = var21[var16 + var34 * 2 + 1]; var33 = var21[var4 - 2 - var34 * 2]; float var51 = var21[var4 - 1 - var34 * 2]; float var52 = var30 * (var31 - var33) + var29 * (var32 + var51); var21[var16 + var34 * 2] = (var31 + var33 + var52) * 0.5F; var21[var4 - 2 - var34 * 2] = (var31 + var33 - var52) * 0.5F; var52 = var30 * (var32 + var51) - var29 * (var31 - var33); var21[var16 + var34 * 2 + 1] = (var32 - var51 + var52) * 0.5F; var21[var4 - 1 - var34 * 2] = (-var32 + var51 + var52) * 0.5F; } for (var34 = 0; var34 < var48; ++var34) { var21[var34] = var21[var16 + var34 * 2] * var24[var34 * 2] + var21[var16 + var34 * 2 + 1] * var24[var34 * 2 + 1]; var21[var16 - 1 - var34] = var21[var16 + var34 * 2] * var24[var34 * 2 + 1] - var21[var16 + var34 * 2 + 1] * var24[var34 * 2]; } for (var34 = 0; var34 < var48; ++var34) { var21[var34 + (var4 - var48)] = -var21[var34]; } for (var34 = 0; var34 < var48; ++var34) { var21[var34] = var21[var48 + var34]; } for (var34 = 0; var34 < var48; ++var34) { var21[var48 + var34] = -var21[var48 - var34 - 1]; } for (var34 = 0; var34 < var48; ++var34) { var21[var16 + var34] = var21[var4 - var34 - 1]; } float[] var10000; for (var34 = var8; var34 < var9; ++var34) { var29 = (float)Math.sin(((double)(var34 - var8) + 0.5D) / (double)var10 * 0.5D * 3.141592653589793D); var10000 = field611; var10000[var34] *= (float)Math.sin(1.5707963267948966D * (double)var29 * (double)var29); } for (var34 = var11; var34 < var12; ++var34) { var29 = (float)Math.sin(((double)(var34 - var11) + 0.5D) / (double)var13 * 0.5D * 3.141592653589793D + 1.5707963267948966D); var10000 = field611; var10000[var34] *= (float)Math.sin(1.5707963267948966D * (double)var29 * (double)var29); } } var21 = null; if (this.field623 > 0) { var48 = var4 + this.field623 >> 2; var21 = new float[var48]; if (!this.field625) { for (var49 = 0; var49 < this.field624; ++var49) { var22 = var49 + (this.field623 >> 1); var21[var49] += this.field622[var22]; } } if (!var17) { for (var49 = var8; var49 < var4 >> 1; ++var49) { var22 = var21.length - (var4 >> 1) + var49; var21[var22] += field611[var49]; } } } float[] var50 = this.field622; this.field622 = field611; field611 = var50; this.field623 = var4; this.field624 = var12 - (var4 >> 1); this.field625 = var17; return var21; } @ObfuscatedName("x") @ObfuscatedSignature( signature = "([I)Lcx;" ) @Export("toRawSound") RawSound toRawSound(int[] var1) { if (var1 != null && var1[0] <= 0) { return null; } else { if (this.samples == null) { this.field623 = 0; this.field622 = new float[field607]; this.samples = new byte[this.sampleCount]; this.field626 = 0; this.field627 = 0; } for (; this.field627 < this.field620.length; ++this.field627) { if (var1 != null && var1[0] <= 0) { return null; } float[] var2 = this.method225(this.field627); if (var2 != null) { int var3 = this.field626; 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.field626; } this.field626 = var3; } } this.field622 = null; byte[] var7 = this.samples; this.samples = null; return new RawSound(this.sampleRate, var7, this.start, this.end, this.field621); } } @ObfuscatedName("m") static float method2357(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("f") static void method2337(byte[] var0, int var1) { field603 = var0; field604 = var1; field605 = 0; } @ObfuscatedName("q") static int method2338() { int var0 = field603[field604] >> field605 & 1; ++field605; field604 += field605 >> 3; field605 &= 7; return var0; } @ObfuscatedName("w") static int method2352(int var0) { int var1 = 0; int var2; int var3; for (var2 = 0; var0 >= 8 - field605; var0 -= var3) { var3 = 8 - field605; int var4 = (1 << var3) - 1; var1 += (field603[field604] >> field605 & var4) << var2; field605 = 0; ++field604; var2 += var3; } if (var0 > 0) { var3 = (1 << var0) - 1; var1 += (field603[field604] >> field605 & var3) << var2; field605 += var0; } return var1; } @ObfuscatedName("u") static void method2341(byte[] var0) { method2337(var0, 0); field606 = 1 << method2352(4); field607 = 1 << method2352(4); field611 = new float[field607]; int var1; int var2; int var3; int var4; int var5; for (var1 = 0; var1 < 2; ++var1) { var2 = var1 != 0 ? field607 : field606; 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[] var13 = new float[var3]; for (int var8 = 0; var8 < var4; ++var8) { var13[var8 * 2] = (float)Math.cos((double)(var8 * 2 + 1) * 3.141592653589793D / (double)(var2 * 2)); var13[var8 * 2 + 1] = (float)Math.sin((double)(var8 * 2 + 1) * 3.141592653589793D / (double)(var2 * 2)); } float[] var14 = new float[var4]; for (int var9 = 0; var9 < var5; ++var9) { var14[var9 * 2] = (float)Math.cos((double)(var9 * 4 + 2) * 3.141592653589793D / (double)var2); var14[var9 * 2 + 1] = -((float)Math.sin((double)(var9 * 4 + 2) * 3.141592653589793D / (double)var2)); } int[] var15 = new int[var5]; int var10 = WorldMapCacheName.method634(var5 - 1); for (int var11 = 0; var11 < var5; ++var11) { var15[var11] = GrandExchangeEvent.method87(var11, var10); } if (var1 != 0) { field615 = var6; field616 = var13; field617 = var14; field619 = var15; } else { field612 = var6; field613 = var13; field614 = var14; field618 = var15; } } var1 = method2352(8) + 1; field1323 = new class98[var1]; for (var2 = 0; var2 < var1; ++var2) { field1323[var2] = new class98(); } var2 = method2352(6) + 1; for (var3 = 0; var3 < var2; ++var3) { method2352(16); } var2 = method2352(6) + 1; field1324 = new class102[var2]; for (var3 = 0; var3 < var2; ++var3) { field1324[var3] = new class102(); } var3 = method2352(6) + 1; field1344 = new class109[var3]; for (var4 = 0; var4 < var3; ++var4) { field1344[var4] = new class109(); } var4 = method2352(6) + 1; field1326 = new class114[var4]; for (var5 = 0; var5 < var4; ++var5) { field1326[var5] = new class114(); } var5 = method2352(6) + 1; field608 = new boolean[var5]; field609 = new int[var5]; for (int var12 = 0; var12 < var5; ++var12) { field608[var12] = method2338() != 0; method2352(16); method2352(16); field609[var12] = method2352(8); } } @ObfuscatedName("l") @ObfuscatedSignature( signature = "(Lir;)Z" ) static boolean method2343(AbstractIndexCache var0) { if (!field610) { byte[] var1 = var0.takeRecord(0, 0); if (var1 == null) { return false; } method2341(var1); field610 = true; } return true; } @ObfuscatedName("e") @ObfuscatedSignature( signature = "(Lir;II)Lcd;" ) @Export("readMusicSample") static MusicSample readMusicSample(AbstractIndexCache var0, int var1, int var2) { if (!method2343(var0)) { var0.tryLoadRecord(var1, var2); return null; } else { byte[] var3 = var0.takeRecord(var1, var2); return var3 == null ? null : new MusicSample(var3); } } static { field610 = false; } }