百灵 v1.0.0版本的 MD5 值为:52dfab5df87776411abdee28e290000c
以下内容为反编译后的 SSRC.java 源代码,内容仅作参考
package im.mzmrebenud.ui.utils.translate.ssrc;
import com.google.firebase.remoteconfig.FirebaseRemoteConfig;
import im.mzmrebenud.messenger.FileLog;
import io.reactivex.annotations.SchedulerSupport;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.RandomAccessFile;
import java.lang.reflect.Array;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.channels.FileChannel;
import java.util.Random;
import kotlin.UByte;
import kotlin.jvm.internal.ByteCompanionObject;
public class SSRC {
static final boolean $assertionsDisabled = false;
private static final int POOLSIZE = 97;
private static final int RANDBUFLEN = 65536;
private static final String VERSION = "1.30";
private double AA;
private double DF;
private int FFTFIRLEN;
private ByteOrder byteOrder;
private SplitRadixFft fft;
private long lastshowed;
private int lastshowed2;
private boolean quiet;
private double[] randbuf;
private int randptr;
private double[][] shapebuf;
private int shaper_clipmax;
private int shaper_clipmin;
private int shaper_len;
private int shaper_type;
private long starttime;
private static final int[] scoeffreq = {0, 48000, 44100, 37800, 32000, 22050, 48000, 44100};
private static final int[] scoeflen = {1, 16, 20, 16, 16, 15, 16, 15};
private static final int[] samp = {8, 18, 27, 8, 8, 8, 10, 9};
private static final double[][] shapercoefs = {new double[]{-1.0d}, new double[]{-2.87207293510437d, 5.041323184967041d, -6.244299411773682d, 5.848398685455322d, -3.706754207611084d, 1.0495119094848633d, 1.1830236911773682d, -2.1126792430877686d, 1.9094531536102295d, -0.9991308450698853d, 0.17090806365013123d, 0.32615602016448975d, -0.39127644896507263d, 0.2687646150588989d, -0.0976761057972908d, 0.023473845794796944d}, new double[]{-2.6773197650909424d, 4.830892562866211d, -6.570110321044922d, 7.4572014808654785d, -6.726327419281006d, 4.848165035247803d, -2.0412089824676514d, -0.7006359100341797d, 2.95375657081604d, -4.080038547515869d, 4.184521675109863d, -3.331181287765503d, 2.117992639541626d, -0.879302978515625d, 0.031759146600961685d, 0.4238278865814209d, -0.4788210391998291d, 0.35490813851356506d, -0.1749683916568756d, 0.06090816855430603d}, new double[]{-1.6335992813110352d, 2.261549234390259d, -2.407702922821045d, 2.634171724319458d, -2.144036293029785d, 1.8153258562088013d, -1.0816224813461304d, 0.703026533126831d, -0.15991993248462677d, -0.04154951870441437d, 0.2941657602787018d, -0.25183168053627014d, 0.27766478061676025d, -0.15785403549671173d, 0.10165894031524658d, -0.016833892092108727d}, new double[]{-0.8290129899978638d, 0.9892265796661377d, -0.5982571244239807d, 1.0028809309005737d, -0.5993821620941162d, 0.7950245141983032d, -0.42723315954208374d, 0.5449252724647522d, -0.3079260587692261d, 0.3687179982662201d, -0.187920480966568d, 0.2261127084493637d, -0.10573341697454453d, 0.11435490846633911d, -0.0388006791472435d, 0.040842197835445404d}, new double[]{-0.06522997468709946d, 0.5498126149177551d, 0.4027854800224304d, 0.3178376853466034d, 0.2820179760456085d, 0.16985194385051727d, 0.15433363616466522d, 0.12507140636444092d, 0.08903945237398148d, 0.06441012024879456d, 0.04714600369334221d, 0.03280523791909218d, 0.028495194390416145d, 0.011695005930960178d, 0.011831838637590408d}, new double[]{-2.3925774097442627d, 3.4350297451019287d, -3.185370922088623d, 1.8117271661758423d, 0.2012477070093155d, -1.4759907722473145d, 1.7210904359817505d, -0.9774670004844666d, 0.13790138065814972d, 0.38185903429985046d, -0.27421241998672485d, -0.06658421456813812d, 0.35223302245140076d, -0.37672343850135803d, 0.23964276909828186d, -0.06867482513189316d}, new double[]{-2.0833916664123535d, 3.0418450832366943d, -3.204789876937866d, 2.757192611694336d, -1.4978630542755127d, 0.34275946021080017d, 0.7173374891281128d, -1.073705792427063d, 1.0225815773010254d, -0.5664999485015869d, 0.20968692004680634d, 0.06537853181362152d, -0.10322438180446625d, 0.06744202226400375d, 0.00495197344571352d}};
private static final double[] presets = {0.7d, 0.9d, 0.18d};
private int RINT(double x) {
return (int) (x >= FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE ? 0.5d + x : x - 0.5d);
}
public int init_shaper(int freq, int nch, int min, int max, int dtype, int pdf, double noiseamp) {
int[] pool;
int i = 97;
int[] pool2 = new int[97];
int i2 = 1;
while (i2 < 6 && freq != scoeffreq[i2]) {
i2++;
}
if ((dtype == 3 || dtype == 4) && i2 == 6) {
System.err.printf("Warning: ATH based noise shaping for destination frequency %dHz is not available, using triangular dither\n", Integer.valueOf(freq));
}
if (dtype == 2 || i2 == 6) {
i2 = 0;
}
if (dtype == 4 && (i2 == 1 || i2 == 2)) {
i2 += 5;
}
this.shaper_type = i2;
this.shapebuf = new double[nch];
this.shaper_len = scoeflen[i2];
for (int i3 = 0; i3 < nch; i3++) {
this.shapebuf[i3] = new double[this.shaper_len];
}
this.shaper_clipmin = min;
this.shaper_clipmax = max;
this.randbuf = new double[65536];
Random random = new Random(System.currentTimeMillis());
for (int i4 = 0; i4 < 97; i4++) {
pool2[i4] = random.nextInt();
}
if (pdf == 0) {
for (int i5 = 0; i5 < 65536; i5++) {
int p = random.nextInt() % 97;
int r = pool2[p];
pool2[p] = random.nextInt();
this.randbuf[i5] = ((r / 2.147483647E9d) - 0.5d) * noiseamp;
}
} else if (pdf == 1) {
for (int i6 = 0; i6 < 65536; i6++) {
int p2 = random.nextInt() % 97;
int r1 = pool2[p2];
pool2[p2] = random.nextInt();
int p3 = random.nextInt() % 97;
int p4 = pool2[p3];
pool2[p3] = random.nextInt();
this.randbuf[i6] = noiseamp * ((r1 / 2.147483647E9d) - (p4 / 2.147483647E9d));
}
} else if (pdf == 2) {
int sw = 0;
double t = FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE;
double u = FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE;
int i7 = 0;
for (int i8 = 65536; i7 < i8; i8 = 65536) {
if (sw == 0) {
sw = 1;
int p5 = random.nextInt() % i;
double r2 = pool2[p5] / 2.147483647E9d;
pool2[p5] = random.nextInt();
if (r2 == 1.0d) {
r2 = FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE;
}
t = Math.sqrt(Math.log(1.0d - r2) * (-2.0d));
int p6 = random.nextInt() % i;
pool = pool2;
double r3 = pool2[p6] / 2.147483647E9d;
pool[p6] = random.nextInt();
double u2 = 6.283185307179586d * r3;
this.randbuf[i7] = noiseamp * t * Math.cos(u2);
u = u2;
} else {
pool = pool2;
this.randbuf[i7] = noiseamp * t * Math.sin(u);
sw = 0;
}
i7++;
pool2 = pool;
i = 97;
}
}
this.randptr = 0;
if (dtype == 0 || dtype == 1) {
return 1;
}
return samp[this.shaper_type];
}
public int do_shaping(double s, double[] peak, int dtype, int ch) {
int i;
double s2;
if (dtype == 1) {
double[] dArr = this.randbuf;
int i2 = this.randptr;
this.randptr = i2 + 1;
double s3 = s + dArr[65535 & i2];
int i3 = this.shaper_clipmin;
if (s3 < i3) {
double d = s3 / i3;
peak[0] = peak[0] < d ? d : peak[0];
s3 = this.shaper_clipmin;
}
int i4 = this.shaper_clipmax;
if (s3 > i4) {
double d2 = s3 / i4;
peak[0] = peak[0] < d2 ? d2 : peak[0];
s3 = this.shaper_clipmax;
}
return RINT(s3);
}
double h = FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE;
int i5 = 0;
while (true) {
i = this.shaper_len;
if (i5 >= i) {
break;
}
h += shapercoefs[this.shaper_type][i5] * this.shapebuf[ch][i5];
i5++;
}
double s4 = s + h;
double[] dArr2 = this.randbuf;
int i6 = this.randptr;
this.randptr = i6 + 1;
double s5 = s4 + dArr2[65535 & i6];
for (int i7 = i - 2; i7 >= 0; i7--) {
double[][] dArr3 = this.shapebuf;
dArr3[ch][i7 + 1] = dArr3[ch][i7];
}
int i8 = this.shaper_clipmin;
if (s5 >= i8) {
int i9 = this.shaper_clipmax;
if (s5 > i9) {
double d3 = s5 / i9;
peak[0] = peak[0] < d3 ? d3 : peak[0];
s2 = this.shaper_clipmax;
double[][] dArr4 = this.shapebuf;
dArr4[ch][0] = s2 - s4;
if (dArr4[ch][0] > 1.0d) {
dArr4[ch][0] = 1.0d;
}
double[][] dArr5 = this.shapebuf;
if (dArr5[ch][0] < -1.0d) {
dArr5[ch][0] = -1.0d;
}
} else {
s2 = RINT(s5);
this.shapebuf[ch][0] = s2 - s4;
}
} else {
double d4 = s5 / i8;
peak[0] = peak[0] < d4 ? d4 : peak[0];
s2 = this.shaper_clipmin;
double[][] dArr6 = this.shapebuf;
dArr6[ch][0] = s2 - s4;
if (dArr6[ch][0] > 1.0d) {
dArr6[ch][0] = 1.0d;
}
double[][] dArr7 = this.shapebuf;
if (dArr7[ch][0] < -1.0d) {
dArr7[ch][0] = -1.0d;
}
}
return (int) s2;
}
private void quit_shaper(int nch) {
}
private double alpha(double a) {
if (a <= 21.0d) {
return FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE;
}
if (a <= 50.0d) {
return (Math.pow(a - 21.0d, 0.4d) * 0.5842d) + ((a - 21.0d) * 0.07886d);
}
return (a - 8.7d) * 0.1102d;
}
private double win(double n, int len, double alp, double iza) {
return I0Bessel.value(Math.sqrt(1.0d - (((4.0d * n) * n) / ((len - 1.0d) * (len - 1.0d)))) * alp) / iza;
}
private double sinc(double x) {
if (x == FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE) {
return 1.0d;
}
return Math.sin(x) / x;
}
private double hn_lpf(int n, double lpf, double fs) {
double t = 1.0d / fs;
double omega = 6.283185307179586d * lpf;
return 2.0d * lpf * t * sinc(n * omega * t);
}
private void usage() {
System.err.printf("http://shibatch.sourceforge.net/\n\n", new Object[0]);
System.err.printf("usage: ssrc [<options>] <source wav file> <destination wav file>\n", new Object[0]);
System.err.printf("options : --rate <sampling rate> output sample rate\n", new Object[0]);
System.err.printf(" --att <attenuation(dB)> attenuate signal\n", new Object[0]);
System.err.printf(" --bits <number of bits> output quantization bit length\n", new Object[0]);
System.err.printf(" --tmpfile <file name> specify temporal file\n", new Object[0]);
System.err.printf(" --twopass two pass processing to avoid clipping\n", new Object[0]);
System.err.printf(" --normalize normalize the wave file\n", new Object[0]);
System.err.printf(" --quiet nothing displayed except error\n", new Object[0]);
System.err.printf(" --dither [<type>] dithering\n", new Object[0]);
System.err.printf(" 0 : no dither\n", new Object[0]);
System.err.printf(" 1 : no noise shaping\n", new Object[0]);
System.err.printf(" 2 : triangular spectral shape\n", new Object[0]);
System.err.printf(" 3 : ATH based noise shaping\n", new Object[0]);
System.err.printf(" 4 : less dither amplitude than type 3\n", new Object[0]);
System.err.printf(" --pdf <type> [<amp>] select p.d.f. of noise\n", new Object[0]);
System.err.printf(" 0 : rectangular\n", new Object[0]);
System.err.printf(" 1 : triangular\n", new Object[0]);
System.err.printf(" 2 : Gaussian\n", new Object[0]);
System.err.printf(" --profile <type> specify profile\n", new Object[0]);
System.err.printf(" standard : the default quality\n", new Object[0]);
System.err.printf(" fast : fast, not so bad quality\n", new Object[0]);
}
private void fmterr(int x) {
throw new IllegalStateException("unknown error " + x);
}
private void setstarttime() {
this.starttime = System.currentTimeMillis();
this.lastshowed = 0L;
this.lastshowed2 = -1;
}
private void showprogress(double p) {
int eta;
if (this.quiet) {
return;
}
long t = System.currentTimeMillis() - this.starttime;
if (p == FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE) {
eta = 0;
} else {
eta = (int) ((t * (1.0d - p)) / p);
}
int pc = (int) (100.0d * p);
if (pc != this.lastshowed2 || t != this.lastshowed) {
System.err.printf(" %3d%% processed", Integer.valueOf(pc));
this.lastshowed2 = pc;
}
if (t != this.lastshowed) {
System.err.printf(", ETA =%4dmsec", Integer.valueOf(eta));
this.lastshowed = t;
}
System.err.printf("\r", new Object[0]);
System.err.flush();
}
private int gcd(int x, int y) {
while (y != 0) {
int t = x % y;
x = y;
y = t;
}
return x;
}
public double upsample(InputStream fpi, OutputStream fpo, int nch, int bps, int dbps, int sfrq, int dfrq, double gain, int chanklen, boolean twopass, int dither) throws IOException {
int osf;
double d;
int n1;
double d2;
int n2;
double lpf;
int toberead;
int nsmplread;
int chanklen2;
byte[] tempData;
int n2b;
int n2b2;
int i;
ByteBuffer rawinbuf;
int n2b22;
int i2;
int n2b3;
double[] inbuf;
double[] outbuf;
int n2b4;
int n1x;
int n1x2;
int chanklen3;
ByteBuffer rawoutbuf;
int s;
int chanklen4;
double[] inbuf2;
ByteBuffer rawoutbuf2;
int i3;
int s2;
int i4;
int n2b5;
double[] inbuf3;
double[] outbuf2;
byte[] tempData2;
int n2b6;
int n1x3;
int n1x4;
int s3;
int fs1;
int sumread;
int sumwrite;
int delay;
int i5;
int sumread2;
int nsmplwrt2;
SSRC ssrc;
SSRC ssrc2;
int inbuflen;
int sumread3;
int chanklen5;
int toberead2;
int toberead3;
int no;
int i6 = sfrq;
int sumwrite2 = dfrq;
Class<double> cls = double.class;
double[] peak = {FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE};
int filter2len = this.FFTFIRLEN;
double aa = this.AA;
int frqgcd = gcd(i6, sumwrite2);
int fs12 = (i6 / frqgcd) * sumwrite2;
if (fs12 / sumwrite2 == 1) {
osf = 1;
} else if ((fs12 / sumwrite2) % 2 == 0) {
osf = 2;
} else if ((fs12 / sumwrite2) % 3 == 0) {
osf = 3;
} else {
throw new IllegalArgumentException(String.format("Resampling from %dHz to %dHz is not supported.\n%d/gcd(%d,%d)=%d must be divided by 2 or 3.\n", Integer.valueOf(sfrq), Integer.valueOf(dfrq), Integer.valueOf(sfrq), Integer.valueOf(sfrq), Integer.valueOf(dfrq), Integer.valueOf(fs12 / dfrq)));
}
double df = ((((sumwrite2 * osf) / 2) - (i6 / 2)) * 2) / 2.0d;
double lpf2 = (i6 / 2) + ((((sumwrite2 * osf) / 2) - (i6 / 2)) / 2.0d);
if (aa <= 21.0d) {
d = 0.9222d;
} else {
double d3 = aa - 7.95d;
d = d3 / 14.36d;
}
int n12 = (int) (((fs12 / df) * d) + 1.0d);
if (n12 % 2 != 0) {
n1 = n12;
} else {
n1 = n12 + 1;
}
SSRC ssrc3 = this;
double alp = ssrc3.alpha(aa);
double iza = I0Bessel.value(alp);
int n1y = fs12 / i6;
int n1x5 = (n1 / n1y) + 1;
int[] f1order = new int[n1y * osf];
for (int i7 = 0; i7 < n1y * osf; i7++) {
f1order[i7] = (fs12 / i6) - (((fs12 / (sumwrite2 * osf)) * i7) % (fs12 / i6));
if (f1order[i7] == fs12 / i6) {
f1order[i7] = 0;
}
}
int[] f1inc = new int[n1y * osf];
int i8 = 0;
while (i8 < n1y * osf) {
double aa2 = aa;
f1inc[i8] = f1order[i8] < fs12 / (sumwrite2 * osf) ? nch : 0;
if (f1order[i8] == fs12 / i6) {
f1order[i8] = 0;
}
i8++;
aa = aa2;
}
double[][] stage1 = (double[][]) Array.newInstance((Class<?>) cls, n1y, n1x5);
int i9 = -(n1 / 2);
int i10 = i9;
while (i10 <= i) {
int i11 = i10;
int[] f1inc2 = f1inc;
int fs13 = fs12;
stage1[((n1 / 2) + i10) % n1y][((n1 / 2) + i10) / n1y] = ((win(i10, n1, alp, iza) * hn_lpf(i11, lpf2, fs13)) * fs13) / i6;
i10 = i11 + 1;
fs12 = fs13;
ssrc3 = ssrc3;
filter2len = filter2len;
cls = cls;
f1inc = f1inc2;
f1order = f1order;
n1x5 = n1x5;
}
int[] f1order2 = f1order;
int filter2len2 = filter2len;
SSRC ssrc4 = ssrc3;
int n22 = n1x5;
int[] f1inc3 = f1inc;
Class<double> cls2 = cls;
int fs14 = fs12;
double aa3 = ssrc4.AA;
if (aa3 <= 21.0d) {
d2 = 0.9222d;
} else {
double d4 = aa3 - 7.95d;
d2 = d4 / 14.36d;
}
int fs2 = sumwrite2 * osf;
int i12 = 1;
while (true) {
int n23 = filter2len2 * i12;
n2 = n23 % 2 != 0 ? n23 : n23 - 1;
double df2 = (fs2 * d2) / (n2 - 1);
lpf = i6 / 2;
if (df2 < ssrc4.DF) {
break;
}
i12 *= 2;
sumwrite2 = dfrq;
fs14 = fs14;
n22 = n22;
}
double alp2 = ssrc4.alpha(aa3);
double iza2 = I0Bessel.value(alp2);
int n2b7 = 1;
while (n2b7 < n2) {
n2b7 *= 2;
}
int n2b8 = n2b7 * 2;
double[] stage2 = new double[n2b8];
int i13 = -(n2 / 2);
int i14 = i13;
while (i14 <= i) {
double lpf3 = lpf;
int n2b9 = n2b8;
double[] stage22 = stage2;
int i15 = i14;
double aa4 = aa3;
int fs22 = fs2;
stage22[i14 + (n2 / 2)] = ((win(i14, n2, alp2, iza2) * hn_lpf(i15, lpf3, fs22)) / n2b9) * 2.0d;
i14 = i15 + 1;
fs2 = fs22;
n2 = n2;
n2b8 = n2b9;
lpf = lpf3;
stage2 = stage22;
aa3 = aa4;
}
double[] stage23 = stage2;
int ip_backup = i14;
int n2b10 = n2b8;
int fs23 = fs2;
int n24 = n2;
int ipsize = (int) (Math.sqrt(n2b10) + 2.0d);
int[] fft_ip = new int[ipsize];
fft_ip[0] = 0;
int wsize = n2b10 / 2;
double[] fft_w = new double[wsize];
ssrc4.fft.rdft(n2b10, 1, stage23, fft_ip, fft_w);
setstarttime();
int n2b23 = n2b10 / 2;
int ip = 0;
int[] iArr = {spcount, (n2b23 / osf) + 1};
int spcount = nch;
double[][] buf1 = (double[][]) Array.newInstance((Class<?>) cls2, iArr);
double[][] buf2 = (double[][]) Array.newInstance((Class<?>) cls2, spcount, n2b10);
int n1x6 = n22;
int i16 = bps;
ByteBuffer rawinbuf2 = ByteBuffer.allocate((n2b23 + n1x6) * spcount * i16);
ByteBuffer rawoutbuf3 = ByteBuffer.allocate(((n2b23 / osf) + 1) * spcount * dbps);
double[] inbuf4 = new double[spcount * (n2b23 + n1x6)];
int delay2 = spcount * ((n2b23 / osf) + 1);
double[] outbuf3 = new double[delay2];
int rp = 0;
int p = 0;
boolean init = true;
ByteBuffer rawoutbuf4 = rawoutbuf3;
double d5 = n24 / 2.0d;
int n25 = fs23 / sumwrite2;
int delay3 = (int) (d5 / n25);
int spcount2 = 0;
ByteBuffer rawinbuf3 = rawinbuf2;
int filter2len3 = ((n1 / 2) / (fs14 / i6)) + 1;
int s1p = 0;
int s1p_backup = 0;
int delay4 = 0;
int ch = delay3;
int delay5 = chanklen;
while (true) {
int delay6 = ch;
int sumwrite3 = delay4;
double[] inbuf5 = inbuf4;
double[] outbuf4 = outbuf3;
int toberead4 = (int) (((Math.floor((n2b23 * i6) / (sumwrite2 * osf)) + 1.0d) + n1x6) - filter2len3);
int toberead22 = toberead4;
if (toberead4 + s1p_backup <= delay5) {
toberead = toberead4;
} else {
toberead = delay5 - s1p_backup;
}
rawinbuf3.position(0);
rawinbuf3.limit(Math.min(rawinbuf3.limit(), i16 * spcount * toberead));
byte[] tempData3 = new byte[rawinbuf3.limit()];
int nsmplread2 = fpi.read(tempData3);
if (nsmplread2 >= 0) {
nsmplread = nsmplread2;
} else {
nsmplread = 0;
}
int nsmplread3 = delay5;
int chanklen6 = rawinbuf3.limit();
if (nsmplread >= chanklen6) {
chanklen2 = nsmplread3;
} else {
chanklen2 = s1p_backup + ((nsmplread / i16) * spcount);
}
rawinbuf3.limit(nsmplread);
ByteBuffer rawinbuf4 = ByteBuffer.wrap(tempData3);
rawinbuf4.position(nsmplread);
rawinbuf4.flip();
int nsmplread4 = nsmplread / (i16 * spcount);
if (i16 == 1) {
tempData = tempData3;
n2b = n2b10;
n2b2 = n1x6;
i = 0;
while (i < nsmplread4 * spcount) {
inbuf5[(spcount * filter2len3) + i] = (rawinbuf4.get(i) - 128.0d) * 0.007874015748031496d;
i++;
}
} else if (i16 == 2) {
tempData = tempData3;
n2b = n2b10;
i = 0;
while (i < nsmplread4 * spcount) {
int v = rawinbuf4.order(ssrc4.byteOrder).asShortBuffer().get(i);
inbuf5[(spcount * filter2len3) + i] = v * 3.051850947599719E-5d;
i++;
n1x6 = n1x6;
}
n2b2 = n1x6;
} else if (i16 == 3) {
tempData = tempData3;
n2b = n2b10;
i = 0;
while (i < nsmplread4 * spcount) {
inbuf5[(spcount * filter2len3) + i] = ((rawinbuf4.get(i * 3) << 0) | (rawinbuf4.get((i * 3) + 1) << 8) | (rawinbuf4.get((i * 3) + 2) << 16)) * 1.1920930376163766E-7d;
i++;
}
n2b2 = n1x6;
} else if (i16 != 4) {
tempData = tempData3;
n2b = n2b10;
i = ip_backup;
n2b2 = n1x6;
} else {
i = 0;
while (true) {
tempData = tempData3;
if (i >= nsmplread4 * spcount) {
break;
}
int v2 = rawinbuf4.order(ssrc4.byteOrder).asIntBuffer().get(i);
inbuf5[(spcount * filter2len3) + i] = v2 * 4.656612875245797E-10d;
i++;
tempData3 = tempData;
n2b10 = n2b10;
}
n2b = n2b10;
n2b2 = n1x6;
}
while (i < spcount * toberead22) {
inbuf5[(spcount * filter2len3) + i] = 0.0d;
i++;
}
int inbuflen2 = filter2len3 + toberead22;
int sumread4 = s1p_backup + nsmplread4;
boolean ending = sumread4 >= chanklen2;
int nsmplwrt1 = n2b23;
int ip2 = ((((rp - 1) * i6) + fs14) / fs14) * spcount;
int s1p_backup2 = s1p;
int osc_backup = p;
int ch2 = 0;
int nsmplwrt22 = ip;
while (true) {
rawinbuf = rawinbuf4;
if (ch2 >= spcount) {
break;
}
int op = ch2;
int n2b11 = n1y * osf;
s1p = s1p_backup2;
int ip3 = ip2 + ch2;
int i17 = i;
if (n2b2 == 7) {
toberead2 = toberead22;
toberead3 = toberead;
for (int p2 = 0; p2 < nsmplwrt1; p2++) {
int s1o = f1order2[s1p];
buf2[ch2][p2] = (stage1[s1o][0] * inbuf5[ip3 + (spcount * 0)]) + (stage1[s1o][1] * inbuf5[ip3 + (spcount * 1)]) + (stage1[s1o][2] * inbuf5[ip3 + (spcount * 2)]) + (stage1[s1o][3] * inbuf5[ip3 + (spcount * 3)]) + (stage1[s1o][4] * inbuf5[ip3 + (spcount * 4)]) + (stage1[s1o][5] * inbuf5[ip3 + (spcount * 5)]) + (stage1[s1o][6] * inbuf5[ip3 + (spcount * 6)]);
ip3 += f1inc3[s1p];
int s1p2 = s1p + 1;
if (s1p2 == n2b11) {
s1p2 = 0;
}
s1p = s1p2;
}
} else if (n2b2 == 9) {
toberead2 = toberead22;
int p3 = 0;
while (p3 < nsmplwrt1) {
int s1o2 = f1order2[s1p];
int toberead5 = toberead;
buf2[ch2][p3] = (stage1[s1o2][0] * inbuf5[ip3 + (spcount * 0)]) + (stage1[s1o2][1] * inbuf5[ip3 + (spcount * 1)]) + (stage1[s1o2][2] * inbuf5[ip3 + (spcount * 2)]) + (stage1[s1o2][3] * inbuf5[ip3 + (spcount * 3)]) + (stage1[s1o2][4] * inbuf5[ip3 + (spcount * 4)]) + (stage1[s1o2][5] * inbuf5[ip3 + (spcount * 5)]) + (stage1[s1o2][6] * inbuf5[ip3 + (spcount * 6)]) + (stage1[s1o2][7] * inbuf5[ip3 + (spcount * 7)]) + (stage1[s1o2][8] * inbuf5[ip3 + (spcount * 8)]);
ip3 += f1inc3[s1p];
int s1p3 = s1p + 1;
if (s1p3 == n2b11) {
s1p3 = 0;
}
s1p = s1p3;
p3++;
toberead = toberead5;
}
toberead3 = toberead;
} else {
int p4 = 0;
while (p4 < nsmplwrt1) {
double tmp = FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE;
int ip22 = ip3;
int s1o3 = f1order2[s1p];
int toberead23 = toberead22;
int toberead24 = 0;
while (toberead24 < n2b2) {
tmp += stage1[s1o3][toberead24] * inbuf5[ip22];
ip22 += spcount;
toberead24++;
}
buf2[ch2][p4] = tmp;
ip3 += f1inc3[s1p];
i17 = toberead24;
int s1p4 = s1p + 1;
if (s1p4 == n2b11) {
s1p4 = 0;
}
s1p = s1p4;
p4++;
toberead22 = toberead23;
}
toberead2 = toberead22;
toberead3 = toberead;
}
int p5 = nsmplwrt1;
while (true) {
int no2 = n2b11;
no = n2b;
if (p5 >= no) {
break;
}
buf2[ch2][p5] = 0.0d;
p5++;
n2b = no;
n2b11 = no2;
}
ssrc4.fft.rdft(no, 1, buf2[ch2], fft_ip, fft_w);
buf2[ch2][0] = stage23[0] * buf2[ch2][0];
buf2[ch2][1] = stage23[1] * buf2[ch2][1];
for (int i18 = 1; i18 < i; i18++) {
double re = (stage23[i18 * 2] * buf2[ch2][i18 * 2]) - (stage23[(i18 * 2) + 1] * buf2[ch2][(i18 * 2) + 1]);
double im2 = (stage23[(i18 * 2) + 1] * buf2[ch2][i18 * 2]) + (stage23[i18 * 2] * buf2[ch2][(i18 * 2) + 1]);
buf2[ch2][i18 * 2] = re;
buf2[ch2][(i18 * 2) + 1] = im2;
}
ssrc4.fft.rdft(no, -1, buf2[ch2], fft_ip, fft_w);
i = osc_backup;
int j = 0;
while (i < n2b23) {
outbuf4[op + (j * spcount)] = buf1[ch2][j] + buf2[ch2][i];
i += osf;
j++;
}
nsmplwrt22 = j;
int osc = i - n2b23;
int j2 = 0;
while (i < no) {
buf1[ch2][j2] = buf2[ch2][i];
i += osf;
j2++;
}
ch2++;
n2b = no;
p = osc;
rawinbuf4 = rawinbuf;
toberead22 = toberead2;
toberead = toberead3;
}
int i19 = i;
int n2b12 = n2b;
int i20 = i6 / frqgcd;
int rp2 = rp + ((i20 * nsmplwrt1) / osf);
rawoutbuf4.clear();
if (twopass) {
int i21 = 0;
while (i21 < nsmplwrt22 * spcount) {
double f = outbuf4[i21] > FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE ? outbuf4[i21] : -outbuf4[i21];
peak[0] = peak[0] < f ? f : peak[0];
rawoutbuf4.asDoubleBuffer().put(i21, outbuf4[i21]);
i21++;
ch2 = ch2;
n2b23 = n2b23;
nsmplwrt1 = nsmplwrt1;
}
n2b22 = n2b23;
i2 = dbps;
i19 = i21;
n2b3 = n2b12;
inbuf = inbuf5;
outbuf = outbuf4;
n2b4 = spcount;
n1x = n2b2;
n1x2 = nsmplwrt22;
ByteBuffer byteBuffer = rawoutbuf4;
chanklen3 = chanklen2;
rawoutbuf = byteBuffer;
} else {
int ch3 = ch2;
n2b22 = n2b23;
i2 = dbps;
if (i2 == 1) {
n2b3 = n2b12;
inbuf = inbuf5;
outbuf = outbuf4;
n2b4 = spcount;
n1x = n2b2;
n1x2 = nsmplwrt22;
ByteBuffer byteBuffer2 = rawoutbuf4;
chanklen3 = chanklen2;
rawoutbuf = byteBuffer2;
double gain2 = gain * 127.0d;
int ch4 = 0;
int i22 = 0;
while (i22 < n1x2 * n2b4) {
if (dither != 0) {
s = do_shaping(outbuf[i22] * gain2, peak, dither, ch4);
} else {
s = ssrc4.RINT(outbuf[i22] * gain2);
if (s < -128) {
double d6 = s / (-128.0d);
peak[0] = peak[0] < d6 ? d6 : peak[0];
s = -128;
}
if (127 < s) {
double d7 = s / 127.0d;
peak[0] = peak[0] < d7 ? d7 : peak[0];
s = 127;
}
}
rawoutbuf.put(i22, (byte) (s + 128));
int ch5 = ch4 + 1;
if (ch5 == n2b4) {
ch5 = 0;
}
ch4 = ch5;
i22++;
}
i19 = i22;
ch2 = ch4;
} else if (i2 == 2) {
n2b3 = n2b12;
double[] inbuf6 = inbuf5;
ByteBuffer rawoutbuf5 = rawoutbuf4;
outbuf = outbuf4;
n2b4 = spcount;
n1x = n2b2;
n1x2 = nsmplwrt22;
double gain22 = gain * 32767.0d;
int ch6 = 0;
int i23 = 0;
while (i23 < n1x2 * n2b4) {
if (dither != 0) {
double d8 = outbuf[i23] * gain22;
chanklen4 = chanklen2;
rawoutbuf2 = rawoutbuf5;
inbuf2 = inbuf6;
i3 = i23;
int i24 = ch6;
s2 = do_shaping(d8, peak, dither, i24);
} else {
chanklen4 = chanklen2;
inbuf2 = inbuf6;
rawoutbuf2 = rawoutbuf5;
i3 = i23;
s2 = ssrc4.RINT(outbuf[i3] * gain22);
if (s2 < -32768) {
double d9 = s2 / (-32768.0d);
peak[0] = peak[0] < d9 ? d9 : peak[0];
s2 = -32768;
}
if (32767 < s2) {
double d10 = s2 / 32767.0d;
peak[0] = peak[0] < d10 ? d10 : peak[0];
s2 = 32767;
}
}
rawoutbuf2.order(ssrc4.byteOrder).asShortBuffer().put(i3, (short) s2);
int ch7 = ch6 + 1;
if (ch7 == n2b4) {
ch7 = 0;
}
ch6 = ch7;
i23 = i3 + 1;
rawoutbuf5 = rawoutbuf2;
chanklen2 = chanklen4;
inbuf6 = inbuf2;
}
chanklen3 = chanklen2;
inbuf = inbuf6;
rawoutbuf = rawoutbuf5;
i19 = i23;
ch2 = ch6;
} else if (i2 != 3) {
n2b3 = n2b12;
inbuf = inbuf5;
ch2 = ch3;
outbuf = outbuf4;
n2b4 = spcount;
n1x = n2b2;
n1x2 = nsmplwrt22;
ByteBuffer byteBuffer3 = rawoutbuf4;
chanklen3 = chanklen2;
rawoutbuf = byteBuffer3;
} else {
double gain23 = gain * 8388607.0d;
int ch8 = 0;
int i25 = 0;
while (i25 < ch) {
if (dither != 0) {
double d11 = outbuf4[i25] * gain23;
inbuf3 = inbuf5;
n2b5 = n2b12;
outbuf2 = outbuf4;
tempData2 = tempData;
n2b6 = spcount;
n1x3 = n2b2;
n1x4 = nsmplwrt22;
i4 = i25;
int i26 = ch8;
s3 = do_shaping(d11, peak, dither, i26);
} else {
i4 = i25;
n2b5 = n2b12;
inbuf3 = inbuf5;
outbuf2 = outbuf4;
tempData2 = tempData;
n2b6 = spcount;
n1x3 = n2b2;
n1x4 = nsmplwrt22;
s3 = ssrc4.RINT(outbuf2[i4] * gain23);
if (s3 < -8388608) {
double d12 = s3 / (-8388608.0d);
peak[0] = peak[0] < d12 ? d12 : peak[0];
s3 = -8388608;
}
if (8388607 < s3) {
double d13 = s3 / 8388607.0d;
peak[0] = peak[0] < d13 ? d13 : peak[0];
s3 = 8388607;
}
}
ByteBuffer rawoutbuf6 = rawoutbuf4;
rawoutbuf6.put(i4 * 3, (byte) (s3 & 255));
int s4 = s3 >> 8;
rawoutbuf6.put((i4 * 3) + 1, (byte) (s4 & 255));
rawoutbuf6.put((i4 * 3) + 2, (byte) ((s4 >> 8) & 255));
int ch9 = ch8 + 1;
if (ch9 == n2b6) {
ch9 = 0;
}
ch8 = ch9;
i25 = i4 + 1;
rawoutbuf4 = rawoutbuf6;
spcount = n2b6;
inbuf5 = inbuf3;
nsmplwrt22 = n1x4;
n2b2 = n1x3;
n2b12 = n2b5;
tempData = tempData2;
outbuf4 = outbuf2;
}
i19 = i25;
n2b3 = n2b12;
ByteBuffer rawoutbuf7 = rawoutbuf4;
outbuf = outbuf4;
n2b4 = spcount;
n1x = n2b2;
n1x2 = nsmplwrt22;
chanklen3 = chanklen2;
inbuf = inbuf5;
ch2 = ch8;
rawoutbuf = rawoutbuf7;
}
}
if (!init) {
if (!ending) {
fs1 = fs14;
int nsmplwrt23 = n1x2;
sumwrite = inbuflen2;
rawoutbuf.position(0);
rawoutbuf.limit(i2 * n2b4 * nsmplwrt23);
ssrc4.writeBuffers(fpo, rawoutbuf);
i5 = sfrq;
sumread2 = sumread4;
sumread = sumwrite3 + nsmplwrt23;
ssrc = ssrc4;
delay = delay6;
nsmplwrt2 = nsmplwrt23;
} else if (((sumread4 * dfrq) / i6) + 2.0d > sumwrite3 + n1x2) {
rawoutbuf.position(0);
rawoutbuf.limit(i2 * n2b4 * n1x2);
ssrc4.writeBuffers(fpo, rawoutbuf);
int i27 = sumwrite3 + n1x2;
fs1 = fs14;
ssrc = ssrc4;
sumwrite = inbuflen2;
i5 = i6;
sumread2 = sumread4;
nsmplwrt2 = n1x2;
sumread = i27;
delay = delay6;
} else {
rawoutbuf.position(0);
int limitData = (int) (i2 * n2b4 * ((Math.floor((sumread4 * dfrq) / i6) + 2.0d) - sumwrite3));
if (limitData > 0) {
rawoutbuf.limit(limitData);
ssrc4.writeBuffers(fpo, rawoutbuf);
ssrc2 = ssrc4;
} else {
ssrc2 = ssrc4;
}
}
int ds = (rp2 - 1) / (fs1 / i5);
double[] inbuf7 = inbuf;
System.arraycopy(inbuf7, nch * ds, inbuf7, 0, (sumwrite - ds) * nch);
int inbuflen3 = sumwrite - ds;
rp = rp2 - ((fs1 / i5) * ds);
int spcount3 = spcount2 + 1;
if ((spcount2 & 7) == 7) {
inbuflen = inbuflen3;
sumread3 = sumread2;
chanklen5 = chanklen3;
} else {
sumread3 = sumread2;
inbuflen = inbuflen3;
chanklen5 = chanklen3;
ssrc.showprogress(sumread3 / chanklen5);
}
filter2len3 = inbuflen;
spcount2 = spcount3;
s1p_backup = sumread3;
i6 = i5;
rawoutbuf4 = rawoutbuf;
ip = nsmplwrt2;
ch = delay;
ssrc4 = ssrc;
delay4 = sumread;
inbuf4 = inbuf7;
fs14 = fs1;
ip_backup = i19;
outbuf3 = outbuf;
n1x6 = n1x;
n2b10 = n2b3;
rawinbuf3 = rawinbuf;
spcount = nch;
i16 = bps;
sumwrite2 = dfrq;
delay5 = chanklen5;
n2b23 = n2b22;
} else {
fs1 = fs14;
int nsmplwrt24 = n1x2;
sumread = sumwrite3;
sumwrite = inbuflen2;
delay = delay6;
if (nsmplwrt24 < delay) {
delay -= nsmplwrt24;
i5 = sfrq;
sumread2 = sumread4;
nsmplwrt2 = nsmplwrt24;
ssrc = ssrc4;
} else if (ending) {
i5 = sfrq;
if (((sumread4 * dfrq) / i5) + 2.0d > (sumread + nsmplwrt24) - delay) {
rawoutbuf.position(i2 * n2b4 * delay);
rawoutbuf.limit(i2 * n2b4 * (nsmplwrt24 - delay));
ssrc = this;
ssrc.writeBuffers(fpo, rawoutbuf);
sumread2 = sumread4;
sumread = (nsmplwrt24 - delay) + sumread;
nsmplwrt2 = nsmplwrt24;
} else {
ssrc2 = this;
rawoutbuf.position(i2 * n2b4 * delay);
rawoutbuf.limit((int) (i2 * n2b4 * ((((Math.floor((sumread4 * dfrq) / i5) + 2.0d) + sumread) + nsmplwrt24) - delay)));
ssrc2.writeBuffers(fpo, rawoutbuf);
break;
}
} else {
i5 = sfrq;
sumread2 = sumread4;
nsmplwrt2 = nsmplwrt24;
ssrc = ssrc4;
rawoutbuf.position(dbps * nch * delay);
rawoutbuf.limit(dbps * nch * nsmplwrt2);
ssrc.writeBuffers(fpo, rawoutbuf);
sumread = (nsmplwrt2 - delay) + sumread;
init = false;
}
int ds2 = (rp2 - 1) / (fs1 / i5);
double[] inbuf72 = inbuf;
System.arraycopy(inbuf72, nch * ds2, inbuf72, 0, (sumwrite - ds2) * nch);
int inbuflen32 = sumwrite - ds2;
rp = rp2 - ((fs1 / i5) * ds2);
int spcount32 = spcount2 + 1;
if ((spcount2 & 7) == 7) {
}
filter2len3 = inbuflen;
spcount2 = spcount32;
s1p_backup = sumread3;
i6 = i5;
rawoutbuf4 = rawoutbuf;
ip = nsmplwrt2;
ch = delay;
ssrc4 = ssrc;
delay4 = sumread;
inbuf4 = inbuf72;
fs14 = fs1;
ip_backup = i19;
outbuf3 = outbuf;
n1x6 = n1x;
n2b10 = n2b3;
rawinbuf3 = rawinbuf;
spcount = nch;
i16 = bps;
sumwrite2 = dfrq;
delay5 = chanklen5;
n2b23 = n2b22;
}
}
ssrc2.showprogress(1.0d);
return peak[0];
}
public double downsample(InputStream fpi, OutputStream fpo, int nch, int bps, int dbps, int sfrq, int dfrq, double gain, int chanklen, boolean twopass, int dither) throws IOException {
int osf;
double d;
int n1;
int n12;
double lpf;
double d2;
int n2;
double[][] stage2;
int fs2;
double[] fft_w;
int[] fft_ip;
int n22;
int ds;
int[] f2inc;
int n2y;
int[] f2order;
int i;
int chanklen2;
int chanklen3;
int chanklen4;
int delay;
int sumwrite;
SSRC ssrc;
int i2;
int i3;
int n2y2;
int rp;
int rps;
ByteBuffer rawoutbuf;
int s2p_backup;
ByteBuffer rawinbuf;
SSRC ssrc2;
int rp2;
int toberead;
double[] inbuf;
int i4;
int i5;
int s;
long j;
int i6;
int s2;
long j2;
int i7;
int n2y3;
int s2p_backup2;
int rp3;
int rps2;
ByteBuffer rawoutbuf2;
int s2p_backup3;
ByteBuffer rawinbuf2;
int n1b;
int rp4;
int toberead2;
int toberead3;
double[] inbuf2;
int s3;
int i8;
int sumread;
int chanklen5;
int nsmplwrt2;
int n13;
int nsmplwrt22;
int ch;
int n2x;
int sumread2;
int ds2;
int n1b2;
int ch2;
int ch3;
int sumread3;
int n1b3;
int chanklen6;
int n1b22 = nch;
int i9 = sfrq;
Class<double> cls = double.class;
int spcount = 0;
double[] peak = {FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE};
int filter1len = this.FFTFIRLEN;
double aa = this.AA;
int frqgcd = gcd(i9, dfrq);
if (dfrq / frqgcd == 1) {
osf = 1;
} else if ((dfrq / frqgcd) % 2 == 0) {
osf = 2;
} else if ((dfrq / frqgcd) % 3 == 0) {
osf = 3;
} else {
throw new IllegalArgumentException(String.format("Resampling from %dHz to %dHz is not supported.\n%d/gcd(%d,%d)=%d must be divided by 2 or 3.", Integer.valueOf(sfrq), Integer.valueOf(dfrq), Integer.valueOf(dfrq), Integer.valueOf(sfrq), Integer.valueOf(dfrq), Integer.valueOf(dfrq / frqgcd)));
}
int fs1 = i9 * osf;
if (aa <= 21.0d) {
d = 0.9222d;
} else {
double d3 = aa - 7.95d;
d = d3 / 14.36d;
}
int i10 = 1;
while (true) {
int n14 = filter1len * i10;
n1 = n14 % 2 != 0 ? n14 : n14 - 1;
n12 = osf;
int filter1len2 = filter1len;
double df = (fs1 * d) / (n1 - 1);
lpf = (dfrq - df) / 2.0d;
if (df < this.DF) {
break;
}
i10 *= 2;
i9 = sfrq;
filter1len = filter1len2;
osf = n12;
cls = cls;
aa = aa;
}
double alp = alpha(aa);
double iza = I0Bessel.value(alp);
FileLog.e("须打log, 不打的话在某些机型上会卡住");
int n1b4 = 1;
while (n1b4 < n1) {
n1b4 *= 2;
}
int n1b5 = n1b4 * 2;
double[] stage1 = new double[n1b5];
int i11 = -(n1 / 2);
while (i11 <= n1 / 2) {
int fs12 = fs1;
int osf2 = n12;
int i12 = i11;
int n1b6 = n1b5;
double[] stage12 = stage1;
stage12[i11 + (n1 / 2)] = ((((win(i11, n1, alp, iza) * hn_lpf(i12, lpf, fs12)) * fs12) / i9) / n1b6) * 2.0d;
i11 = i12 + 1;
fs1 = fs12;
n1b5 = n1b6;
n1 = n1;
aa = aa;
stage1 = stage12;
n12 = osf2;
}
int i13 = i11;
int n1b7 = n1b5;
double[] stage13 = stage1;
int osf3 = n12;
int osf4 = n1;
int n15 = fs1;
int ipsize = (int) (Math.sqrt(n1b7) + 2.0d);
int[] fft_ip2 = new int[ipsize];
fft_ip2[0] = 0;
int wsize = n1b7 / 2;
double[] fft_w2 = new double[wsize];
this.fft.rdft(n1b7, 1, stage13, fft_ip2, fft_w2);
if (osf3 == 1) {
int[] f2inc2 = {i9 / dfrq};
double[][] stage22 = (double[][]) Array.newInstance((Class<?>) cls, 1, 1);
stage22[0][0] = 1.0d;
stage2 = stage22;
f2inc = f2inc2;
fft_ip = fft_ip2;
fft_w = fft_w2;
fs2 = (i9 / frqgcd) * dfrq;
n22 = 1;
n2y = 1;
ds = 1;
f2order = new int[]{0};
i = i13;
} else {
double aa2 = this.AA;
int fs22 = (i9 / frqgcd) * dfrq;
double df2 = (((n15 / 2) - (i9 / 2)) * 2) / 2.0d;
int[] f2inc3 = fft_ip2;
double[] fft_w3 = fft_w2;
double lpf2 = (i9 / 2) + (((n15 / 2) - (i9 / 2)) / 2.0d);
if (aa2 <= 21.0d) {
d2 = 0.9222d;
} else {
double d4 = aa2 - 7.95d;
d2 = d4 / 14.36d;
}
int n23 = (int) (((fs22 / df2) * d2) + 1.0d);
if (n23 % 2 != 0) {
n2 = n23;
} else {
n2 = n23 + 1;
}
double alp2 = alpha(aa2);
double iza2 = I0Bessel.value(alp2);
int n2y4 = fs22 / n15;
int n2x2 = (n2 / n2y4) + 1;
int[] f2order2 = new int[n2y4];
for (int i14 = 0; i14 < n2y4; i14++) {
f2order2[i14] = (fs22 / n15) - (((fs22 / dfrq) * i14) % (fs22 / n15));
if (f2order2[i14] == fs22 / n15) {
f2order2[i14] = 0;
}
}
int[] f2inc4 = new int[n2y4];
for (int i15 = 0; i15 < n2y4; i15++) {
f2inc4[i15] = (((fs22 / dfrq) - f2order2[i15]) / (fs22 / n15)) + 1;
if (f2order2[i15 + 1 == n2y4 ? 0 : i15 + 1] == 0) {
f2inc4[i15] = f2inc4[i15] - 1;
}
}
stage2 = (double[][]) Array.newInstance((Class<?>) cls, n2y4, n2x2);
int i16 = -(n2 / 2);
while (i16 <= n2 / 2) {
int fs23 = fs22;
int i17 = i16;
stage2[((n2 / 2) + i16) % n2y4][((n2 / 2) + i16) / n2y4] = ((win(i16, n2, alp2, iza2) * hn_lpf(i17, lpf2, fs23)) * fs23) / n15;
i16 = i17 + 1;
fs22 = fs23;
f2inc4 = f2inc4;
f2inc3 = f2inc3;
aa2 = aa2;
n2y4 = n2y4;
f2order2 = f2order2;
fft_w3 = fft_w3;
}
fs2 = fs22;
int i18 = i16;
fft_w = fft_w3;
fft_ip = f2inc3;
int[] fft_ip3 = f2inc4;
n22 = n2;
ds = n2x2;
f2inc = fft_ip3;
n2y = n2y4;
f2order = f2order2;
i = i18;
}
setstarttime();
int n1b23 = n1b7 / 2;
int nsmplwrt23 = 0;
double[][] buf1 = (double[][]) Array.newInstance((Class<?>) cls, n1b22, n1b7);
double[][] buf2 = (double[][]) Array.newInstance((Class<?>) cls, n1b22, ds + 1 + n1b23);
int n16 = bps;
ByteBuffer rawinbuf3 = ByteBuffer.allocate(((n1b23 / osf3) + osf3 + 1) * n1b22 * n16);
int i19 = i;
int n2y5 = n2y;
ByteBuffer rawoutbuf3 = ByteBuffer.allocate((int) ((((n1b23 * dfrq) / i9) + 1.0d) * dbps * n1b22));
double[] inbuf3 = new double[((n1b23 / osf3) + osf3 + 1) * n1b22];
int n1b8 = n1b7;
double[] inbuf4 = inbuf3;
ByteBuffer rawoutbuf4 = rawoutbuf3;
double[] outbuf = new double[(int) (n1b22 * (((n1b23 * dfrq) / i9) + 1.0d))];
int rp5 = 0;
int rp22 = 0;
boolean init = true;
int n17 = osf4;
int s2p = 0;
int fs24 = fs2;
int delay2 = (int) (((n17 / 2.0d) / (n15 / dfrq)) + ((n22 / 2.0d) / (fs2 / dfrq)));
int delay3 = 0;
int delay4 = delay2;
int sumwrite2 = 0;
int sumread4 = i19;
ByteBuffer rawinbuf4 = rawinbuf3;
int ch4 = chanklen;
while (true) {
int toberead4 = (((n1b23 - 0) - 1) / osf3) + 1;
int rp6 = rp5;
int rp7 = toberead4 + delay3;
if (rp7 > ch4) {
toberead4 = ch4 - delay3;
}
rawinbuf4.position(0);
rawinbuf4.limit(n16 * n1b22 * toberead4);
byte[] tempData = new byte[rawinbuf4.limit()];
int n24 = n22;
int nsmplread = fpi.read(tempData);
if (nsmplread >= 0) {
chanklen2 = ch4;
chanklen3 = nsmplread;
} else {
chanklen2 = ch4;
chanklen3 = 0;
}
int nsmplread2 = sumread4;
int i20 = rawinbuf4.limit();
if (chanklen3 >= i20) {
chanklen4 = chanklen2;
} else {
chanklen4 = ((chanklen3 / n16) * n1b22) + delay3;
}
rawinbuf4.limit(chanklen3);
ByteBuffer rawinbuf5 = ByteBuffer.wrap(tempData);
rawinbuf5.position(chanklen3);
rawinbuf5.flip();
int nsmplread3 = chanklen3 / (n16 * n1b22);
if (n16 == 1) {
delay = delay4;
sumwrite = sumwrite2;
int n18 = n17;
ssrc = this;
i2 = 0;
while (i2 < nsmplread3 * n1b22) {
inbuf4[(n1b22 * 0) + i2] = ((rawinbuf5.get(i2) & UByte.MAX_VALUE) - 128) * 0.007874015748031496d;
i2++;
n18 = n18;
}
i3 = n18;
} else if (n16 == 2) {
delay = delay4;
sumwrite = sumwrite2;
ssrc = this;
i2 = 0;
while (i2 < nsmplread3 * n1b22) {
int v = rawinbuf5.order(ssrc.byteOrder).asShortBuffer().get(i2);
inbuf4[(n1b22 * 0) + i2] = v * 3.051850947599719E-5d;
i2++;
n17 = n17;
}
i3 = n17;
} else if (n16 == 3) {
delay = delay4;
sumwrite = sumwrite2;
ssrc = this;
i2 = 0;
while (i2 < nsmplread3 * n1b22) {
inbuf4[(n1b22 * 0) + i2] = (((rawinbuf5.get(i2 * 3) & UByte.MAX_VALUE) << 0) | ((rawinbuf5.get((i2 * 3) + 1) & UByte.MAX_VALUE) << 8) | ((rawinbuf5.get((i2 * 3) + 2) & UByte.MAX_VALUE) << 16)) * 1.1920930376163766E-7d;
i2++;
}
i3 = n17;
} else if (n16 != 4) {
delay = delay4;
sumwrite = sumwrite2;
i2 = nsmplread2;
ssrc = this;
i3 = n17;
} else {
i2 = 0;
while (true) {
byte[] tempData2 = tempData;
if (i2 >= nsmplread3 * n1b22) {
break;
}
int v2 = rawinbuf5.order(this.byteOrder).getInt(i2);
inbuf4[(n1b22 * 0) + i2] = v2 * 4.656612875245797E-10d;
i2++;
tempData = tempData2;
delay4 = delay4;
sumwrite2 = sumwrite2;
}
ssrc = this;
delay = delay4;
sumwrite = sumwrite2;
i3 = n17;
}
while (i2 < n1b22 * toberead4) {
inbuf4[i2] = 0.0d;
i2++;
}
int sumread5 = delay3 + nsmplread3;
int sumread6 = fpi.available();
boolean ending = sumread6 < 0 || sumread5 >= chanklen4;
int n2y6 = 0;
int n1b24 = s2p;
int ch5 = 0;
int rps3 = 0;
int nsmplwrt24 = nsmplwrt23;
int rps4 = rp6;
while (ch5 < n1b22) {
int rps5 = n2y6;
for (int i21 = 0; i21 < rps5; i21++) {
buf1[ch5][i21] = 0.0d;
}
int k = rps5;
int i22 = 0;
while (k < n1b23) {
buf1[ch5][k] = inbuf4[(i22 * n1b22) + ch5];
ByteBuffer rawinbuf6 = rawinbuf5;
int k2 = k + 1;
while (true) {
chanklen6 = chanklen4;
int chanklen7 = k + osf3;
if (k2 < chanklen7) {
buf1[ch5][k2] = 0.0d;
k2++;
chanklen4 = chanklen6;
}
}
k += osf3;
i22++;
rawinbuf5 = rawinbuf6;
chanklen4 = chanklen6;
}
ByteBuffer rawinbuf7 = rawinbuf5;
int chanklen8 = chanklen4;
int k3 = n1b23;
while (true) {
n1b3 = n1b8;
if (k3 >= n1b3) {
break;
}
buf1[ch5][k3] = 0.0d;
k3++;
n1b8 = n1b3;
}
rps3 = k - n1b23;
rps4 += i22;
ssrc.fft.rdft(n1b3, 1, buf1[ch5], fft_ip, fft_w);
buf1[ch5][0] = stage13[0] * buf1[ch5][0];
buf1[ch5][1] = stage13[1] * buf1[ch5][1];
for (int i23 = 1; i23 < n1b23; i23++) {
double re = (stage13[i23 * 2] * buf1[ch5][i23 * 2]) - (stage13[(i23 * 2) + 1] * buf1[ch5][(i23 * 2) + 1]);
double im2 = (stage13[(i23 * 2) + 1] * buf1[ch5][i23 * 2]) + (stage13[i23 * 2] * buf1[ch5][(i23 * 2) + 1]);
buf1[ch5][i23 * 2] = re;
buf1[ch5][(i23 * 2) + 1] = im2;
}
ssrc.fft.rdft(n1b3, -1, buf1[ch5], fft_ip, fft_w);
int i24 = 0;
while (i24 < n1b23) {
double[] dArr = buf2[ch5];
int i25 = ds + 1 + i24;
dArr[i25] = dArr[i25] + buf1[ch5][i24];
i24++;
}
int t1 = rp22 / (fs24 / n15);
if (rp22 % (fs24 / n15) != 0) {
t1++;
}
int i26 = i24;
char c = 0;
int i27 = (buf2[0].length * ch5) + t1;
s2p = n1b24;
int p = 0;
while (true) {
int k4 = k3;
if (i27 - (buf2[c].length * ch5) < n1b23 + 1) {
double tmp = FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE;
int bp2 = i27;
int s2o = f2order[s2p];
int bp = i27 + f2inc[s2p];
int bp3 = s2p + 1;
int rps_backup = n2y6;
int rps_backup2 = n2y5;
if (bp3 != rps_backup2) {
s2p = bp3;
} else {
s2p = 0;
}
int i28 = 0;
while (i28 < ds) {
tmp += stage2[s2o][i28] * buf2[bp2 / buf2[0].length][bp2 % buf2[0].length];
bp2++;
i28++;
n1b23 = n1b23;
n1b3 = n1b3;
}
outbuf[0 + (p * n1b22) + ch5] = tmp;
p++;
i26 = i28;
n2y5 = rps_backup2;
k3 = k4;
n2y6 = rps_backup;
n1b23 = n1b23;
c = 0;
i27 = bp;
}
}
int n1b9 = n1b3;
int rps_backup3 = n2y6;
nsmplwrt24 = p;
ch5++;
ssrc = this;
i2 = i26;
n2y6 = rps_backup3;
rawinbuf5 = rawinbuf7;
chanklen4 = chanklen8;
n1b8 = n1b9;
}
int i29 = i2;
ByteBuffer rawinbuf8 = rawinbuf5;
int chanklen9 = chanklen4;
int n2y7 = n2y5;
int n1b10 = n1b8;
int n1b11 = n1b23;
int chanklen10 = dfrq;
int rp23 = rp22 + ((fs24 / chanklen10) * nsmplwrt24);
rawoutbuf4.clear();
if (twopass) {
int i30 = 0;
while (i30 < nsmplwrt24 * n1b22) {
double f = outbuf[i30] > FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE ? outbuf[i30] : -outbuf[i30];
peak[0] = peak[0] < f ? f : peak[0];
rawoutbuf4.asDoubleBuffer().put(i30, outbuf[i30]);
i30++;
}
n2y2 = n2y7;
rp = rps4;
rps = rps3;
rawoutbuf = rawoutbuf4;
s2p_backup = n1b11;
rawinbuf = rawinbuf8;
n1b8 = n1b10;
ssrc2 = this;
rp2 = chanklen10;
i4 = i30;
toberead = chanklen9;
inbuf = inbuf4;
} else if (dbps != 1) {
if (dbps != 2) {
if (dbps != 3) {
n2y2 = n2y7;
rp = rps4;
rps = rps3;
rawoutbuf = rawoutbuf4;
s2p_backup = n1b11;
rawinbuf = rawinbuf8;
n1b8 = n1b10;
ssrc2 = this;
rp2 = chanklen10;
i4 = i29;
toberead = chanklen9;
inbuf = inbuf4;
} else {
double gain2 = gain * 8388607.0d;
int i31 = 0;
int ch6 = 0;
while (i31 < ch) {
if (dither != 0) {
double d5 = outbuf[i31] * gain2;
rawinbuf2 = rawinbuf8;
s2p_backup2 = n1b24;
s2p_backup3 = n1b11;
rp3 = rps4;
rps2 = rps3;
n1b = n1b10;
rp4 = chanklen10;
double[] dArr2 = inbuf4;
toberead2 = toberead4;
toberead3 = chanklen9;
inbuf2 = dArr2;
i7 = i31;
n2y3 = n2y7;
rawoutbuf2 = rawoutbuf4;
int i32 = ch6;
s3 = do_shaping(d5, peak, dither, i32);
} else {
i7 = i31;
n2y3 = n2y7;
s2p_backup2 = n1b24;
rp3 = rps4;
rps2 = rps3;
rawoutbuf2 = rawoutbuf4;
s2p_backup3 = n1b11;
rawinbuf2 = rawinbuf8;
n1b = n1b10;
rp4 = chanklen10;
double[] dArr3 = inbuf4;
toberead2 = toberead4;
toberead3 = chanklen9;
inbuf2 = dArr3;
s3 = RINT(outbuf[i7] * gain2);
if (s3 < -8388608) {
double d6 = s3 / (-8388608.0d);
peak[0] = peak[0] < d6 ? d6 : peak[0];
s3 = -8388608;
}
if (8388607 < s3) {
double d7 = s3 / 8388607.0d;
peak[0] = peak[0] < d7 ? d7 : peak[0];
s3 = 8388607;
}
}
rawoutbuf2.put(i7 * 3, (byte) (s3 & 255));
int s4 = s3 >> 8;
rawoutbuf2.put((i7 * 3) + 1, (byte) (s4 & 255));
rawoutbuf2.put((i7 * 3) + 2, (byte) ((s4 >> 8) & 255));
int ch7 = ch6 + 1;
if (ch7 == n1b22) {
ch7 = 0;
}
ch6 = ch7;
i31 = i7 + 1;
chanklen10 = rp4;
rawoutbuf4 = rawoutbuf2;
rps3 = rps2;
rps4 = rp3;
rawinbuf8 = rawinbuf2;
n1b10 = n1b;
n2y7 = n2y3;
n1b11 = s2p_backup3;
n1b24 = s2p_backup2;
double[] dArr4 = inbuf2;
chanklen9 = toberead3;
toberead4 = toberead2;
inbuf4 = dArr4;
}
n2y2 = n2y7;
rp = rps4;
rps = rps3;
rawoutbuf = rawoutbuf4;
s2p_backup = n1b11;
rawinbuf = rawinbuf8;
n1b8 = n1b10;
ssrc2 = this;
rp2 = chanklen10;
toberead = chanklen9;
inbuf = inbuf4;
i4 = i31;
ch5 = ch6;
}
} else {
n2y2 = n2y7;
rp = rps4;
rps = rps3;
rawoutbuf = rawoutbuf4;
s2p_backup = n1b11;
rawinbuf = rawinbuf8;
n1b8 = n1b10;
ssrc2 = this;
rp2 = chanklen10;
toberead = chanklen9;
inbuf = inbuf4;
double gain22 = gain * 32767.0d;
int ch8 = 0;
int i33 = 0;
while (i33 < ch) {
if (dither != 0) {
double d8 = outbuf[i33] * gain22;
i6 = i33;
int i34 = ch8;
s2 = do_shaping(d8, peak, dither, i34);
j2 = 4674736138332667904L;
} else {
i6 = i33;
s2 = ssrc2.RINT(outbuf[i6] * gain22);
if (s2 < -32768) {
double d9 = s2 / (-32768.0d);
peak[0] = peak[0] < d9 ? d9 : peak[0];
s2 = -32768;
}
if (32767 >= s2) {
j2 = 4674736138332667904L;
} else {
j2 = 4674736138332667904L;
double d10 = s2 / 32767.0d;
peak[0] = peak[0] < d10 ? d10 : peak[0];
s2 = 32767;
}
}
rawoutbuf.order(ssrc2.byteOrder).asShortBuffer().put(i6, (short) s2);
int ch9 = ch8 + 1;
if (ch9 == n1b22) {
ch9 = 0;
}
ch8 = ch9;
i33 = i6 + 1;
}
i4 = i33;
ch5 = ch8;
}
} else {
n2y2 = n2y7;
rp = rps4;
rps = rps3;
rawoutbuf = rawoutbuf4;
s2p_backup = n1b11;
rawinbuf = rawinbuf8;
n1b8 = n1b10;
ssrc2 = this;
rp2 = chanklen10;
toberead = chanklen9;
inbuf = inbuf4;
double gain23 = gain * 127.0d;
int ch10 = 0;
int i35 = 0;
while (i35 < ch) {
if (dither != 0) {
double d11 = outbuf[i35] * gain23;
i5 = i35;
int i36 = ch10;
s = do_shaping(d11, peak, dither, i36);
j = 4638637247447433216L;
} else {
i5 = i35;
s = ssrc2.RINT(outbuf[i5] * gain23);
if (s < -128) {
double d12 = s / (-128.0d);
peak[0] = peak[0] < d12 ? d12 : peak[0];
s = -128;
}
if (127 >= s) {
j = 4638637247447433216L;
} else {
j = 4638637247447433216L;
double d13 = s / 127.0d;
peak[0] = peak[0] < d13 ? d13 : peak[0];
s = 127;
}
}
rawoutbuf.put(i5, (byte) (s + 128));
int ch11 = ch10 + 1;
if (ch11 == n1b22) {
ch11 = 0;
}
ch10 = ch11;
i35 = i5 + 1;
}
i4 = i35;
ch5 = ch10;
}
if (!init) {
if (ending) {
i8 = i4;
n13 = i3;
if (((sumread5 * rp2) / sfrq) + 2.0d > sumwrite + nsmplwrt24) {
rawoutbuf.position(0);
rawoutbuf.limit(dbps * n1b22 * nsmplwrt24);
ssrc2.writeBuffers(fpo, rawoutbuf);
int i37 = sumwrite + nsmplwrt24;
sumread = sumread5;
n2x = ds;
sumread2 = n1b22;
chanklen5 = toberead;
nsmplwrt2 = nsmplwrt24;
ch = delay;
nsmplwrt22 = s2p_backup;
sumwrite2 = i37;
} else {
rawoutbuf.position(0);
int limitData = (int) (dbps * n1b22 * ((Math.floor((sumread5 * rp2) / sfrq) + 2.0d) - sumwrite));
if (limitData > 0) {
rawoutbuf.limit(limitData);
ssrc2.writeBuffers(fpo, rawoutbuf);
}
}
} else {
i8 = i4;
sumread = sumread5;
chanklen5 = toberead;
nsmplwrt2 = nsmplwrt24;
n13 = i3;
int chanklen11 = sumwrite;
nsmplwrt22 = s2p_backup;
rawoutbuf.position(0);
rawoutbuf.limit(dbps * nch * nsmplwrt2);
ssrc2.writeBuffers(fpo, rawoutbuf);
sumwrite2 = chanklen11 + nsmplwrt2;
sumread2 = nch;
n2x = ds;
ch = delay;
}
ds2 = (rp23 - 1) / (fs24 / n15);
n1b2 = nsmplwrt22;
if (ds2 > n1b2) {
ds2 = n1b2;
}
ch2 = 0;
while (ch2 < sumread2) {
System.arraycopy(buf2[ch2], ds2, buf2[ch2], 0, ((n2x + 1) + n1b2) - ds2);
ch2++;
nsmplwrt2 = nsmplwrt2;
}
int nsmplwrt25 = nsmplwrt2;
int nsmplwrt26 = fs24 / n15;
rp22 = rp23 - (nsmplwrt26 * ds2);
for (ch3 = 0; ch3 < sumread2; ch3++) {
System.arraycopy(buf1[ch3], n1b2, buf2[ch3], n2x + 1, n1b2);
}
int spcount2 = spcount + 1;
if ((spcount & 7) == 7) {
sumread3 = sumread;
ch4 = chanklen5;
} else {
sumread3 = sumread;
ch4 = chanklen5;
ssrc2.showprogress(sumread3 / ch4);
}
spcount = spcount2;
delay4 = ch;
n1b23 = n1b2;
rawoutbuf4 = rawoutbuf;
n17 = n13;
nsmplwrt23 = nsmplwrt25;
ds = n2x;
rp5 = rp;
rawinbuf4 = rawinbuf;
inbuf4 = inbuf;
n2y5 = n2y2;
n16 = bps;
delay3 = sumread3;
n1b22 = sumread2;
n22 = n24;
sumread4 = i8;
} else {
i8 = i4;
sumread = sumread5;
int i38 = n1b22;
chanklen5 = toberead;
nsmplwrt2 = nsmplwrt24;
n13 = i3;
int chanklen12 = sumwrite;
nsmplwrt22 = s2p_backup;
ch = delay;
if (nsmplwrt2 < ch) {
ch -= nsmplwrt2;
sumread2 = i38;
n2x = ds;
sumwrite2 = chanklen12;
} else if (ending) {
if (((sumread * rp2) / sfrq) + 2.0d > (chanklen12 + nsmplwrt2) - ch) {
rawoutbuf.position(dbps * nch * ch);
rawoutbuf.limit(dbps * nch * (nsmplwrt2 - ch));
ssrc2.writeBuffers(fpo, rawoutbuf);
sumwrite2 = chanklen12 + (nsmplwrt2 - ch);
sumread = sumread;
n2x = ds;
sumread2 = nch;
} else {
rawoutbuf.position(dbps * nch * ch);
rawoutbuf.limit((int) (dbps * nch * ((((Math.floor((sumread * rp2) / sfrq) + 2.0d) + chanklen12) + nsmplwrt2) - ch)));
ssrc2.writeBuffers(fpo, rawoutbuf);
break;
}
} else {
n2x = ds;
sumread2 = nch;
rawoutbuf.position(dbps * sumread2 * ch);
rawoutbuf.limit(dbps * sumread2 * nsmplwrt2);
ssrc2.writeBuffers(fpo, rawoutbuf);
sumwrite2 = chanklen12 + (nsmplwrt2 - ch);
init = false;
}
ds2 = (rp23 - 1) / (fs24 / n15);
n1b2 = nsmplwrt22;
if (ds2 > n1b2) {
}
ch2 = 0;
while (ch2 < sumread2) {
}
int nsmplwrt252 = nsmplwrt2;
int nsmplwrt262 = fs24 / n15;
rp22 = rp23 - (nsmplwrt262 * ds2);
while (ch3 < sumread2) {
}
int spcount22 = spcount + 1;
if ((spcount & 7) == 7) {
}
spcount = spcount22;
delay4 = ch;
n1b23 = n1b2;
rawoutbuf4 = rawoutbuf;
n17 = n13;
nsmplwrt23 = nsmplwrt252;
ds = n2x;
rp5 = rp;
rawinbuf4 = rawinbuf;
inbuf4 = inbuf;
n2y5 = n2y2;
n16 = bps;
delay3 = sumread3;
n1b22 = sumread2;
n22 = n24;
sumread4 = i8;
}
}
ssrc2.showprogress(1.0d);
return peak[0];
}
public double no_src(InputStream fpi, OutputStream fpo, int nch, int bps, int dbps, double gain, int chanklen, boolean twopass, int dither) throws IOException {
ByteBuffer leos;
ByteBuffer buf;
int sumread;
ByteBuffer leos2;
int s;
InputStream inputStream = fpi;
int i = 1;
int i2 = 0;
double[] peak = {FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE};
setstarttime();
if (!twopass) {
leos = null;
} else {
ByteBuffer leos3 = ByteBuffer.allocate(8);
leos = leos3;
}
int i3 = 4;
ByteBuffer buf2 = ByteBuffer.allocate(4);
int ch = 0;
int sumread2 = 0;
while (sumread2 < ch) {
double f = FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE;
if (bps == i) {
buf2.position(0);
buf2.limit(1);
byte[] tempData = new byte[buf2.limit()];
inputStream.read(tempData);
ByteBuffer buf3 = ByteBuffer.wrap(tempData);
buf3.position(buf3.limit());
buf3.flip();
double f2 = 0.007874015748031496d * (buf3.get(0) + ByteCompanionObject.MIN_VALUE);
buf = buf3;
f = f2;
} else if (bps != 2) {
if (bps == 3) {
buf2.position(i2);
buf2.limit(3);
byte[] tempData2 = new byte[buf2.limit()];
inputStream.read(tempData2);
ByteBuffer buf4 = ByteBuffer.wrap(tempData2);
buf4.position(buf4.limit());
buf4.flip();
f = (((buf4.get(1) & UByte.MAX_VALUE) << 8) | ((buf4.get(i2) & UByte.MAX_VALUE) << i2) | ((buf4.get(2) & UByte.MAX_VALUE) << 16)) * 1.1920930376163766E-7d;
buf = buf4;
} else if (bps != i3) {
buf = buf2;
} else {
buf2.position(i2);
buf2.limit(i3);
byte[] tempData3 = new byte[buf2.limit()];
inputStream.read(tempData3);
ByteBuffer buf5 = ByteBuffer.wrap(tempData3);
buf5.position(buf5.limit());
buf5.flip();
int s2 = buf5.order(this.byteOrder).asIntBuffer().get(i2);
f = s2 * 4.656612875245797E-10d;
buf = buf5;
}
} else {
buf2.position(0);
buf2.limit(2);
byte[] tempData4 = new byte[buf2.limit()];
inputStream.read(tempData4);
ByteBuffer buf6 = ByteBuffer.wrap(tempData4);
buf6.position(buf6.limit());
buf6.flip();
int s3 = buf6.order(this.byteOrder).asShortBuffer().get(0);
double f3 = s3;
f = f3 * 3.051850947599719E-5d;
buf = buf6;
}
if (fpi.available() == 0) {
break;
}
double f4 = f * gain;
if (!twopass) {
if (dbps == 1) {
sumread = sumread2;
leos2 = leos;
double f5 = f4 * 127.0d;
int s4 = dither != 0 ? do_shaping(f5, peak, dither, ch) : RINT(f5);
buf.position(0);
buf.limit(1);
buf.put(0, (byte) (s4 + 128));
buf.flip();
writeBuffers(fpo, buf);
} else if (dbps == 2) {
sumread = sumread2;
leos2 = leos;
double f6 = f4 * 32767.0d;
int s5 = dither != 0 ? do_shaping(f6, peak, dither, ch) : RINT(f6);
buf.position(0);
buf.limit(2);
buf.asShortBuffer().put(0, (short) s5);
buf.flip();
writeBuffers(fpo, buf);
} else if (dbps != 3) {
sumread = sumread2;
leos2 = leos;
} else {
double f7 = 8388607.0d * f4;
if (dither != 0) {
sumread = sumread2;
leos2 = leos;
s = do_shaping(f7, peak, dither, ch);
} else {
sumread = sumread2;
leos2 = leos;
s = RINT(f7);
}
buf.position(0);
buf.limit(3);
buf.put(0, (byte) (s & 255));
int s6 = s >> 8;
buf.put(1, (byte) (s6 & 255));
buf.put(2, (byte) ((s6 >> 8) & 255));
buf.flip();
writeBuffers(fpo, buf);
}
} else {
sumread = sumread2;
leos2 = leos;
double p = f4 > FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE ? f4 : -f4;
peak[0] = peak[0] < p ? p : peak[0];
leos2.position(0);
leos2.putDouble(f4);
leos2.flip();
writeBuffers(fpo, leos2);
}
int ch2 = ch + 1;
if (ch2 != nch) {
ch = ch2;
} else {
ch = 0;
}
int ch3 = sumread + 1;
if ((262143 & ch3) == 0) {
showprogress(ch3 / (chanklen * nch));
}
sumread2 = ch3;
leos = leos2;
buf2 = buf;
i3 = 4;
i = 1;
i2 = 0;
inputStream = fpi;
}
showprogress(1.0d);
return peak[0];
}
public static void main(String[] args) throws Exception {
new SSRC(args);
}
public SSRC() {
this.byteOrder = ByteOrder.LITTLE_ENDIAN;
this.fft = new SplitRadixFft();
this.AA = 170.0d;
this.DF = 100.0d;
this.FFTFIRLEN = 65536;
this.quiet = false;
}
SSRC(String[] argv) throws IOException {
int i;
int i2;
String tmpfn;
short nch;
int length;
String dfn;
double att;
int dbps;
int dfrq;
int dither;
int bps;
int dbps2;
short nch2;
InputStream fpi;
String dfn2;
FileOutputStream fpo;
String str;
int dbps3;
double att2;
int sfrq;
SSRC ssrc;
int samp2;
int i3;
String str2;
double d;
FileOutputStream fpo2;
int length2;
short dbps4;
SSRC ssrc2;
File ft;
String tmpfn2;
File ft2;
int samp3;
FileOutputStream fpo3;
int dbps5;
String str3;
int length3;
int dfrq2;
int sfrq2;
short nch3;
int nch4;
int length4;
double att3;
int i4;
double att4;
int samp4;
int dbps6;
int sumread;
ByteBuffer leis;
FileChannel fpti;
File ft3;
int samp5;
double att5;
FileOutputStream fpo4;
int s;
double f;
int s2;
double d2;
double d3;
double d4;
double d5;
double d6;
double d7;
int max;
int dbps7;
FileInputStream fpi2;
SSRC ssrc3 = this;
ssrc3.byteOrder = ByteOrder.LITTLE_ENDIAN;
ssrc3.fft = new SplitRadixFft();
ssrc3.AA = 170.0d;
ssrc3.DF = 100.0d;
ssrc3.FFTFIRLEN = 65536;
ssrc3.quiet = false;
FileInputStream fpi3 = null;
double[] peak = {FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE};
int dfrq3 = -1;
int i5 = 0;
double noiseamp = 0.18d;
int pdf = 0;
int pdf2 = 0;
String tmpfn3 = null;
int dbps8 = -1;
int dither2 = 0;
boolean twopass = false;
double att6 = 0.0d;
for (int i6 = 0; i5 < argv.length && argv[i5].charAt(i6) == '-'; i6 = 0) {
if (argv[i5].equals("--rate")) {
i5++;
int dfrq4 = Integer.parseInt(argv[i5]);
dfrq3 = dfrq4;
fpi2 = fpi3;
} else if (argv[i5].equals("--att")) {
i5++;
att6 = Float.parseFloat(argv[i5]);
fpi2 = fpi3;
} else if (argv[i5].equals("--bits")) {
i5++;
int dbps9 = Integer.parseInt(argv[i5]);
if (dbps9 != 8 && dbps9 != 16 && dbps9 != 24) {
throw new IllegalArgumentException("Error: Only 8bit, 16bit and 24bit PCM are supported.");
}
dbps8 = dbps9 / 8;
fpi2 = fpi3;
} else if (argv[i5].equals("--twopass")) {
twopass = true;
fpi2 = fpi3;
} else if (argv[i5].equals("--normalize")) {
twopass = true;
fpi2 = fpi3;
pdf2 = 1;
} else if (argv[i5].equals("--dither")) {
try {
dither2 = Integer.parseInt(argv[i5 + 1]);
if (dither2 < 0 || dither2 > 4) {
throw new IllegalArgumentException("unrecognized dither type : " + argv[i5 + 1]);
break;
}
i5++;
fpi2 = fpi3;
} catch (NumberFormatException e) {
dither2 = -1;
fpi2 = fpi3;
}
} else if (argv[i5].equals("--pdf")) {
try {
int pdf3 = Integer.parseInt(argv[i5 + 1]);
if (pdf3 < 0 || pdf3 > 2) {
try {
StringBuilder sb = new StringBuilder();
sb.append("unrecognized p.d.f. type : ");
try {
sb.append(argv[i5 + 1]);
throw new IllegalArgumentException(sb.toString());
} catch (NumberFormatException e2) {
throw new IllegalArgumentException("unrecognized p.d.f. type : " + argv[i5 + 1]);
}
} catch (NumberFormatException e3) {
}
} else {
i5++;
try {
double noiseamp2 = Double.parseDouble(argv[i5 + 1]);
i5++;
fpi2 = fpi3;
noiseamp = noiseamp2;
pdf = pdf3;
} catch (NumberFormatException e4) {
double noiseamp3 = presets[pdf3];
fpi2 = fpi3;
noiseamp = noiseamp3;
pdf = pdf3;
}
}
} catch (NumberFormatException e5) {
}
} else {
fpi2 = fpi3;
if (argv[i5].equals("--quiet")) {
ssrc3.quiet = true;
} else if (argv[i5].equals("--tmpfile")) {
i5++;
String tmpfn4 = argv[i5];
tmpfn3 = tmpfn4;
} else {
String tmpfn5 = argv[i5];
if (tmpfn5.equals("--profile")) {
if (argv[i5 + 1].equals("fast")) {
ssrc3.AA = 96.0d;
ssrc3.DF = 8000.0d;
ssrc3.FFTFIRLEN = 1024;
} else if (!argv[i5 + 1].equals("standard")) {
throw new IllegalArgumentException("unrecognized profile : " + argv[i5 + 1]);
}
i5++;
} else {
throw new IllegalArgumentException("unrecognized option : " + argv[i5]);
}
}
}
i5++;
fpi3 = fpi2;
}
if (!ssrc3.quiet) {
System.err.printf("Shibatch sampling rate converter version 1.30(high precision/nio)\n\n", new Object[0]);
}
if (argv.length - i5 != 2) {
usage();
throw new IllegalStateException("too few arguments");
}
String sfn = argv[i5];
String dfn3 = argv[i5 + 1];
try {
FileInputStream fpi4 = new FileInputStream(sfn);
ByteBuffer bb = ByteBuffer.allocate(256).order(ByteOrder.LITTLE_ENDIAN);
bb.limit(36);
fpi4.getChannel().read(bb);
bb.flip();
System.err.println("p: " + bb.position() + ", l: " + bb.limit());
if (bb.get() == 82) {
i = 1;
} else {
i = 1;
ssrc3.fmterr(1);
}
if (bb.get() != 73) {
ssrc3.fmterr(i);
}
if (bb.get() != 70) {
ssrc3.fmterr(i);
}
if (bb.get() != 70) {
ssrc3.fmterr(i);
}
bb.getInt();
if (bb.get() != 87) {
ssrc3.fmterr(2);
}
if (bb.get() != 65) {
ssrc3.fmterr(2);
}
if (bb.get() != 86) {
ssrc3.fmterr(2);
}
if (bb.get() != 69) {
ssrc3.fmterr(2);
}
if (bb.get() != 102) {
ssrc3.fmterr(2);
}
if (bb.get() != 109) {
ssrc3.fmterr(2);
}
if (bb.get() != 116) {
ssrc3.fmterr(2);
}
if (bb.get() != 32) {
ssrc3.fmterr(2);
}
int sizeOfFmt = bb.getInt();
if (bb.getShort() != 1) {
throw new IllegalStateException("Error: Only PCM is supported.");
}
short nch5 = bb.getShort();
int sfrq3 = bb.getInt();
int bps2 = bb.getInt();
if ((bps2 % sfrq3) * nch5 == 0) {
i2 = i5;
} else {
i2 = i5;
ssrc3.fmterr(4);
}
bb.getShort();
bb.getShort();
int length5 = bps2 / (sfrq3 * nch5);
if (sizeOfFmt > 16) {
bb.position(0);
bb.limit(2);
fpi4.read(ssrc3.getDataFromByteBuffer(bb));
bb.flip();
short sizeofExtended = bb.getShort();
tmpfn = tmpfn3;
nch = nch5;
fpi4.getChannel().position(fpi4.getChannel().position() + sizeofExtended);
} else {
tmpfn = tmpfn3;
nch = nch5;
}
while (true) {
bb.position(0);
bb.limit(8);
fpi4.getChannel().read(bb);
bb.flip();
byte c0 = bb.get();
byte c1 = bb.get();
byte c2 = bb.get();
byte c3 = bb.get();
length = bb.getInt();
ByteBuffer bb2 = bb;
dfn = dfn3;
att = att6;
System.err.printf("chunk: %c%c%c%c\n", Integer.valueOf(c0), Integer.valueOf(c1), Integer.valueOf(c2), Integer.valueOf(c3));
if (c0 == 100 && c1 == 97) {
if (c2 == 116 && c3 == 97) {
break;
}
}
if (fpi4.getChannel().position() == fpi4.getChannel().size()) {
break;
}
FileInputStream fpi5 = fpi4;
fpi5.getChannel().position(fpi5.getChannel().position() + length);
dfn3 = dfn;
nch = nch;
i2 = i2;
att6 = att;
length5 = length5;
bb = bb2;
sfrq3 = sfrq3;
ssrc3 = ssrc3;
fpi4 = fpi5;
}
if (fpi4.getChannel().position() == fpi4.getChannel().size()) {
throw new IllegalStateException("Couldn't find data chank");
}
if (length5 != 1 && length5 != 2 && length5 != 3 && length5 != 4) {
throw new IllegalStateException("Error : Only 8bit, 16bit, 24bit and 32bit PCM are supported.");
}
if (dbps8 != -1) {
dbps = dbps8;
} else {
if (length5 != 1) {
dbps7 = length5;
} else {
dbps7 = 2;
}
if (dbps7 != 4) {
dbps = dbps7;
} else {
dbps = 3;
}
}
if (dfrq3 != -1) {
dfrq = dfrq3;
} else {
int dfrq5 = sfrq3;
dfrq = dfrq5;
}
if (dither2 != -1) {
dither = dither2;
} else if (dbps < length5) {
if (dbps == 1) {
dither = 4;
} else {
dither = 3;
}
} else {
dither = 1;
}
if (ssrc3.quiet) {
bps = length5;
dbps2 = dbps;
nch2 = nch;
} else {
String[] dtype = {SchedulerSupport.NONE, "no noise shaping", "triangular spectral shape", "ATH based noise shaping", "ATH based noise shaping(less amplitude)"};
String[] ptype = {"rectangular", "triangular", "gaussian"};
System.err.printf("frequency : %d -> %d\n", Integer.valueOf(sfrq3), Integer.valueOf(dfrq));
System.err.printf("attenuation : %gdB\n", Double.valueOf(att));
System.err.printf("bits per sample : %d -> %d\n", Integer.valueOf(length5 * 8), Integer.valueOf(dbps * 8));
System.err.printf("nchannels : %d\n", Integer.valueOf(nch));
dbps2 = dbps;
double d8 = length / length5;
bps = length5;
nch2 = nch;
System.err.printf("length : %d bytes, %g secs\n", Integer.valueOf(length), Double.valueOf((d8 / nch2) / sfrq3));
if (dither == 0) {
System.err.printf("dither type : none\n", new Object[0]);
} else {
System.err.printf("dither type : %s, %s p.d.f, amp = %g\n", dtype[dither], ptype[pdf], Double.valueOf(noiseamp));
}
System.err.printf("\n", new Object[0]);
}
try {
try {
try {
FileOutputStream fpo5 = new FileOutputStream(new File(dfn));
ByteBuffer leos = ByteBuffer.allocate(44).order(ByteOrder.LITTLE_ENDIAN);
leos.put("RIFF".getBytes());
leos.putInt(0);
leos.put("WAVEfmt ".getBytes());
leos.putInt(16);
leos.putShort((short) 1);
short word = nch2;
leos.putShort(word);
int dword = dfrq;
leos.putInt(dword);
int dword2 = dfrq * nch2 * dbps2;
leos.putInt(dword2);
short word2 = (short) (dbps2 * nch2);
leos.putShort(word2);
short word3 = (short) (dbps2 * 8);
leos.putShort(word3);
leos.put("data".getBytes());
leos.putInt(0);
leos.flip();
writeBuffers(fpo5, leos);
if (dither == 0) {
fpi = fpi4;
dfn2 = dfn;
fpo = fpo5;
str = "\n";
dbps3 = dbps2;
att2 = att;
sfrq = sfrq3;
ssrc = this;
samp2 = 0;
} else {
int min = 0;
int max2 = 0;
int dbps10 = dbps2;
if (dbps10 == 1) {
min = -128;
max2 = 127;
}
if (dbps10 == 2) {
min = -32768;
max2 = 32767;
}
if (dbps10 == 3) {
min = -8388608;
max2 = 8388607;
}
fpo = fpo5;
if (dbps10 != 4) {
max = max2;
} else {
min = Integer.MIN_VALUE;
max = Integer.MAX_VALUE;
}
fpi = fpi4;
sfrq = sfrq3;
dfn2 = dfn;
dbps3 = dbps10;
str = "\n";
att2 = att;
ssrc = this;
samp2 = init_shaper(dfrq, nch2, min, max, dither, pdf, noiseamp);
}
if (twopass) {
double gain = FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE;
int ch = 0;
if (!ssrc.quiet) {
System.err.printf("Pass 1\n", new Object[0]);
}
if (tmpfn != null) {
try {
tmpfn2 = tmpfn;
try {
ft = new File(tmpfn2);
} catch (IOException e6) {
throw new IllegalStateException("cannot open temporary file.");
}
} catch (IOException e7) {
}
} else {
tmpfn2 = tmpfn;
try {
ft = File.createTempFile("ssrc_", ".tmp");
} catch (IOException e8) {
throw new IllegalStateException("cannot open temporary file.");
}
}
try {
FileOutputStream fpto = new FileOutputStream(ft);
if (pdf2 != 0) {
if (sfrq < dfrq) {
int dfrq6 = (length / bps) / nch2;
ft2 = ft;
samp3 = samp2;
fpo3 = fpo;
str3 = str;
i3 = 4;
length3 = 8;
int dfrq7 = dfrq;
int dfrq8 = dither;
peak[0] = upsample(fpi, fpto, nch2, bps, 8, sfrq, dfrq, 1.0d, dfrq6, twopass, dfrq8);
sfrq2 = sfrq;
nch3 = nch2;
dfrq2 = dfrq7;
dbps5 = dbps3;
length4 = length;
att3 = att2;
nch4 = 0;
} else {
ft2 = ft;
samp3 = samp2;
int dfrq9 = dfrq;
short nch6 = nch2;
int bps3 = bps;
fpo3 = fpo;
str3 = str;
i3 = 4;
length3 = 8;
int bps4 = sfrq;
if (bps4 > dfrq9) {
dbps5 = dbps3;
peak[0] = downsample(fpi, fpto, nch6, bps3, 8, bps4, dfrq9, 1.0d, (length / bps3) / nch6, twopass, dither);
nch3 = nch6;
att3 = att2;
length4 = length;
dfrq2 = dfrq9;
sfrq2 = bps4;
nch4 = 0;
} else {
dbps5 = dbps3;
int length6 = dither;
peak[0] = no_src(fpi, fpto, nch6, bps3, 8, 1.0d, (length / bps3) / nch6, twopass, length6);
nch3 = nch6;
att3 = att2;
dfrq2 = dfrq9;
sfrq2 = bps4;
length4 = length;
nch4 = 0;
}
}
} else {
ft2 = ft;
samp3 = samp2;
int sfrq4 = sfrq;
int dfrq10 = dfrq;
short nch7 = nch2;
int bps5 = bps;
fpo3 = fpo;
dbps5 = dbps3;
str3 = str;
i3 = 4;
length3 = 8;
if (sfrq4 < dfrq10) {
double att7 = att2;
peak[0] = upsample(fpi, fpto, nch7, bps5, 8, sfrq4, dfrq10, Math.pow(10.0d, (-att7) / 20.0d), (length / bps5) / nch7, twopass, dither);
att3 = att7;
fpto = fpto;
length4 = length;
dfrq2 = dfrq10;
sfrq2 = sfrq4;
nch3 = nch7;
nch4 = 0;
} else {
double att8 = att2;
if (sfrq4 > dfrq10) {
double pow = Math.pow(10.0d, (-att8) / 20.0d);
int i7 = (length / bps5) / nch7;
fpto = fpto;
nch3 = nch7;
dfrq2 = dfrq10;
sfrq2 = sfrq4;
nch4 = 0;
peak[0] = downsample(fpi, fpto, nch7, bps5, 8, sfrq4, dfrq10, pow, i7, twopass, dither);
att3 = att8;
length4 = length;
} else {
dfrq2 = dfrq10;
sfrq2 = sfrq4;
fpto = fpto;
nch3 = nch7;
nch4 = 0;
length4 = length;
att3 = att8;
peak[0] = no_src(fpi, fpto, nch3, bps5, 8, Math.pow(10.0d, (-att8) / 20.0d), (length / bps5) / nch3, twopass, dither);
}
}
}
fpto.close();
if (this.quiet) {
i4 = 1;
} else {
PrintStream printStream = System.err;
i4 = 1;
Object[] objArr = new Object[1];
objArr[nch4] = Double.valueOf(Math.log10(peak[nch4]) * 20.0d);
printStream.printf("\npeak : %gdB\n", objArr);
}
if (pdf2 == 0) {
att4 = att3;
if (peak[nch4] < Math.pow(10.0d, (-att4) / 20.0d)) {
peak[nch4] = 1.0d;
} else {
peak[nch4] = peak[nch4] * Math.pow(10.0d, att4 / 20.0d);
}
} else {
att4 = att3;
peak[nch4] = peak[nch4] * Math.pow(10.0d, att4 / 20.0d);
}
if (!this.quiet) {
System.err.printf("\nPass 2\n", new Object[nch4]);
}
if (dither != 0) {
dbps6 = dbps5;
if (dbps6 == i4) {
samp4 = samp3;
if (pdf2 != 0) {
d2 = 1.0d;
} else if (peak[nch4] >= (127 - samp4) / 127.0d) {
d2 = 1.0d;
} else {
d3 = (1.0d / peak[nch4]) * 127.0d;
gain = d3;
}
d3 = (d2 / peak[nch4]) * (127 - samp4);
gain = d3;
} else if (dbps6 == 2) {
samp4 = samp3;
if (pdf2 != 0) {
d4 = 1.0d;
} else if (peak[nch4] >= (32767 - samp4) / 32767.0d) {
d4 = 1.0d;
} else {
d5 = (1.0d / peak[nch4]) * 32767.0d;
gain = d5;
}
d5 = (d4 / peak[nch4]) * (32767 - samp4);
gain = d5;
} else if (dbps6 != 3) {
samp4 = samp3;
} else {
if (pdf2 == 0) {
samp4 = samp3;
if (peak[nch4] >= (8388607 - samp4) / 8388607.0d) {
d6 = 1.0d;
} else {
d7 = (1.0d / peak[nch4]) * 8388607.0d;
gain = d7;
}
} else {
samp4 = samp3;
d6 = 1.0d;
}
d7 = (d6 / peak[nch4]) * (8388607 - samp4);
gain = d7;
}
} else {
samp4 = samp3;
dbps6 = dbps5;
if (dbps6 == i4) {
gain = (1.0d / peak[nch4]) * 127.0d;
} else if (dbps6 == 2) {
gain = (1.0d / peak[nch4]) * 32767.0d;
} else if (dbps6 == 3) {
gain = (1.0d / peak[nch4]) * 8388607.0d;
}
}
this.randptr = nch4;
setstarttime();
int fptlen = (int) (ft2.length() / 8);
File ft4 = ft2;
FileChannel fpti2 = new FileInputStream(ft4).getChannel();
ByteBuffer leis2 = ByteBuffer.allocate(length3);
int sumread2 = 0;
while (sumread2 < fptlen) {
leis2.clear();
fpti2.read(leis2);
leis2.flip();
double f2 = leis2.getDouble() * gain;
int sumread3 = sumread2 + 1;
if (dbps6 == i4) {
sumread = sumread3;
leis = leis2;
fpti = fpti2;
ft3 = ft4;
samp5 = samp4;
att5 = att4;
fpo4 = fpo3;
int s3 = dither != 0 ? do_shaping(f2, peak, dither, ch) : RINT(f2);
ByteBuffer buf = ByteBuffer.allocate(1);
buf.put((byte) (s3 + 128));
buf.flip();
writeBuffers(fpo4, buf);
} else if (dbps6 == 2) {
sumread = sumread3;
leis = leis2;
fpti = fpti2;
ft3 = ft4;
FileOutputStream fpo6 = fpo3;
if (dither != 0) {
fpo4 = fpo6;
samp5 = samp4;
att5 = att4;
s = do_shaping(f2, peak, dither, ch);
} else {
fpo4 = fpo6;
samp5 = samp4;
att5 = att4;
s = RINT(f2);
}
ByteBuffer buf2 = ByteBuffer.allocate(2).order(ByteOrder.LITTLE_ENDIAN);
buf2.putShort((short) s);
buf2.flip();
writeBuffers(fpo4, buf2);
} else if (dbps6 != 3) {
sumread = sumread3;
leis = leis2;
fpti = fpti2;
ft3 = ft4;
samp5 = samp4;
att5 = att4;
fpo4 = fpo3;
} else {
if (dither != 0) {
sumread = sumread3;
leis = leis2;
fpti = fpti2;
ft3 = ft4;
s2 = do_shaping(f2, peak, dither, ch);
f = f2;
} else {
sumread = sumread3;
leis = leis2;
fpti = fpti2;
ft3 = ft4;
f = f2;
s2 = RINT(f);
}
ByteBuffer buf3 = ByteBuffer.allocate(3);
buf3.put((byte) (s2 & 255));
int s4 = s2 >> 8;
buf3.put((byte) (s4 & 255));
buf3.put((byte) ((s4 >> 8) & 255));
buf3.flip();
FileOutputStream fpo7 = fpo3;
writeBuffers(fpo7, buf3);
fpo4 = fpo7;
samp5 = samp4;
att5 = att4;
}
int s5 = ch + 1;
if (s5 != nch3) {
ch = s5;
} else {
ch = 0;
}
if ((262143 & sumread) == 0) {
showprogress(sumread / fptlen);
}
sumread2 = sumread;
fpo3 = fpo4;
leis2 = leis;
fpti2 = fpti;
ft4 = ft3;
att4 = att5;
samp4 = samp5;
i4 = 1;
}
FileChannel fpti3 = fpti2;
File ft5 = ft4;
FileOutputStream fpo8 = fpo3;
showprogress(1.0d);
if (!this.quiet) {
System.err.printf(str3, new Object[0]);
}
fpti3.close();
if (ft5 != null && !ft5.delete()) {
System.err.printf("Failed to remove %s\n", ft5);
}
ssrc2 = this;
d = 1.0d;
fpo2 = fpo8;
length2 = 0;
dbps4 = nch3;
} catch (IOException e9) {
throw new IllegalStateException("cannot open temporary file.");
}
} else {
int sfrq5 = sfrq;
int dfrq11 = dfrq;
short nch8 = nch2;
int bps6 = bps;
FileOutputStream fpo9 = fpo;
int bps7 = dbps3;
String str4 = str;
i3 = 4;
if (sfrq5 < dfrq11) {
fpo2 = fpo9;
str2 = str4;
d = 1.0d;
peak[0] = upsample(fpi, fpo9, nch8, bps6, bps7, sfrq5, dfrq11, Math.pow(10.0d, (-att2) / 20.0d), (length / bps6) / nch8, twopass, dither);
dbps4 = nch8;
length2 = 0;
} else {
str2 = str4;
d = 1.0d;
fpo2 = fpo9;
double att9 = att2;
if (sfrq5 > dfrq11) {
int i8 = (length / bps6) / nch8;
length2 = 0;
peak[0] = downsample(fpi, fpo2, nch8, bps6, bps7, sfrq5, dfrq11, Math.pow(10.0d, (-att9) / 20.0d), i8, twopass, dither);
dbps4 = nch8;
} else {
length2 = 0;
dbps4 = nch8;
peak[0] = no_src(fpi, fpo2, dbps4, bps6, bps7, Math.pow(10.0d, (-att9) / 20.0d), (length / bps6) / dbps4, twopass, dither);
}
}
ssrc2 = this;
if (!ssrc2.quiet) {
System.err.printf(str2, new Object[length2]);
}
}
if (dither != 0) {
ssrc2.quit_shaper(dbps4);
}
if (!twopass && peak[length2] > d && !ssrc2.quiet) {
PrintStream printStream2 = System.err;
Object[] objArr2 = new Object[1];
objArr2[length2] = Double.valueOf(Math.log10(peak[length2]) * 20.0d);
printStream2.printf("clipping detected : %gdB\n", objArr2);
}
fpo2.close();
File fo = new File(dfn2);
int len = (int) fo.length();
FileChannel fpo1 = new RandomAccessFile(fo, "rw").getChannel();
ByteBuffer leos2 = ByteBuffer.allocate(i3).order(ByteOrder.LITTLE_ENDIAN);
int dword3 = len - 8;
leos2.position(length2);
leos2.limit(4);
leos2.putInt(dword3);
leos2.flip();
fpo1.write(leos2, 4L);
int dword4 = len - 44;
leos2.position(length2);
leos2.limit(4);
leos2.putInt(dword4);
leos2.flip();
fpo1.write(leos2, 40L);
fpo1.close();
} catch (IOException e10) {
throw new IllegalArgumentException("cannot open output file.");
}
} catch (IOException e11) {
}
} catch (IOException e12) {
}
} catch (IOException e13) {
throw new IllegalArgumentException("cannot open input file.");
}
}
public SSRC(InputStream fpi, OutputStream fpo, int sfrq, int dfrq, int bps, int dbps, int nch, int length, double att, int dither, boolean quiet_) throws IOException {
int dither2;
int dfrq2;
int dfrq3;
String str;
int dbps2;
char c;
int min;
int max;
this.byteOrder = ByteOrder.LITTLE_ENDIAN;
this.fft = new SplitRadixFft();
this.AA = 170.0d;
this.DF = 100.0d;
this.FFTFIRLEN = 65536;
this.quiet = false;
double[] peak = new double[1];
peak[0] = 0.0d;
if (dither >= 0 && dither <= 4) {
this.quiet = quiet_;
if (bps != 1 && bps != 2 && bps != 3 && bps != 4) {
throw new IllegalStateException("Error : Only 8bit, 16bit, 24bit and 32bit PCM are supported.");
}
int dbps3 = dbps;
if (dbps3 == -1) {
if (bps != 1) {
dbps3 = bps;
} else {
dbps3 = 2;
}
if (dbps3 == 4) {
dbps3 = 3;
}
}
int dfrq4 = dfrq;
dfrq4 = dfrq4 == -1 ? sfrq : dfrq4;
if (dither != -1) {
dither2 = dither;
} else if (dbps3 < bps) {
if (dbps3 == 1) {
dither2 = 4;
} else {
dither2 = 3;
}
} else {
dither2 = 1;
}
if (this.quiet) {
dfrq2 = dfrq4;
} else {
String[] dtype = {SchedulerSupport.NONE, "no noise shaping", "triangular spectral shape", "ATH based noise shaping", "ATH based noise shaping(less amplitude)"};
String[] ptype = {"rectangular", "triangular", "gaussian"};
dfrq2 = dfrq4;
System.err.printf("frequency : %d -> %d\n", Integer.valueOf(sfrq), Integer.valueOf(dfrq4));
System.err.printf("attenuation : %gdB\n", Double.valueOf(att));
System.err.printf("bits per sample : %d -> %d\n", Integer.valueOf(bps * 8), Integer.valueOf(dbps3 * 8));
System.err.printf("nchannels : %d\n", Integer.valueOf(nch));
System.err.printf("length : %d bytes, %g secs\n", Integer.valueOf(length), Double.valueOf(((length / bps) / nch) / sfrq));
if (dither2 == 0) {
System.err.printf("dither type : none\n", new Object[0]);
} else {
System.err.printf("dither type : %s, %s p.d.f, amp = %g\n", dtype[dither2], ptype[0], Double.valueOf(0.18d));
}
System.err.printf("\n", new Object[0]);
}
if (dither2 == 0) {
dfrq3 = dfrq2;
str = "\n";
dbps2 = dbps3;
c = 0;
} else {
int min2 = 0;
int max2 = 0;
if (dbps3 == 1) {
min2 = -128;
max2 = 127;
}
if (dbps3 == 2) {
min2 = -32768;
max2 = 32767;
}
if (dbps3 == 3) {
min2 = -8388608;
max2 = 8388607;
}
if (dbps3 != 4) {
min = min2;
max = max2;
} else {
min = Integer.MIN_VALUE;
max = Integer.MAX_VALUE;
}
dfrq3 = dfrq2;
str = "\n";
dbps2 = dbps3;
int dbps4 = dither2;
c = 0;
init_shaper(dfrq3, nch, min, max, dbps4, 0, 0.18d);
}
if (sfrq < dfrq3) {
peak[c] = upsample(fpi, fpo, nch, bps, dbps2, sfrq, dfrq3, Math.pow(10.0d, (-att) / 20.0d), (length / bps) / nch, false, dither2);
} else {
int dfrq5 = dfrq3;
if (sfrq > dfrq5) {
int dfrq6 = (length / bps) / nch;
int dfrq7 = dither2;
peak[c] = downsample(fpi, fpo, nch, bps, dbps2, sfrq, dfrq5, Math.pow(10.0d, (-att) / 20.0d), dfrq6, false, dfrq7);
} else {
peak[c] = no_src(fpi, fpo, nch, bps, dbps2, Math.pow(10.0d, (-att) / 20.0d), (length / bps) / nch, false, dither2);
}
}
if (!this.quiet) {
System.err.printf(str, new Object[0]);
}
if (dither2 != 0) {
quit_shaper(nch);
}
if (0 == 0 && peak[0] > 1.0d && !this.quiet) {
System.err.printf("clipping detected : %gdB\n", Double.valueOf(Math.log10(peak[0]) * 20.0d));
return;
}
return;
}
throw new IllegalArgumentException("unrecognized dither type : " + dither);
}
protected byte[] getDataFromByteBuffer(ByteBuffer rawoutbuf) {
byte[] tempDataWrt = new byte[rawoutbuf.limit() - rawoutbuf.position()];
rawoutbuf.get(tempDataWrt, 0, tempDataWrt.length);
return tempDataWrt;
}
protected void writeBuffers(OutputStream fpo, ByteBuffer rawoutbuf) {
try {
fpo.write(getDataFromByteBuffer(rawoutbuf));
} catch (IOException e) {
}
}
}