diff --git a/Client/src/main/java/org/runite/client/CacheIndex.java b/Client/src/main/java/org/runite/client/CacheIndex.java index b2933d043..973166518 100644 --- a/Client/src/main/java/org/runite/client/CacheIndex.java +++ b/Client/src/main/java/org/runite/client/CacheIndex.java @@ -21,7 +21,7 @@ public final class CacheIndex { static CacheIndex skinsIndex; static CacheIndex configurationsIndex; static CacheIndex interfacesIndex; - static CacheIndex soundFXIndex; + public static CacheIndex soundFXIndex; static CacheIndex landscapesIndex; static CacheIndex modelsIndex; static CacheIndex texturesIndex; diff --git a/Client/src/main/java/org/runite/client/Class3_Sub24_Sub1.java b/Client/src/main/java/org/runite/client/Class3_Sub24_Sub1.java index ea50353ae..993c8a198 100644 --- a/Client/src/main/java/org/runite/client/Class3_Sub24_Sub1.java +++ b/Client/src/main/java/org/runite/client/Class3_Sub24_Sub1.java @@ -26,7 +26,7 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { PcmSound var4 = (PcmSound)this.aSound_2544; int var5 = this.anInt3473 << 8; int var6 = this.anInt3482 << 8; - int var7 = var4.aByteArray3030.length << 8; + int var7 = var4.samples.length << 8; int var8 = var6 - var5; if(var8 <= 0) { this.anInt3479 = 0; @@ -57,7 +57,7 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { if(this.anInt3479 < 0) { if(this.aBoolean3477) { if(this.anInt3470 < 0) { - var9 = this.method436(var1, var2, var5, var3, var4.aByteArray3030[this.anInt3473]); + var9 = this.method436(var1, var2, var5, var3, var4.samples[this.anInt3473]); if(this.anInt3474 >= var5) { return; } @@ -67,14 +67,14 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { } while(true) { - var9 = this.method418(var1, var9, var6, var3, var4.aByteArray3030[this.anInt3482 - 1]); + var9 = this.method418(var1, var9, var6, var3, var4.samples[this.anInt3482 - 1]); if(this.anInt3474 < var6) { return; } this.anInt3474 = var6 + var6 - 1 - this.anInt3474; this.anInt3470 = -this.anInt3470; - var9 = this.method436(var1, var9, var5, var3, var4.aByteArray3030[this.anInt3473]); + var9 = this.method436(var1, var9, var5, var3, var4.samples[this.anInt3473]); if(this.anInt3474 >= var5) { return; } @@ -84,7 +84,7 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { } } else if(this.anInt3470 < 0) { while(true) { - var9 = this.method436(var1, var9, var5, var3, var4.aByteArray3030[this.anInt3482 - 1]); + var9 = this.method436(var1, var9, var5, var3, var4.samples[this.anInt3482 - 1]); if(this.anInt3474 >= var5) { return; } @@ -93,7 +93,7 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { } } else { while(true) { - var9 = this.method418(var1, var9, var6, var3, var4.aByteArray3030[this.anInt3473]); + var9 = this.method418(var1, var9, var6, var3, var4.samples[this.anInt3473]); if(this.anInt3474 < var6) { return; } @@ -106,7 +106,7 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { if(this.aBoolean3477) { label134: { if(this.anInt3470 < 0) { - var9 = this.method436(var1, var2, var5, var3, var4.aByteArray3030[this.anInt3473]); + var9 = this.method436(var1, var2, var5, var3, var4.samples[this.anInt3473]); if(this.anInt3474 >= var5) { return; } @@ -119,7 +119,7 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { } do { - var9 = this.method418(var1, var9, var6, var3, var4.aByteArray3030[this.anInt3482 - 1]); + var9 = this.method418(var1, var9, var6, var3, var4.samples[this.anInt3482 - 1]); if(this.anInt3474 < var6) { return; } @@ -130,7 +130,7 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { break; } - var9 = this.method436(var1, var9, var5, var3, var4.aByteArray3030[this.anInt3473]); + var9 = this.method436(var1, var9, var5, var3, var4.samples[this.anInt3473]); if(this.anInt3474 >= var5) { return; } @@ -143,7 +143,7 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { int var10; if(this.anInt3470 < 0) { while(true) { - var9 = this.method436(var1, var9, var5, var3, var4.aByteArray3030[this.anInt3482 - 1]); + var9 = this.method436(var1, var9, var5, var3, var4.samples[this.anInt3482 - 1]); if(this.anInt3474 >= var5) { return; } @@ -160,7 +160,7 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { } } else { while(true) { - var9 = this.method418(var1, var9, var6, var3, var4.aByteArray3030[this.anInt3473]); + var9 = this.method418(var1, var9, var6, var3, var4.samples[this.anInt3473]); if(this.anInt3474 < var6) { return; } @@ -319,14 +319,14 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { this.anInt3480 += var2; if(this.anInt3470 == 256 && (this.anInt3474 & 0xFF) == 0) { if(AudioChannel.stereo) { - var2 = method426(((PcmSound)this.aSound_2544).aByteArray3030, var1, this.anInt3474, var2, this.anInt3484, this.anInt3481, this.anInt3475, this.anInt3483, var6, var3, this); + var2 = method426(((PcmSound)this.aSound_2544).samples, var1, this.anInt3474, var2, this.anInt3484, this.anInt3481, this.anInt3475, this.anInt3483, var6, var3, this); } else { - var2 = method428(((PcmSound)this.aSound_2544).aByteArray3030, var1, this.anInt3474, var2, this.anInt3476, this.anInt3472, var6, var3, this); + var2 = method428(((PcmSound)this.aSound_2544).samples, var1, this.anInt3474, var2, this.anInt3476, this.anInt3472, var6, var3, this); } } else if(AudioChannel.stereo) { - var2 = method421(((PcmSound)this.aSound_2544).aByteArray3030, var1, this.anInt3474, var2, this.anInt3484, this.anInt3481, this.anInt3475, this.anInt3483, var6, var3, this, this.anInt3470, var5); + var2 = method421(((PcmSound)this.aSound_2544).samples, var1, this.anInt3474, var2, this.anInt3484, this.anInt3481, this.anInt3475, this.anInt3483, var6, var3, this, this.anInt3470, var5); } else { - var2 = method422(((PcmSound)this.aSound_2544).aByteArray3030, var1, this.anInt3474, var2, this.anInt3476, this.anInt3472, var6, var3, this, this.anInt3470, var5); + var2 = method422(((PcmSound)this.aSound_2544).samples, var1, this.anInt3474, var2, this.anInt3476, this.anInt3472, var6, var3, this, this.anInt3470, var5); } this.anInt3480 -= var2; @@ -343,17 +343,17 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { if(this.anInt3470 == 256 && (this.anInt3474 & 0xFF) == 0) { if(AudioChannel.stereo) { - return method420(((PcmSound)this.aSound_2544).aByteArray3030, var1, this.anInt3474, var2, this.anInt3484, this.anInt3481, var4, var3, this); + return method420(((PcmSound)this.aSound_2544).samples, var1, this.anInt3474, var2, this.anInt3484, this.anInt3481, var4, var3, this); } - return method424(((PcmSound)this.aSound_2544).aByteArray3030, var1, this.anInt3474, var2, this.anInt3476, var4, var3, this); + return method424(((PcmSound)this.aSound_2544).samples, var1, this.anInt3474, var2, this.anInt3476, var4, var3, this); } if(AudioChannel.stereo) { - return method433(((PcmSound)this.aSound_2544).aByteArray3030, var1, this.anInt3474, var2, this.anInt3484, this.anInt3481, var4, var3, this, this.anInt3470, var5); + return method433(((PcmSound)this.aSound_2544).samples, var1, this.anInt3474, var2, this.anInt3484, this.anInt3481, var4, var3, this, this.anInt3470, var5); } - return method455(((PcmSound)this.aSound_2544).aByteArray3030, var1, this.anInt3474, var2, this.anInt3476, var4, var3, this, this.anInt3470, var5); + return method455(((PcmSound)this.aSound_2544).samples, var1, this.anInt3474, var2, this.anInt3476, var4, var3, this, this.anInt3470, var5); } } @@ -365,9 +365,9 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { int var1 = this.anInt3476 * 3 >> 6; var1 = (var1 ^ var1 >> 31) + (var1 >>> 31); if(this.anInt3479 == 0) { - var1 -= var1 * this.anInt3474 / (((PcmSound)this.aSound_2544).aByteArray3030.length << 8); + var1 -= var1 * this.anInt3474 / (((PcmSound)this.aSound_2544).samples.length << 8); } else if(this.anInt3479 >= 0) { - var1 -= var1 * this.anInt3473 / ((PcmSound)this.aSound_2544).aByteArray3030.length; + var1 -= var1 * this.anInt3473 / ((PcmSound)this.aSound_2544).samples.length; } return var1 > 255?255:var1; @@ -736,7 +736,7 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { PcmSound var2 = (PcmSound)this.aSound_2544; int var3 = this.anInt3473 << 8; int var4 = this.anInt3482 << 8; - int var5 = var2.aByteArray3030.length << 8; + int var5 = var2.samples.length << 8; int var6 = var4 - var3; if(var6 <= 0) { this.anInt3479 = 0; @@ -898,7 +898,7 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { } static Class3_Sub24_Sub1 method432(PcmSound var0, int var1, int var2, int var3) { - return var0.aByteArray3030 != null && var0.aByteArray3030.length != 0?new Class3_Sub24_Sub1(var0, var1, var2, var3):null; + return var0.samples != null && var0.samples.length != 0?new Class3_Sub24_Sub1(var0, var1, var2, var3):null; } final Class3_Sub24 method411() { @@ -947,7 +947,7 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { } final synchronized void method434(int var1) { - int var2 = ((PcmSound)this.aSound_2544).aByteArray3030.length << 8; + int var2 = ((PcmSound)this.aSound_2544).samples.length << 8; if(var1 < -1) { var1 = -1; } @@ -1033,14 +1033,14 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { this.anInt3480 += var2; if(this.anInt3470 == -256 && (this.anInt3474 & 0xFF) == 0) { if(AudioChannel.stereo) { - var2 = method435(((PcmSound)this.aSound_2544).aByteArray3030, var1, this.anInt3474, var2, this.anInt3484, this.anInt3481, this.anInt3475, this.anInt3483, var6, var3, this); + var2 = method435(((PcmSound)this.aSound_2544).samples, var1, this.anInt3474, var2, this.anInt3484, this.anInt3481, this.anInt3475, this.anInt3483, var6, var3, this); } else { - var2 = method427(((PcmSound)this.aSound_2544).aByteArray3030, var1, this.anInt3474, var2, this.anInt3476, this.anInt3472, var6, var3, this); + var2 = method427(((PcmSound)this.aSound_2544).samples, var1, this.anInt3474, var2, this.anInt3476, this.anInt3472, var6, var3, this); } } else if(AudioChannel.stereo) { - var2 = method440(((PcmSound)this.aSound_2544).aByteArray3030, var1, this.anInt3474, var2, this.anInt3484, this.anInt3481, this.anInt3475, this.anInt3483, var6, var3, this, this.anInt3470, var5); + var2 = method440(((PcmSound)this.aSound_2544).samples, var1, this.anInt3474, var2, this.anInt3484, this.anInt3481, this.anInt3475, this.anInt3483, var6, var3, this, this.anInt3470, var5); } else { - var2 = method448(((PcmSound)this.aSound_2544).aByteArray3030, var1, this.anInt3474, var2, this.anInt3476, this.anInt3472, var6, var3, this, this.anInt3470, var5); + var2 = method448(((PcmSound)this.aSound_2544).samples, var1, this.anInt3474, var2, this.anInt3476, this.anInt3472, var6, var3, this, this.anInt3470, var5); } this.anInt3480 -= var2; @@ -1057,22 +1057,22 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { if(this.anInt3470 == -256 && (this.anInt3474 & 0xFF) == 0) { if(AudioChannel.stereo) { - return method447(((PcmSound)this.aSound_2544).aByteArray3030, var1, this.anInt3474, var2, this.anInt3484, this.anInt3481, var4, var3, this); + return method447(((PcmSound)this.aSound_2544).samples, var1, this.anInt3474, var2, this.anInt3484, this.anInt3481, var4, var3, this); } - return method446(((PcmSound)this.aSound_2544).aByteArray3030, var1, this.anInt3474, var2, this.anInt3476, var4, var3, this); + return method446(((PcmSound)this.aSound_2544).samples, var1, this.anInt3474, var2, this.anInt3476, var4, var3, this); } if(AudioChannel.stereo) { - return method453(((PcmSound)this.aSound_2544).aByteArray3030, var1, this.anInt3474, var2, this.anInt3484, this.anInt3481, var4, var3, this, this.anInt3470, var5); + return method453(((PcmSound)this.aSound_2544).samples, var1, this.anInt3474, var2, this.anInt3484, this.anInt3481, var4, var3, this, this.anInt3470, var5); } - return method423(((PcmSound)this.aSound_2544).aByteArray3030, var1, this.anInt3474, var2, this.anInt3476, var4, var3, this, this.anInt3470, var5); + return method423(((PcmSound)this.aSound_2544).samples, var1, this.anInt3474, var2, this.anInt3476, var4, var3, this, this.anInt3470, var5); } } static Class3_Sub24_Sub1 method437(PcmSound var0, int var2) { - return var0.aByteArray3030 != null && var0.aByteArray3030.length != 0?new Class3_Sub24_Sub1(var0, (int)((long)var0.anInt3034 * 256L * (long) 100 / (long)(100 * Class21.sampleRate)), var2 << 6):null; + return var0.samples != null && var0.samples.length != 0?new Class3_Sub24_Sub1(var0, (int)((long)var0.frequency * 256L * (long) 100 / (long)(100 * Class21.sampleRate)), var2 << 6):null; } final synchronized int method438() { @@ -1162,7 +1162,7 @@ final class Class3_Sub24_Sub1 extends Class3_Sub24 { } final boolean method444() { - return this.anInt3474 < 0 || this.anInt3474 >= ((PcmSound)this.aSound_2544).aByteArray3030.length << 8; + return this.anInt3474 < 0 || this.anInt3474 >= ((PcmSound)this.aSound_2544).samples.length << 8; } final boolean method445() { diff --git a/Client/src/main/java/org/runite/client/Class3_Sub24_Sub4.java b/Client/src/main/java/org/runite/client/Class3_Sub24_Sub4.java index 7b2cf199f..227346483 100644 --- a/Client/src/main/java/org/runite/client/Class3_Sub24_Sub4.java +++ b/Client/src/main/java/org/runite/client/Class3_Sub24_Sub4.java @@ -1088,7 +1088,7 @@ final class Class3_Sub24_Sub4 extends Class3_Sub24 { var3 += (int)((double)var5 * var7); } - var5 = (int)(0.5D + (double)(256 * var2.aPcmSound_2509.anInt3034) * Math.pow(2.0D, (double)var3 * 3.255208333333333E-4D) / (double)Class21.sampleRate); + var5 = (int)(0.5D + (double)(256 * var2.aPcmSound_2509.frequency) * Math.pow(2.0D, (double)var3 * 3.255208333333333E-4D) / (double)Class21.sampleRate); return var5 >= 1?var5:1; } catch (RuntimeException var9) { @@ -1132,7 +1132,7 @@ final class Class3_Sub24_Sub4 extends Class3_Sub24 { final void method501(Class3_Sub22 var1, boolean var2, byte var3) { try { - int var4 = var1.aPcmSound_2509.aByteArray3030.length; + int var4 = var1.aPcmSound_2509.samples.length; int var5; if(var2 && var1.aPcmSound_2509.aBoolean3031) { int var6 = var4 + (var4 - var1.aPcmSound_2509.anInt3033); diff --git a/Client/src/main/java/org/runite/client/Class83.java b/Client/src/main/java/org/runite/client/Class83.java index a2725e4e8..1b23dad7c 100644 --- a/Client/src/main/java/org/runite/client/Class83.java +++ b/Client/src/main/java/org/runite/client/Class83.java @@ -976,7 +976,7 @@ public final class Class83 { var8 = var9.toPCMSound(); this.aHashTable_1159.put(var6, var8); if (var1 != null) { - var1[0] -= var8.aByteArray3030.length; + var1[0] -= var8.samples.length; } return var8; diff --git a/Client/src/main/java/org/runite/client/PcmSound.java b/Client/src/main/java/org/runite/client/PcmSound.java index a2defff93..f29e51b7b 100644 --- a/Client/src/main/java/org/runite/client/PcmSound.java +++ b/Client/src/main/java/org/runite/client/PcmSound.java @@ -1,17 +1,17 @@ package org.runite.client; -final class PcmSound extends Sound { +public final class PcmSound extends Sound { - byte[] aByteArray3030; + public byte[] samples; boolean aBoolean3031; int anInt3032; int anInt3033; - int anInt3034; + public int frequency; final PcmSound method151(Class157 var1) { - this.aByteArray3030 = var1.method2173(this.aByteArray3030); - this.anInt3034 = var1.method2177(this.anInt3034); + this.samples = var1.method2173(this.samples); + this.frequency = var1.method2177(this.frequency); if(this.anInt3033 == this.anInt3032) { this.anInt3033 = this.anInt3032 = var1.method2178(this.anInt3033); } else { @@ -26,15 +26,15 @@ final class PcmSound extends Sound { } PcmSound(byte[] var2, int var3, int var4) { - this.anInt3034 = 22050; - this.aByteArray3030 = var2; + this.frequency = 22050; + this.samples = var2; this.anInt3033 = var3; this.anInt3032 = var4; } PcmSound(int var1, byte[] var2, int var3, int var4, boolean var5) { - this.anInt3034 = var1; - this.aByteArray3030 = var2; + this.frequency = var1; + this.samples = var2; this.anInt3033 = var3; this.anInt3032 = var4; this.aBoolean3031 = var5; diff --git a/Client/src/main/java/org/runite/client/SynthSound.java b/Client/src/main/java/org/runite/client/SynthSound.java index 2006fb520..415769368 100644 --- a/Client/src/main/java/org/runite/client/SynthSound.java +++ b/Client/src/main/java/org/runite/client/SynthSound.java @@ -1,6 +1,6 @@ package org.runite.client; -final class SynthSound { +public final class SynthSound { private final SynthInstrument[] synthInstruments = new SynthInstrument[10]; private int end; @@ -20,7 +20,7 @@ final class SynthSound { this.end = buffer.readUnsignedShort(); } - static SynthSound create(CacheIndex var0, int var1, int var2) { + public static SynthSound create(CacheIndex var0, int var1, int var2) { byte[] var3 = var0.getFile(var1, var2); return var3 == null ? null : new SynthSound(new DataBuffer(var3)); } @@ -62,7 +62,7 @@ final class SynthSound { } } - final PcmSound toPCMSound() { + public final PcmSound toPCMSound() { byte[] var1 = this.getSamples(); return new PcmSound(var1, 22050 * this.start / 1000, 22050 * this.end / 1000); } diff --git a/Client/src/main/kotlin/org/rs09/client/console/DeveloperConsole.kt b/Client/src/main/kotlin/org/rs09/client/console/DeveloperConsole.kt index 14d2234b5..a7c2a8ed9 100644 --- a/Client/src/main/kotlin/org/rs09/client/console/DeveloperConsole.kt +++ b/Client/src/main/kotlin/org/rs09/client/console/DeveloperConsole.kt @@ -7,9 +7,16 @@ import org.rs09.client.rendering.RenderingUtils import org.rs09.client.rendering.Toolkit import org.runite.client.* import java.awt.event.KeyEvent +import java.io.ByteArrayInputStream; +import java.nio.file.FileSystems; +import java.nio.file.Files; import java.text.SimpleDateFormat import java.util.* import java.util.LinkedList +import javax.sound.sampled.AudioFileFormat; +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioInputStream +import javax.sound.sampled.AudioSystem; // TODO Escape characters in the string rendering - is this something we can do using RSString / the text renders? @@ -286,6 +293,30 @@ object DeveloperConsole { println("Error. Plays sound effect. Use: playsoundrange beginID endID delay") } } + "dumpsfx" -> { + if (argSize == 3) { + var beginID = if (clientCommand[1].toIntOrNull() == null) 0 else clientCommand[1].toInt() + var endID = if (clientCommand[2].toIntOrNull() == null) 0 else clientCommand[2].toInt() + Thread(object : Runnable { + override fun run() { + Files.createDirectories(FileSystems.getDefault().getPath("sfx")) + for (i in beginID..endID) { + val sfx = SynthSound.create(CacheIndex.soundFXIndex, i, 0).toPCMSound() + println("len of ${i}: ${sfx.samples.size}") + val out = Files.newOutputStream(FileSystems.getDefault().getPath("sfx", String.format("sfx_%05d.wav", i))) + val format = AudioFormat(AudioFormat.Encoding.PCM_SIGNED, sfx.frequency.toFloat(), 8, 1, 1, sfx.frequency.toFloat(), false) + AudioSystem.write( + AudioInputStream(ByteArrayInputStream(sfx.samples), format, sfx.samples.size.toLong()), + AudioFileFormat.Type.WAVE, + out) + out.close() + } + } + }).start() + } else { + println("Error. Dumps sound effects. Use: dumpsfx beginID endID") + } + } "playsong" -> { if (argSize in 2..8) { if (clientCommand[1].toIntOrNull() == null) {