diff --git a/src/davaguine/jeq/core/IIRBase.java b/src/davaguine/jeq/core/IIRBase.java index b37e540..e557ac5 100644 --- a/src/davaguine/jeq/core/IIRBase.java +++ b/src/davaguine/jeq/core/IIRBase.java @@ -411,67 +411,68 @@ public class IIRBase { new IIRCoefficients(6.0884213704e-01, 1.9557893148e-01, -1.3932981614e+00), }; public final static IIRCoefficients iir_cf31_96000[] = { - /* 20 Hz*/ - new IIRCoefficients(9.9939388451e-01, 3.0305774630e-04, 1.9993870327e+00), - /* 25 Hz*/ - new IIRCoefficients(9.9924247917e-01, 3.7876041632e-04, 1.9992317740e+00), - /* 31.5 Hz*/ - new IIRCoefficients(9.9904564663e-01, 4.7717668529e-04, 1.9990286528e+00), - /* 40 Hz*/ - new IIRCoefficients(9.9878827195e-01, 6.0586402557e-04, 1.9987608731e+00), - /* 50 Hz*/ - new IIRCoefficients(9.9848556942e-01, 7.5721528829e-04, 1.9984427652e+00), - /* 63 Hz*/ - new IIRCoefficients(9.9809219264e-01, 9.5390367779e-04, 1.9980242502e+00), - /* 80 Hz*/ - new IIRCoefficients(9.9757801538e-01, 1.2109923088e-03, 1.9974684869e+00), - /* 100 Hz*/ - new IIRCoefficients(9.9697343933e-01, 1.5132803374e-03, 1.9968023538e+00), - /* 125 Hz*/ - new IIRCoefficients(9.9621823598e-01, 1.8908820086e-03, 1.9959510180e+00), - /* 160 Hz*/ - new IIRCoefficients(9.9516191728e-01, 2.4190413595e-03, 1.9947243453e+00), - /* 200 Hz*/ - new IIRCoefficients(9.9395607757e-01, 3.0219612131e-03, 1.9932727986e+00), - /* 250 Hz*/ - new IIRCoefficients(9.9245085008e-01, 3.7745749576e-03, 1.9913840669e+00), - /* 315 Hz*/ - new IIRCoefficients(9.9049749914e-01, 4.7512504310e-03, 1.9888056233e+00), - /* 400 Hz*/ - new IIRCoefficients(9.8794899744e-01, 6.0255012789e-03, 1.9852245824e+00), - /* 500 Hz*/ - new IIRCoefficients(9.8495930023e-01, 7.5203498850e-03, 1.9807093500e+00), - /* 630 Hz*/ - new IIRCoefficients(9.8108651246e-01, 9.4567437704e-03, 1.9743538683e+00), - /* 800 Hz*/ - new IIRCoefficients(9.7604570090e-01, 1.1977149551e-02, 1.9652207158e+00), - /* 1k Hz*/ - new IIRCoefficients(9.7014963927e-01, 1.4925180364e-02, 1.9532947360e+00), - /* 1.25k Hz*/ - new IIRCoefficients(9.6283181641e-01, 1.8584091793e-02, 1.9366149237e+00), - /* 1.6k Hz*/ - new IIRCoefficients(9.5268463224e-01, 2.3657683878e-02, 1.9100137880e+00), - /* 2k Hz*/ - new IIRCoefficients(9.4122788957e-01, 2.9386055213e-02, 1.8750821533e+00), - /* 2.5k Hz*/ - new IIRCoefficients(9.2711765003e-01, 3.6441174983e-02, 1.8248457659e+00), - /* 3.15k Hz*/ - new IIRCoefficients(9.0912548757e-01, 4.5437256213e-02, 1.7491177803e+00), - /* 4k Hz*/ - new IIRCoefficients(8.8619860800e-01, 5.6900696000e-02, 1.6334959111e+00), - /* 5k Hz*/ - new IIRCoefficients(8.6010264114e-01, 6.9948679430e-02, 1.4757186436e+00), - /* 6.3k Hz*/ - new IIRCoefficients(8.2760520925e-01, 8.6197395374e-02, 1.2405797786e+00), - /* 8k Hz*/ - new IIRCoefficients(7.8757448309e-01, 1.0621275845e-01, 8.9378724155e-01), - /* 10k Hz*/ - new IIRCoefficients(7.4415362476e-01, 1.2792318762e-01, 4.5142017567e-01), - /* 12.5k Hz*/ - new IIRCoefficients(6.9581428034e-01, 1.5209285983e-01, -1.1091156053e-01), - /* 16k Hz*/ - new IIRCoefficients(6.4120506488e-01, 1.7939746756e-01, -8.2060253244e-01), - /* 20k Hz*/ - new IIRCoefficients(6.0884213704e-01, 1.9557893148e-01, -1.3932981614e+00), +/* 20 Hz */ +new IIRCoefficients(9.9918221139e-01, 4.0889430323e-04, 1.9991804986e+00), +/* 25 Hz */ +new IIRCoefficients(9.9962373418e-01, 1.8813291151e-04, 1.9996210574e+00), +/* 31.5 Hz */ +new IIRCoefficients(9.9950924659e-01, 2.4537670644e-04, 1.9995049971e+00), +/* 40 Hz */ +new IIRCoefficients(9.9939477210e-01, 3.0261394841e-04, 1.9993879203e+00), +/* 50 Hz */ +new IIRCoefficients(9.9924760988e-01, 3.7619506167e-04, 1.9992369047e+00), +/* 63 Hz */ +new IIRCoefficients(9.9901873389e-01, 4.9063305250e-04, 1.9990017403e+00), +/* 80 Hz */ +new IIRCoefficients(9.9878991029e-01, 6.0504485723e-04, 1.9987625114e+00), +/* 100 Hz */ +new IIRCoefficients(9.9852846169e-01, 7.3576915625e-04, 1.9984856565e+00), +/* 125 Hz */ +new IIRCoefficients(9.9803842973e-01, 9.8078513561e-04, 1.9979715632e+00), +/* 160 Hz */ +new IIRCoefficients(9.9754863778e-01, 1.2256811083e-03, 1.9974391109e+00), +/* 200 Hz */ +new IIRCoefficients(9.9705908562e-01, 1.4704571921e-03, 1.9968879927e+00), +/* 250 Hz */ +new IIRCoefficients(9.9624369754e-01, 1.8781512307e-03, 1.9959764762e+00), +/* 315 Hz */ +new IIRCoefficients(9.9510327003e-01, 2.4483649847e-03, 1.9946792773e+00), +/* 400 Hz */ +new IIRCoefficients(9.9396414160e-01, 3.0179291997e-03, 1.9932808599e+00), +/* 500 Hz */ +new IIRCoefficients(9.9250145198e-01, 3.7492740081e-03, 1.9914346418e+00), +/* 630 Hz */ +new IIRCoefficients(9.9023040090e-01, 4.8847995509e-03, 1.9885387521e+00), +/* 800 Hz */ +new IIRCoefficients(9.8796449555e-01, 6.0177522243e-03, 1.9852400593e+00), +/* 1000 Hz */ +new IIRCoefficients(9.8538116034e-01, 7.3094198292e-03, 1.9811303069e+00), +/* 1250 Hz */ +new IIRCoefficients(9.8055531891e-01, 9.7223405432e-03, 1.9739308353e+00), +/* 1600 Hz */ +new IIRCoefficients(9.7575264994e-01, 1.2123675032e-02, 1.9649292702e+00), +/* 2000 Hz */ +new IIRCoefficients(9.7097292946e-01, 1.4513535269e-02, 1.9541109828e+00), +/* 2500 Hz */ +new IIRCoefficients(9.6305712557e-01, 1.8471437214e-02, 1.9368372235e+00), +/* 3150 Hz */ +new IIRCoefficients(9.5207914671e-01, 2.3960426645e-02, 1.9107394812e+00), +/* 4000 Hz */ +new IIRCoefficients(9.4122023318e-01, 2.9389883411e-02, 1.8750747578e+00), +/* 5000 Hz */ +new IIRCoefficients(9.2742950588e-01, 3.6285247058e-02, 1.8251410716e+00), +/* 6300 Hz */ +new IIRCoefficients(9.0634716904e-01, 4.6826415482e-02, 1.7465723184e+00), +/* 8000 Hz */ +new IIRCoefficients(8.8569806727e-01, 5.7150966366e-02, 1.6330624302e+00), +/* 10000 Hz */ +new IIRCoefficients(8.6260593228e-01, 6.8697033860e-02, 1.4777046382e+00), +/* 12500 Hz */ +new IIRCoefficients(8.2067879086e-01, 8.9660604570e-02, 1.2446020061e+00), +/* 16000 Hz */ +new IIRCoefficients(7.8040765969e-01, 1.0979617015e-01, 8.9020383015e-01), +/* 20000 Hz */ +new IIRCoefficients(2.6794919254e-01, 3.6602540373e-01, 3.2816939955e-01), + }; } diff --git a/src/uk/co/majenko/audiobookrecorder/Sentence.java b/src/uk/co/majenko/audiobookrecorder/Sentence.java index 19a80e1..ecb668e 100644 --- a/src/uk/co/majenko/audiobookrecorder/Sentence.java +++ b/src/uk/co/majenko/audiobookrecorder/Sentence.java @@ -156,6 +156,38 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable { } } + public static final int FFTBuckets = 1024; + + public double[][] getFFTProfile() { + double[] real = new double[FFTBuckets]; + double[] imag = new double[FFTBuckets]; + + int[] samples = getAudioData(); + int slices = (samples.length / FFTBuckets) + 1; + + double[][] out = new double[slices][]; + + int slice = 0; + + for (int i = 0; i < samples.length; i += FFTBuckets) { + for (int j = 0; j < FFTBuckets; j++) { + if (i + j < samples.length) { + real[j] = samples[i+j] / 32768d; + imag[j] = 0; + } else { + real[j] = 0; + imag[j] = 0; + } + } + + out[slice++] = FFT.fft(real, imag, true); + } + + return out; + + + } + public void autoTrimSampleFFT() { crossStartOffset = -1; crossEndOffset = -1; @@ -190,7 +222,7 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable { intens[block] = 0; - for (int j = 1; j < 2048; j++) { + for (int j = 2; j < 4096; j += 2) { double d = Math.abs(av - buckets[j]); if (d > 0.05) { intens[block]++; diff --git a/src/uk/co/majenko/audiobookrecorder/Waveform.java b/src/uk/co/majenko/audiobookrecorder/Waveform.java index f3a0648..32735ea 100644 --- a/src/uk/co/majenko/audiobookrecorder/Waveform.java +++ b/src/uk/co/majenko/audiobookrecorder/Waveform.java @@ -9,6 +9,7 @@ import javax.sound.sampled.*; public class Waveform extends JPanel { int[] samples = null; + int leftMarker = 0; int rightMarker = 0; @@ -20,7 +21,6 @@ public class Waveform extends JPanel { } public void paintComponent(Graphics g) { - Dimension size = getSize(); int w = size.width; @@ -140,4 +140,5 @@ public class Waveform extends JPanel { samples = s; repaint(); } + }