forked from 2009Scape/Server
Cache now includes all music + sfx + sound (taken from revision 550) Drop item handler - removed useless send audio
439 lines
16 KiB
Java
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 {
|
|
}
|
|
|
|
}
|