Partial 96kHz support
This commit is contained in:
@@ -40,6 +40,7 @@ public class IIR extends IIRBase {
|
|||||||
public final static float EQ_22050_RATE = 22050;
|
public final static float EQ_22050_RATE = 22050;
|
||||||
public final static float EQ_44100_RATE = 44100;
|
public final static float EQ_44100_RATE = 44100;
|
||||||
public final static float EQ_48000_RATE = 48000;
|
public final static float EQ_48000_RATE = 48000;
|
||||||
|
public final static float EQ_96000_RATE = 96000;
|
||||||
/**
|
/**
|
||||||
* Supported number of bands
|
* Supported number of bands
|
||||||
*/
|
*/
|
||||||
@@ -108,7 +109,7 @@ public class IIR extends IIRBase {
|
|||||||
* @return true if parameters are supported
|
* @return true if parameters are supported
|
||||||
*/
|
*/
|
||||||
public static boolean isParamsSupported(int bands, float rate, int channels) {
|
public static boolean isParamsSupported(int bands, float rate, int channels) {
|
||||||
if (rate != EQ_11025_RATE && rate != EQ_22050_RATE && rate != EQ_44100_RATE && rate != EQ_48000_RATE)
|
if (rate != EQ_11025_RATE && rate != EQ_22050_RATE && rate != EQ_44100_RATE && rate != EQ_48000_RATE && rate != EQ_96000_RATE)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
switch (bands) {
|
switch (bands) {
|
||||||
@@ -180,6 +181,12 @@ public class IIR extends IIRBase {
|
|||||||
iircf = iir_cf10_48000;
|
iircf = iir_cf10_48000;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
} else if (rate == EQ_96000_RATE) {
|
||||||
|
switch (bands) {
|
||||||
|
case 31:
|
||||||
|
iircf = iir_cf31_96000;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -410,4 +410,68 @@ public class IIRBase {
|
|||||||
/* 20k Hz*/
|
/* 20k Hz*/
|
||||||
new IIRCoefficients(6.0884213704e-01, 1.9557893148e-01, -1.3932981614e+00),
|
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),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1619,8 +1619,18 @@ public class AudiobookRecorder extends JFrame {
|
|||||||
bookTree.setSelectionPath(new TreePath(s.getPath()));
|
bookTree.setSelectionPath(new TreePath(s.getPath()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
play.drain();
|
||||||
|
play.stop();
|
||||||
|
play.close();
|
||||||
|
play = null;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
playing = null;
|
playing = null;
|
||||||
|
if (play != null) {
|
||||||
|
play.drain();
|
||||||
|
play.stop();
|
||||||
|
play.close();
|
||||||
|
}
|
||||||
|
play = null;
|
||||||
}
|
}
|
||||||
toolBar.enableSentence();
|
toolBar.enableSentence();
|
||||||
toolBar.disableStop();
|
toolBar.disableStop();
|
||||||
@@ -1720,6 +1730,8 @@ public class AudiobookRecorder extends JFrame {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
microphone = null;
|
||||||
|
microphoneStream = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void execScript(String s) {
|
public void execScript(String s) {
|
||||||
|
|||||||
@@ -56,11 +56,20 @@ public class Equaliser extends JPanel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
JButton load = new JButton("Load from default");
|
||||||
|
load.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
for (int i = 0; i < 31; i++) {
|
||||||
|
channels[i].setValue(Options.getFloat("audio.eq." + i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
JPanel buttons = new JPanel();
|
JPanel buttons = new JPanel();
|
||||||
buttons.setLayout(new FlowLayout());
|
buttons.setLayout(new FlowLayout());
|
||||||
buttons.add(smooth);
|
buttons.add(smooth);
|
||||||
buttons.add(def);
|
buttons.add(def);
|
||||||
|
buttons.add(load);
|
||||||
|
|
||||||
add(buttons, BorderLayout.SOUTH);
|
add(buttons, BorderLayout.SOUTH);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -345,7 +345,7 @@ public class Options extends JDialog {
|
|||||||
TreeSet<KVPair> list = new TreeSet<KVPair>();
|
TreeSet<KVPair> list = new TreeSet<KVPair>();
|
||||||
|
|
||||||
AudioFormat stereoFormat = new AudioFormat(44100f, 16, 2, true, false);
|
AudioFormat stereoFormat = new AudioFormat(44100f, 16, 2, true, false);
|
||||||
AudioFormat monoFormat = new AudioFormat(44100f, 16, 2, true, false);
|
AudioFormat monoFormat = new AudioFormat(44100f, 16, 1, true, false);
|
||||||
|
|
||||||
DataLine.Info stereoDIF = new DataLine.Info(TargetDataLine.class, stereoFormat);
|
DataLine.Info stereoDIF = new DataLine.Info(TargetDataLine.class, stereoFormat);
|
||||||
DataLine.Info monoDIF = new DataLine.Info(TargetDataLine.class, monoFormat);
|
DataLine.Info monoDIF = new DataLine.Info(TargetDataLine.class, monoFormat);
|
||||||
@@ -381,7 +381,7 @@ public class Options extends JDialog {
|
|||||||
TreeSet<KVPair> list = new TreeSet<KVPair>();
|
TreeSet<KVPair> list = new TreeSet<KVPair>();
|
||||||
|
|
||||||
AudioFormat stereoFormat = new AudioFormat(44100f, 16, 2, true, false);
|
AudioFormat stereoFormat = new AudioFormat(44100f, 16, 2, true, false);
|
||||||
AudioFormat monoFormat = new AudioFormat(44100f, 16, 2, true, false);
|
AudioFormat monoFormat = new AudioFormat(44100f, 16, 1, true, false);
|
||||||
|
|
||||||
DataLine.Info stereoDIF = new DataLine.Info(SourceDataLine.class, stereoFormat);
|
DataLine.Info stereoDIF = new DataLine.Info(SourceDataLine.class, stereoFormat);
|
||||||
DataLine.Info monoDIF = new DataLine.Info(SourceDataLine.class, monoFormat);
|
DataLine.Info monoDIF = new DataLine.Info(SourceDataLine.class, monoFormat);
|
||||||
|
|||||||
@@ -497,8 +497,8 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
|
|||||||
|
|
||||||
AudioFormat format = eq.getFormat();
|
AudioFormat format = eq.getFormat();
|
||||||
|
|
||||||
// IIRControls controls = eq.getControls();
|
IIRControls controls = eq.getControls();
|
||||||
// AudiobookRecorder.window.book.equaliser.apply(controls, format.getChannels());
|
AudiobookRecorder.window.book.equaliser.apply(controls, format.getChannels());
|
||||||
|
|
||||||
int frameSize = format.getFrameSize();
|
int frameSize = format.getFrameSize();
|
||||||
|
|
||||||
@@ -511,7 +511,7 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
|
|||||||
|
|
||||||
play.start();
|
play.start();
|
||||||
|
|
||||||
byte[] buffer = new byte[50000];
|
byte[] buffer = new byte[1024];
|
||||||
|
|
||||||
eq.skip(pos);
|
eq.skip(pos);
|
||||||
|
|
||||||
@@ -660,6 +660,7 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
|
|||||||
public int findNearestZeroCrossing(int pos, int range) {
|
public int findNearestZeroCrossing(int pos, int range) {
|
||||||
int[] data = getAudioData();
|
int[] data = getAudioData();
|
||||||
if (data == null) return 0;
|
if (data == null) return 0;
|
||||||
|
if (data.length == 0) return 0;
|
||||||
|
|
||||||
if (pos < 0) pos = 0;
|
if (pos < 0) pos = 0;
|
||||||
if (pos >= data.length) pos = data.length-1;
|
if (pos >= data.length) pos = data.length-1;
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ public class Waveform extends JPanel {
|
|||||||
|
|
||||||
int num = samples.length;
|
int num = samples.length;
|
||||||
int step = num / w;
|
int step = num / w;
|
||||||
|
if (step == 0) return;
|
||||||
|
|
||||||
for (int n = 0; n < w; n++) {
|
for (int n = 0; n < w; n++) {
|
||||||
int hcnt = 0;
|
int hcnt = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user