rt4-client/client/src/main/java/rt4/SoundBank.java
2022-06-27 13:08:03 -04:00

104 lines
3.7 KiB
Java

package rt4;
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!le")
public final class SoundBank {
@OriginalMember(owner = "client!le", name = "d", descriptor = "Lclient!sc;")
private final HashTable vorbisCache = new HashTable(256);
@OriginalMember(owner = "client!le", name = "l", descriptor = "Lclient!sc;")
private final HashTable cache = new HashTable(256);
@OriginalMember(owner = "client!le", name = "b", descriptor = "Lclient!ve;")
private final Js5 synthArchive;
@OriginalMember(owner = "client!le", name = "i", descriptor = "Lclient!ve;")
private final Js5 vorbisArchive;
@OriginalMember(owner = "client!le", name = "<init>", descriptor = "(Lclient!ve;Lclient!ve;)V")
public SoundBank(@OriginalArg(0) Js5 synthArchive, @OriginalArg(1) Js5 vorbisArchive) {
this.synthArchive = synthArchive;
this.vorbisArchive = vorbisArchive;
}
@OriginalMember(owner = "client!le", name = "a", descriptor = "([IIII)Lclient!kj;")
private PcmSound getSynthSound(@OriginalArg(0) int[] samplingRates, @OriginalArg(2) int group, @OriginalArg(3) int file) {
@Pc(21) int key1 = file ^ (group >>> 12 | group << 4 & 0xFFF3);
@Pc(27) int key2 = key1 | group << 16;
@Pc(30) long key = key2;
@Pc(37) PcmSound sound = (PcmSound) this.cache.get(key);
if (sound != null) {
return sound;
} else if (samplingRates == null || samplingRates[0] > 0) {
@Pc(59) SynthSound synthSound = SynthSound.create(this.synthArchive, group, file);
if (synthSound == null) {
return null;
}
sound = synthSound.toPcmSound();
this.cache.put(sound, key);
if (samplingRates != null) {
samplingRates[0] -= sound.samples.length;
}
return sound;
} else {
return null;
}
}
@OriginalMember(owner = "client!le", name = "a", descriptor = "(II[I)Lclient!kj;")
public final PcmSound getSynthSound(@OriginalArg(0) int id, @OriginalArg(2) int[] samplingRates) {
if (this.synthArchive.capacity() == 1) {
return this.getSynthSound(samplingRates, 0, id);
} else if (this.synthArchive.getGroupCapacity(id) == 1) {
return this.getSynthSound(samplingRates, id, 0);
} else {
throw new RuntimeException();
}
}
@OriginalMember(owner = "client!le", name = "a", descriptor = "(I[IIB)Lclient!kj;")
private PcmSound getVorbisSound(@OriginalArg(0) int group, @OriginalArg(1) int[] samplingRates, @OriginalArg(2) int file) {
@Pc(15) int key1 = file ^ (group >>> 12 | group << 4 & 0xFFF3);
@Pc(21) int key2 = key1 | group << 16;
@Pc(26) long key = (long) key2 ^ 0x100000000L;
@Pc(33) PcmSound sound = (PcmSound) this.cache.get(key);
if (sound != null) {
return sound;
} else if (samplingRates == null || samplingRates[0] > 0) {
@Pc(53) VorbisSound vorbisSound = (VorbisSound) this.vorbisCache.get(key);
if (vorbisSound == null) {
vorbisSound = VorbisSound.create(this.vorbisArchive, group, file);
if (vorbisSound == null) {
return null;
}
this.vorbisCache.put(vorbisSound, key);
}
sound = vorbisSound.toPcmSound(samplingRates);
if (sound == null) {
return null;
} else {
vorbisSound.unlink();
this.cache.put(sound, key);
return sound;
}
} else {
return null;
}
}
@OriginalMember(owner = "client!le", name = "b", descriptor = "(II[I)Lclient!kj;")
public final PcmSound getVorbisSound(@OriginalArg(1) int id, @OriginalArg(2) int[] samplingRates) {
if (this.vorbisArchive.capacity() == 1) {
return this.getVorbisSound(0, samplingRates, id);
} else if (this.vorbisArchive.getGroupCapacity(id) == 1) {
return this.getVorbisSound(id, samplingRates, 0);
} else {
throw new RuntimeException();
}
}
}