package net.sourceforge.jaad.aac;
/**
* This class is part of JAAD ( jaadec.sourceforge.net ) that is distributed
* under the Public Domain license. Code changes provided by the JCodec project
* are distributed under FreeBSD license.
*
* An enumeration that represents all possible sample frequencies AAC data can
* have.
*
* @author in-somnia
*/
public final class SampleFrequency {
public final static SampleFrequency SAMPLE_FREQUENCY_96000 = new SampleFrequency(0, 96000, new int[] { 33, 512 },
new int[] { 31, 9 });
public final static SampleFrequency SAMPLE_FREQUENCY_88200 = new SampleFrequency(1, 88200, new int[] { 33, 512 },
new int[] { 31, 9 });
public final static SampleFrequency SAMPLE_FREQUENCY_64000 = new SampleFrequency(2, 64000, new int[] { 38, 664 },
new int[] { 34, 10 });
public final static SampleFrequency SAMPLE_FREQUENCY_48000 = new SampleFrequency(3, 48000, new int[] { 40, 672 },
new int[] { 40, 14 });
public final static SampleFrequency SAMPLE_FREQUENCY_44100 = new SampleFrequency(4, 44100, new int[] { 40, 672 },
new int[] { 42, 14 });
public final static SampleFrequency SAMPLE_FREQUENCY_32000 = new SampleFrequency(5, 32000, new int[] { 40, 672 },
new int[] { 51, 14 });
public final static SampleFrequency SAMPLE_FREQUENCY_24000 = new SampleFrequency(6, 24000, new int[] { 41, 652 },
new int[] { 46, 14 });
public final static SampleFrequency SAMPLE_FREQUENCY_22050 = new SampleFrequency(7, 22050, new int[] { 41, 652 },
new int[] { 46, 14 });
public final static SampleFrequency SAMPLE_FREQUENCY_16000 = new SampleFrequency(8, 16000, new int[] { 37, 664 },
new int[] { 42, 14 });
public final static SampleFrequency SAMPLE_FREQUENCY_12000 = new SampleFrequency(9, 12000, new int[] { 37, 664 },
new int[] { 42, 14 });
public final static SampleFrequency SAMPLE_FREQUENCY_11025 = new SampleFrequency(10, 11025, new int[] { 37, 664 },
new int[] { 42, 14 });
public final static SampleFrequency SAMPLE_FREQUENCY_8000 = new SampleFrequency(11, 8000, new int[] { 34, 664 },
new int[] { 39, 14 });
public final static SampleFrequency SAMPLE_FREQUENCY_NONE = new SampleFrequency(-1, 0, new int[] { 0, 0 },
new int[] { 0, 0 });
private final static SampleFrequency[] _values = new SampleFrequency[] { SAMPLE_FREQUENCY_96000,
SAMPLE_FREQUENCY_88200, SAMPLE_FREQUENCY_64000, SAMPLE_FREQUENCY_48000, SAMPLE_FREQUENCY_44100,
SAMPLE_FREQUENCY_32000, SAMPLE_FREQUENCY_24000, SAMPLE_FREQUENCY_22050, SAMPLE_FREQUENCY_16000,
SAMPLE_FREQUENCY_12000, SAMPLE_FREQUENCY_11025, SAMPLE_FREQUENCY_8000, SAMPLE_FREQUENCY_NONE };
public static SampleFrequency[] values() {
return _values;
}
/**
* Returns a sample frequency instance for the given index. If the index is
* not between 0 and 11 inclusive, SAMPLE_FREQUENCY_NONE is returned.
*
* @return a sample frequency with the given index
*/
public static SampleFrequency forInt(int i) {
final SampleFrequency freq;
if (i >= 0 && i < 12)
freq = values()[i];
else
freq = SAMPLE_FREQUENCY_NONE;
return freq;
}
public static SampleFrequency forFrequency(int i) {
final SampleFrequency[] all = values();
SampleFrequency freq = null;
for (int j = 0; freq == null && j < 12; j++) {
if (i == all[j].frequency)
freq = all[j];
}
if (freq == null)
freq = SAMPLE_FREQUENCY_NONE;
return freq;
}
private final int index, frequency;
private final int[] prediction, maxTNS_SFB;
private SampleFrequency(int index, int freqency, int[] prediction, int[] maxTNS_SFB) {
this.index = index;
this.frequency = freqency;
this.prediction = prediction;
this.maxTNS_SFB = maxTNS_SFB;
}
/**
* Returns this sample frequency's index between 0 (96000) and 11 (8000) or
* -1 if this is SAMPLE_FREQUENCY_NONE.
*
* @return the sample frequency's index
*/
public int getIndex() {
return index;
}
/**
* Returns the sample frequency as integer value. This may be a value
* between 96000 and 8000, or 0 if this is SAMPLE_FREQUENCY_NONE.
*
* @return the sample frequency
*/
public int getFrequency() {
return frequency;
}
/**
* Returns the highest scale factor band allowed for ICPrediction at this
* sample frequency. This method is mainly used internally.
*
* @return the highest prediction SFB
*/
public int getMaximalPredictionSFB() {
return prediction[0];
}
/**
* Returns the number of predictors allowed for ICPrediction at this sample
* frequency. This method is mainly used internally.
*
* @return the number of ICPredictors
*/
public int getPredictorCount() {
return prediction[1];
}
/**
* Returns the highest scale factor band allowed for TNS at this sample
* frequency. This method is mainly used internally.
*
* @return the highest SFB for TNS
*/
public int getMaximalTNS_SFB(boolean shortWindow) {
return maxTNS_SFB[shortWindow ? 1 : 0];
}
/**
* Returns a string representation of this sample frequency. The method is
* identical to <code>getDescription()</code>.
*
* @return the sample frequency's description
*/
@Override
public String toString() {
return Integer.toString(frequency);
}
}