mirror of
https://gitlab.com/2009scape/rt4-client.git
synced 2026-08-16 07:55:13 -06:00
409 lines
13 KiB
Java
409 lines
13 KiB
Java
package rt4;
|
|
|
|
import java.awt.Component;
|
|
import org.openrs2.deob.annotation.OriginalArg;
|
|
import org.openrs2.deob.annotation.OriginalClass;
|
|
import org.openrs2.deob.annotation.OriginalMember;
|
|
import org.openrs2.deob.annotation.Pc;
|
|
|
|
@OriginalClass("client!vh")
|
|
public class AudioChannel {
|
|
|
|
@OriginalMember(owner = "client!na", name = "w", descriptor = "Z")
|
|
public static boolean stereo;
|
|
@OriginalMember(owner = "client!va", name = "O", descriptor = "I")
|
|
public static int threadPriority;
|
|
@OriginalMember(owner = "client!em", name = "x", descriptor = "Lclient!cj;")
|
|
public static AudioThread thread;
|
|
@OriginalMember(owner = "client!dh", name = "h", descriptor = "I")
|
|
public static int sampleRate;
|
|
|
|
@OriginalMember(owner = "client!vh", name = "h", descriptor = "Lclient!qb;")
|
|
private PcmStream stream;
|
|
|
|
@OriginalMember(owner = "client!vh", name = "n", descriptor = "[I")
|
|
public int[] samples;
|
|
|
|
@OriginalMember(owner = "client!vh", name = "D", descriptor = "I")
|
|
private int anInt4637;
|
|
|
|
@OriginalMember(owner = "client!vh", name = "H", descriptor = "I")
|
|
public int sampleRate2;
|
|
|
|
@OriginalMember(owner = "client!vh", name = "K", descriptor = "I")
|
|
public int bufferCapacity;
|
|
|
|
@OriginalMember(owner = "client!vh", name = "a", descriptor = "I")
|
|
private final int anInt4621 = 32;
|
|
|
|
@OriginalMember(owner = "client!vh", name = "f", descriptor = "J")
|
|
private long time = MonotonicClock.currentTimeMillis();
|
|
|
|
@OriginalMember(owner = "client!vh", name = "w", descriptor = "[Lclient!qb;")
|
|
private final PcmStream[] aClass3_Sub3Array5 = new PcmStream[8];
|
|
|
|
@OriginalMember(owner = "client!vh", name = "x", descriptor = "I")
|
|
private int consumedSamples = 0;
|
|
|
|
@OriginalMember(owner = "client!vh", name = "v", descriptor = "J")
|
|
private long calculateConsumptionAt = 0L;
|
|
|
|
@OriginalMember(owner = "client!vh", name = "E", descriptor = "I")
|
|
private int anInt4638 = 0;
|
|
|
|
@OriginalMember(owner = "client!vh", name = "A", descriptor = "Z")
|
|
private boolean skipConsumptionCheck = true;
|
|
|
|
@OriginalMember(owner = "client!vh", name = "z", descriptor = "[Lclient!qb;")
|
|
private final PcmStream[] aClass3_Sub3Array6 = new PcmStream[8];
|
|
|
|
@OriginalMember(owner = "client!vh", name = "y", descriptor = "J")
|
|
private long closeUntil = 0L;
|
|
|
|
@OriginalMember(owner = "client!vh", name = "G", descriptor = "I")
|
|
private int prevConsumedSamples = 0;
|
|
|
|
@OriginalMember(owner = "client!vh", name = "C", descriptor = "I")
|
|
private int prevBufferSize = 0;
|
|
|
|
@OriginalMember(owner = "client!dc", name = "a", descriptor = "(IIIZ)V")
|
|
public static void init(@OriginalArg(3) boolean stereo) {
|
|
threadPriority = 2;
|
|
AudioChannel.stereo = stereo;
|
|
sampleRate = 22050;
|
|
}
|
|
|
|
@OriginalMember(owner = "client!id", name = "a", descriptor = "(ILsignlink!ll;Ljava/awt/Component;II)Lclient!vh;")
|
|
public static AudioChannel create(@OriginalArg(0) int arg0, @OriginalArg(1) SignLink arg1, @OriginalArg(2) Component arg2, @OriginalArg(3) int arg3) {
|
|
if (sampleRate == 0) {
|
|
throw new IllegalStateException();
|
|
}
|
|
try {
|
|
@Pc(33) AudioChannel audioChannel = new JavaAudioChannel();
|
|
audioChannel.sampleRate2 = arg0;
|
|
audioChannel.samples = new int[(stereo ? 2 : 1) * 256];
|
|
audioChannel.init(arg2);
|
|
audioChannel.bufferCapacity = (arg0 & -1024) + 1024;
|
|
if (audioChannel.bufferCapacity > 16384) {
|
|
audioChannel.bufferCapacity = 16384;
|
|
}
|
|
audioChannel.open(audioChannel.bufferCapacity);
|
|
if (threadPriority > 0 && thread == null) {
|
|
thread = new AudioThread();
|
|
thread.signLink = arg1;
|
|
arg1.startThread(threadPriority, thread);
|
|
}
|
|
if (thread != null) {
|
|
if (thread.channels[arg3] != null) {
|
|
throw new IllegalArgumentException();
|
|
}
|
|
thread.channels[arg3] = audioChannel;
|
|
}
|
|
return audioChannel;
|
|
} catch (@Pc(109) Throwable ex1) {
|
|
ex1.printStackTrace();
|
|
try {
|
|
@Pc(120) SignLinkAudioChannel local120 = new SignLinkAudioChannel(arg1, arg3);
|
|
local120.samples = new int[(stereo ? 2 : 1) * 256];
|
|
local120.sampleRate2 = arg0;
|
|
local120.init(arg2);
|
|
local120.bufferCapacity = 16384;
|
|
local120.open(local120.bufferCapacity);
|
|
if (threadPriority > 0 && thread == null) {
|
|
thread = new AudioThread();
|
|
thread.signLink = arg1;
|
|
arg1.startThread(threadPriority, thread);
|
|
}
|
|
if (thread != null) {
|
|
if (thread.channels[arg3] != null) {
|
|
throw new IllegalArgumentException();
|
|
}
|
|
thread.channels[arg3] = local120;
|
|
}
|
|
return local120;
|
|
} catch (@Pc(186) Throwable ex2) {
|
|
ex2.printStackTrace();
|
|
return new AudioChannel();
|
|
}
|
|
}
|
|
}
|
|
|
|
@OriginalMember(owner = "client!nd", name = "a", descriptor = "(ZLclient!qb;)V")
|
|
public static void setInactive(@OriginalArg(1) PcmStream arg0) {
|
|
if (arg0.aClass3_Sub16_5 != null) {
|
|
arg0.aClass3_Sub16_5.anInt3313 = 0;
|
|
}
|
|
arg0.aBoolean292 = false;
|
|
for (@Pc(14) PcmStream local14 = arg0.method4406(); local14 != null; local14 = arg0.method4409()) {
|
|
setInactive(local14);
|
|
}
|
|
}
|
|
|
|
@OriginalMember(owner = "client!vh", name = "a", descriptor = "()V")
|
|
protected void write() throws Exception {
|
|
}
|
|
|
|
@OriginalMember(owner = "client!vh", name = "a", descriptor = "(I)V")
|
|
public void open(@OriginalArg(0) int arg0) throws Exception {
|
|
}
|
|
|
|
@OriginalMember(owner = "client!vh", name = "b", descriptor = "()V")
|
|
protected void close() throws Exception {
|
|
}
|
|
|
|
@OriginalMember(owner = "client!vh", name = "a", descriptor = "([II)V")
|
|
private void read(@OriginalArg(0) int[] arg0) {
|
|
@Pc(1) short local1 = 256;
|
|
if (stereo) {
|
|
local1 = 512;
|
|
}
|
|
ArrayUtils.clear(arg0, 0, local1);
|
|
this.anInt4638 -= 256;
|
|
if (this.stream != null && this.anInt4638 <= 0) {
|
|
this.anInt4638 += sampleRate >> 4;
|
|
setInactive(this.stream);
|
|
this.method3567(this.stream, this.stream.method4407());
|
|
@Pc(45) int local45 = 0;
|
|
@Pc(47) int local47 = 255;
|
|
@Pc(49) int local49 = 7;
|
|
label106: while (local47 != 0) {
|
|
@Pc(57) int local57;
|
|
@Pc(62) int local62;
|
|
if (local49 < 0) {
|
|
local57 = local49 & 0x3;
|
|
local62 = -(local49 >> 2);
|
|
} else {
|
|
local57 = local49;
|
|
local62 = 0;
|
|
}
|
|
for (@Pc(73) int local73 = local47 >>> local57 & 0x11111111; local73 != 0; local73 >>>= 0x4) {
|
|
if ((local73 & 0x1) != 0) {
|
|
local47 &= ~(0x1 << local57);
|
|
@Pc(91) PcmStream local91 = null;
|
|
@Pc(96) PcmStream local96 = this.aClass3_Sub3Array5[local57];
|
|
label100: while (true) {
|
|
while (true) {
|
|
if (local96 == null) {
|
|
break label100;
|
|
}
|
|
@Pc(101) Sound local101 = local96.aClass3_Sub16_5;
|
|
if (local101 == null || local101.anInt3313 <= local62) {
|
|
local96.aBoolean292 = true;
|
|
@Pc(125) int local125 = local96.method4404();
|
|
local45 += local125;
|
|
if (local101 != null) {
|
|
local101.anInt3313 += local125;
|
|
}
|
|
if (local45 >= this.anInt4621) {
|
|
break label106;
|
|
}
|
|
@Pc(145) PcmStream local145 = local96.method4406();
|
|
if (local145 != null) {
|
|
@Pc(150) int local150 = local96.anInt5626;
|
|
while (local145 != null) {
|
|
this.method3567(local145, local150 * local145.method4407() >> 8);
|
|
local145 = local96.method4409();
|
|
}
|
|
}
|
|
@Pc(169) PcmStream local169 = local96.aClass3_Sub3_8;
|
|
local96.aClass3_Sub3_8 = null;
|
|
if (local91 == null) {
|
|
this.aClass3_Sub3Array5[local57] = local169;
|
|
} else {
|
|
local91.aClass3_Sub3_8 = local169;
|
|
}
|
|
if (local169 == null) {
|
|
this.aClass3_Sub3Array6[local57] = local91;
|
|
}
|
|
local96 = local169;
|
|
} else {
|
|
local47 |= 0x1 << local57;
|
|
local91 = local96;
|
|
local96 = local96.aClass3_Sub3_8;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
local57 += 4;
|
|
local62++;
|
|
}
|
|
local49--;
|
|
}
|
|
for (local49 = 0; local49 < 8; local49++) {
|
|
@Pc(212) PcmStream local212 = this.aClass3_Sub3Array5[local49];
|
|
this.aClass3_Sub3Array5[local49] = this.aClass3_Sub3Array6[local49] = null;
|
|
while (local212 != null) {
|
|
@Pc(227) PcmStream local227 = local212.aClass3_Sub3_8;
|
|
local212.aClass3_Sub3_8 = null;
|
|
local212 = local227;
|
|
}
|
|
}
|
|
}
|
|
if (this.anInt4638 < 0) {
|
|
this.anInt4638 = 0;
|
|
}
|
|
if (this.stream != null) {
|
|
this.stream.read(arg0, 0, 256);
|
|
}
|
|
this.time = MonotonicClock.currentTimeMillis();
|
|
}
|
|
|
|
@OriginalMember(owner = "client!vh", name = "a", descriptor = "(B)V")
|
|
public final synchronized void loop() {
|
|
if (this.samples == null) {
|
|
return;
|
|
}
|
|
@Pc(14) long now = MonotonicClock.currentTimeMillis();
|
|
try {
|
|
if (this.closeUntil != 0L) {
|
|
if (now < this.closeUntil) {
|
|
return;
|
|
}
|
|
this.open(this.bufferCapacity);
|
|
this.skipConsumptionCheck = true;
|
|
this.closeUntil = 0L;
|
|
}
|
|
@Pc(38) int local38 = this.getBufferSize();
|
|
if (this.consumedSamples < this.prevBufferSize - local38) {
|
|
this.consumedSamples = this.prevBufferSize - local38;
|
|
}
|
|
@Pc(65) int local65 = this.sampleRate2 + this.anInt4637;
|
|
if (local65 + 256 > 16384) {
|
|
local65 = 16128;
|
|
}
|
|
if (this.bufferCapacity < local65 + 256) {
|
|
this.bufferCapacity += 1024;
|
|
if (this.bufferCapacity > 16384) {
|
|
this.bufferCapacity = 16384;
|
|
}
|
|
this.flush();
|
|
local38 = 0;
|
|
this.open(this.bufferCapacity);
|
|
if (this.bufferCapacity < local65 + 256) {
|
|
local65 = this.bufferCapacity - 256;
|
|
this.anInt4637 = local65 - this.sampleRate2;
|
|
}
|
|
this.skipConsumptionCheck = true;
|
|
}
|
|
while (local65 > local38) {
|
|
local38 += 256;
|
|
this.read(this.samples);
|
|
this.write();
|
|
}
|
|
if (now > this.calculateConsumptionAt) {
|
|
if (this.skipConsumptionCheck) {
|
|
this.skipConsumptionCheck = false;
|
|
} else if (this.consumedSamples == 0 && this.prevConsumedSamples == 0) {
|
|
this.flush();
|
|
this.closeUntil = now + 2000L;
|
|
return;
|
|
} else {
|
|
this.anInt4637 = Math.min(this.prevConsumedSamples, this.consumedSamples);
|
|
this.prevConsumedSamples = this.consumedSamples;
|
|
}
|
|
this.calculateConsumptionAt = now + 2000L;
|
|
this.consumedSamples = 0;
|
|
}
|
|
this.prevBufferSize = local38;
|
|
} catch (@Pc(202) Exception ex) {
|
|
ex.printStackTrace();
|
|
this.flush();
|
|
this.closeUntil = now + 2000L;
|
|
}
|
|
try {
|
|
if (now > this.time + 500000L) {
|
|
now = this.time;
|
|
}
|
|
while (now > this.time + 5000L) {
|
|
this.skip();
|
|
this.time += 256000 / sampleRate;
|
|
}
|
|
} catch (@Pc(247) Exception ex) {
|
|
ex.printStackTrace();
|
|
this.time = now;
|
|
}
|
|
}
|
|
|
|
@OriginalMember(owner = "client!vh", name = "a", descriptor = "(ILclient!qb;)V")
|
|
public final synchronized void setStream(@OriginalArg(1) PcmStream arg0) {
|
|
this.stream = arg0;
|
|
}
|
|
|
|
@OriginalMember(owner = "client!vh", name = "a", descriptor = "(Lclient!qb;IB)V")
|
|
private void method3567(@OriginalArg(0) PcmStream arg0, @OriginalArg(1) int arg1) {
|
|
@Pc(16) int local16 = arg1 >> 5;
|
|
@Pc(21) PcmStream local21 = this.aClass3_Sub3Array6[local16];
|
|
if (local21 == null) {
|
|
this.aClass3_Sub3Array5[local16] = arg0;
|
|
} else {
|
|
local21.aClass3_Sub3_8 = arg0;
|
|
}
|
|
this.aClass3_Sub3Array6[local16] = arg0;
|
|
arg0.anInt5626 = arg1;
|
|
}
|
|
|
|
@OriginalMember(owner = "client!vh", name = "c", descriptor = "()I")
|
|
protected int getBufferSize() throws Exception {
|
|
return this.bufferCapacity;
|
|
}
|
|
|
|
@OriginalMember(owner = "client!vh", name = "b", descriptor = "(B)V")
|
|
public final synchronized void method3570() {
|
|
this.skipConsumptionCheck = true;
|
|
try {
|
|
this.close();
|
|
} catch (@Pc(10) Exception ex) {
|
|
ex.printStackTrace();
|
|
this.flush();
|
|
this.closeUntil = MonotonicClock.currentTimeMillis() + 2000L;
|
|
}
|
|
}
|
|
|
|
@OriginalMember(owner = "client!vh", name = "b", descriptor = "(I)V")
|
|
public final void method3571() {
|
|
this.skipConsumptionCheck = true;
|
|
}
|
|
|
|
@OriginalMember(owner = "client!vh", name = "d", descriptor = "()V")
|
|
protected void flush() {
|
|
}
|
|
|
|
@OriginalMember(owner = "client!vh", name = "a", descriptor = "(II)V")
|
|
private void skip() {
|
|
this.anInt4638 -= 256;
|
|
if (this.anInt4638 < 0) {
|
|
this.anInt4638 = 0;
|
|
}
|
|
if (this.stream != null) {
|
|
this.stream.skip(256);
|
|
}
|
|
}
|
|
|
|
@OriginalMember(owner = "client!vh", name = "a", descriptor = "(Z)V")
|
|
public final synchronized void quit() {
|
|
if (thread != null) {
|
|
@Pc(6) boolean local6 = true;
|
|
for (@Pc(8) int local8 = 0; local8 < 2; local8++) {
|
|
if (thread.channels[local8] == this) {
|
|
thread.channels[local8] = null;
|
|
}
|
|
if (thread.channels[local8] != null) {
|
|
local6 = false;
|
|
}
|
|
}
|
|
if (local6) {
|
|
thread.stop = true;
|
|
while (thread.running) {
|
|
ThreadUtils.sleep(50L);
|
|
}
|
|
thread = null;
|
|
}
|
|
}
|
|
this.flush();
|
|
this.samples = null;
|
|
}
|
|
|
|
@OriginalMember(owner = "client!vh", name = "a", descriptor = "(Ljava/awt/Component;)V")
|
|
public void init(@OriginalArg(0) Component arg0) throws Exception {
|
|
}
|
|
}
|