Server/Client/src/main/java/org/runite/client/AudioChannel.java
Woah b6495f8d33 Client sound fix (dropping still has sound issues)
Cache now includes all music + sfx + sound (taken from revision 550)
Drop item handler - removed useless send audio
2021-03-31 06:23:23 -04:00

439 lines
16 KiB
Java

package org.runite.client;
import org.rs09.client.util.ArrayUtils;
import java.awt.*;
class AudioChannel {
public static boolean stereo;
static int[] anIntArray1969 = new int[100];
static int threadPriority;
static AudioThread aAudioThread_2613;
private final Class3_Sub24[] aClass3_Sub24Array1980 = new Class3_Sub24[8];
private final Class3_Sub24[] aClass3_Sub24Array1983 = new Class3_Sub24[8];
int[] samples;
int sampleRate;
int bufferSize;
private long aLong1972 = TimeUtils.time();
private Class3_Sub24 aClass3_Sub24_1973;
private long aLong1979 = 0L;
private int anInt1981 = 0;
private long aLong1982 = 0L;
private boolean aBoolean1984 = true;
private int anInt1985 = 0;
private int anInt1986;
private int anInt1987 = 0;
private int anInt1988 = 0;
private int anInt1968 = 32;
static void method2162(GameObject var0, int var1, int var2, int var3) {
Class3_Sub2 var4;
if (var2 < Unsorted.anInt1234) {
var4 = Class75_Sub2.aClass3_Sub2ArrayArrayArray2638[var1][var2 + 1][var3];
if (var4 != null && var4.aClass12_2230 != null && var4.aClass12_2230.object.method1865()) {
var0.method1866(var4.aClass12_2230.object, 128, 0, 0, true);
}
}
if (var3 < Unsorted.anInt1234) {
var4 = Class75_Sub2.aClass3_Sub2ArrayArrayArray2638[var1][var2][var3 + 1];
if (var4 != null && var4.aClass12_2230 != null && var4.aClass12_2230.object.method1865()) {
var0.method1866(var4.aClass12_2230.object, 0, 0, 128, true);
}
}
if (var2 < Unsorted.anInt1234 && var3 < TextureOperation17.anInt3179) {
var4 = Class75_Sub2.aClass3_Sub2ArrayArrayArray2638[var1][var2 + 1][var3 + 1];
if (var4 != null && var4.aClass12_2230 != null && var4.aClass12_2230.object.method1865()) {
var0.method1866(var4.aClass12_2230.object, 128, 0, 128, true);
}
}
if (var2 < Unsorted.anInt1234 && var3 > 0) {
var4 = Class75_Sub2.aClass3_Sub2ArrayArrayArray2638[var1][var2 + 1][var3 - 1];
if (var4 != null && var4.aClass12_2230 != null && var4.aClass12_2230.object.method1865()) {
var0.method1866(var4.aClass12_2230.object, 128, 0, -128, true);
}
}
}
static AudioChannel method1195(int sampleRate, Signlink signlink, Component component, int channelID) {
try {
if (Class21.sampleRate == 0) {
throw new IllegalStateException();
} else if (0 <= channelID && 2 > channelID) {
if (sampleRate < 256) {
sampleRate = 256;
}
try {
AudioChannel channel = new JavaAudioChannel();
channel.sampleRate = sampleRate;
channel.samples = new int[(!stereo ? 1 : 2) * 256];
channel.init(component);
channel.bufferSize = (sampleRate & 0xfffffc00) + 1024;
if (channel.bufferSize > 16384) {
channel.bufferSize = 16384;
}
channel.open(channel.bufferSize);
if (threadPriority > 0 && null == aAudioThread_2613) {
aAudioThread_2613 = new AudioThread();
aAudioThread_2613.aClass87_350 = signlink;
signlink.startThread(threadPriority, aAudioThread_2613);
}
if (aAudioThread_2613 != null) {
if (null != aAudioThread_2613.channels[channelID]) {
throw new IllegalArgumentException();
}
aAudioThread_2613.channels[channelID] = channel;
}
return channel;
} catch (Throwable var7) {
try {
SignLinkAudioChannel signLinkAudioChannel = new SignLinkAudioChannel(signlink, channelID);
signLinkAudioChannel.samples = new int[256 * (stereo ? 2 : 1)];
signLinkAudioChannel.sampleRate = sampleRate;
signLinkAudioChannel.init(component);
signLinkAudioChannel.bufferSize = 16384;
signLinkAudioChannel.open(signLinkAudioChannel.bufferSize);
if (threadPriority > 0 && null == aAudioThread_2613) {
aAudioThread_2613 = new AudioThread();
aAudioThread_2613.aClass87_350 = signlink;
signlink.startThread(threadPriority, aAudioThread_2613);
}
if (aAudioThread_2613 != null) {
if (aAudioThread_2613.channels[channelID] != null) {
throw new IllegalArgumentException();
}
aAudioThread_2613.channels[channelID] = signLinkAudioChannel;
}
return signLinkAudioChannel;
} catch (Throwable var6) {
return new AudioChannel();
}
}
} else {
throw new IllegalArgumentException();
}
} catch (RuntimeException var8) {
throw ClientErrorException.clientError(var8, "id.D(" + sampleRate + ',' + (signlink != null ? "{...}" : "null") + ',' + (component != null ? "{...}" : "null") + ',' + channelID + ',' + 14 + ')');
}
}
void write() {
}
void open(int var1) throws Exception {
}
void flush() throws Exception {
}
private void method2152(int[] var1) {
int var3 = 256;
if (stereo) {
var3 = 256 << 1;
}
ArrayUtils.zero(var1, 0, var3);
this.anInt1987 -= 256;
if (this.aClass3_Sub24_1973 != null && this.anInt1987 <= 0) {
this.anInt1987 += Class21.sampleRate >> 4;
Class97.method1591(this.aClass3_Sub24_1973);
this.method2155(this.aClass3_Sub24_1973, this.aClass3_Sub24_1973.method412());
int var4 = 0;
int var5 = 255;
int var6;
label101:
for (var6 = 7; var5 != 0; --var6) {
int var7;
int var8;
if (var6 < 0) {
var7 = var6 & 0x3;
var8 = -(var6 >> 2);
} else {
var7 = var6;
var8 = 0;
}
for (int var9 = var5 >>> var7 & 0x11111111; var9 != 0; var9 >>>= 4) {
if ((var9 & 0x1) != 0) {
var5 &= ~(1 << var7);
Class3_Sub24 var10 = null;
Class3_Sub24 var11 = this.aClass3_Sub24Array1980[var7];
while (var11 != null) {
Sound var12 = var11.aSound_2544;
if (var12 != null && var12.anInt2374 > var8) {
var5 |= 1 << var7;
var10 = var11;
var11 = var11.aClass3_Sub24_2546;
} else {
var11.aBoolean2545 = true;
int var13 = var11.method409();
var4 += var13;
if (var12 != null) {
var12.anInt2374 += var13;
}
if (var4 >= anInt1968) {
break label101;
}
Class3_Sub24 var14 = var11.method411();
if (var14 != null) {
for (int var15 = var11.anInt2543; var14 != null; var14 = var11.method414()) {
this.method2155(var14, var15 * var14.method412() >> 8);
}
}
Class3_Sub24 var18 = var11.aClass3_Sub24_2546;
var11.aClass3_Sub24_2546 = null;
if (var10 == null) {
this.aClass3_Sub24Array1980[var7] = var18;
} else {
var10.aClass3_Sub24_2546 = var18;
}
if (var18 == null) {
this.aClass3_Sub24Array1983[var7] = var10;
}
var11 = var18;
}
}
}
var7 += 4;
++var8;
}
}
for (var6 = 0; var6 < 8; ++var6) {
Class3_Sub24 var16 = this.aClass3_Sub24Array1980[var6];
Class3_Sub24 var17;
for (this.aClass3_Sub24Array1980[var6] = this.aClass3_Sub24Array1983[var6] = null; var16 != null; var16 = var17) {
var17 = var16.aClass3_Sub24_2546;
var16.aClass3_Sub24_2546 = null;
}
}
}
if (this.anInt1987 < 0) {
this.anInt1987 = 0;
}
if (this.aClass3_Sub24_1973 != null) {
this.aClass3_Sub24_1973.method413(var1, 0, 256);
}
this.aLong1972 = TimeUtils.time();
}
final synchronized void method2153() {
try {
if (null != this.samples) {
long var2 = TimeUtils.time();
try {
if (0L != this.aLong1982) {
if (var2 < this.aLong1982) {
return;
}
this.open(this.bufferSize);
this.aBoolean1984 = true;
this.aLong1982 = 0L;
}
int var4 = this.method2157();
if (-var4 + this.anInt1985 > this.anInt1981) {
this.anInt1981 = -var4 + this.anInt1985;
}
int var5 = this.sampleRate - -this.anInt1986;
if (256 + var5 > 16384) {
var5 = 16128;
}
if (this.bufferSize < var5 + 256) {
this.bufferSize += 1024;
if (this.bufferSize > 16384) {
this.bufferSize = 16384;
}
this.close();
var4 = 0;
this.open(this.bufferSize);
if (this.bufferSize < 256 + var5) {
var5 = -256 + this.bufferSize;
this.anInt1986 = -this.sampleRate + var5;
}
this.aBoolean1984 = true;
}
while (var4 < var5) {
var4 += 256;
this.method2152(this.samples);
this.write();
}
if (this.aLong1979 < var2) {
if (this.aBoolean1984) {
this.aBoolean1984 = false;
} else {
if (this.anInt1981 == 0 && this.anInt1988 == 0) {
this.close();
this.aLong1982 = var2 - -2000L;
return;
}
this.anInt1986 = Math.min(this.anInt1988, this.anInt1981);
this.anInt1988 = this.anInt1981;
}
this.aLong1979 = 2000L + var2;
this.anInt1981 = 0;
}
this.anInt1985 = var4;
} catch (Exception var7) {
this.close();
this.aLong1982 = var2 + 2000L;
}
try {
if (var2 > 500000L + this.aLong1972) {
var2 = this.aLong1972;
}
while (var2 > this.aLong1972 + 5000L) {
this.method2161();
this.aLong1972 += 256000 / Class21.sampleRate;
}
} catch (Exception var6) {
this.aLong1972 = var2;
}
}
} catch (RuntimeException var8) {
throw ClientErrorException.clientError(var8, "vh.Q(" + (byte) -34 + ')');
}
}
final synchronized void method2154(Class3_Sub24 var2) {
this.aClass3_Sub24_1973 = var2;
}
private void method2155(Class3_Sub24 var1, int var2) {
try {
int var4 = var2 >> 5;
Class3_Sub24 var5 = this.aClass3_Sub24Array1983[var4];
if (null == var5) {
this.aClass3_Sub24Array1980[var4] = var1;
} else {
var5.aClass3_Sub24_2546 = var1;
}
this.aClass3_Sub24Array1983[var4] = var1;
var1.anInt2543 = var2;
} catch (RuntimeException var6) {
throw ClientErrorException.clientError(var6, "vh.H(" + (var1 != null ? "{...}" : "null") + ',' + var2 + ',' + (byte) -24 + ')');
}
}
int method2157() {
try {
return this.bufferSize;
} catch (RuntimeException var2) {
throw ClientErrorException.clientError(var2, "vh.B()");
}
}
final synchronized void method2158() {
try {
this.aBoolean1984 = true;
try {
this.flush();
} catch (Exception var3) {
this.close();
this.aLong1982 = TimeUtils.time() + 2000L;
}
} catch (RuntimeException var4) {
throw ClientErrorException.clientError(var4, "vh.L(" + (byte) -78 + ')');
}
}
final void method2159() {
this.aBoolean1984 = true;
}
void close() {
}
private void method2161() {
try {
this.anInt1987 -= 256;
if (0 > this.anInt1987) {
this.anInt1987 = 0;
}
if (null != this.aClass3_Sub24_1973) {
this.aClass3_Sub24_1973.method415(256);
}
} catch (RuntimeException var4) {
throw ClientErrorException.clientError(var4, "vh.K(" + 256 + ',' + 1 + ')');
}
}
final synchronized void method2163() {
try {
if (null != aAudioThread_2613) {
boolean var2 = true;
for (int var3 = 0; var3 < 2; ++var3) {
if (this == aAudioThread_2613.channels[var3]) {
aAudioThread_2613.channels[var3] = null;
}
if (null != aAudioThread_2613.channels[var3]) {
var2 = false;
}
}
if (var2) {
aAudioThread_2613.aBoolean345 = true;
while (aAudioThread_2613.aBoolean353) {
TimeUtils.sleep(50L);
}
aAudioThread_2613 = null;
}
}
this.close();
this.samples = null;
} catch (RuntimeException var4) {
throw ClientErrorException.clientError(var4, "vh.P(" + false + ')');
}
}
void init(Component var1) throws Exception {
}
}