org.mobicents.sdp.AudioFormat Maven / Gradle / Ivy
package org.mobicents.sdp;
public class AudioFormat extends Format {
public static final int BIG_ENDIAN = 1;
public static final int LITTLE_ENDIAN = 0;
public static final int SIGNED = 1;
public static final int UNSIGNED = 0;
protected double sampleRate = NOT_SPECIFIED;
protected int sampleSizeInBits = NOT_SPECIFIED;
protected int channels = NOT_SPECIFIED;
protected int endian = NOT_SPECIFIED;
protected int signed = NOT_SPECIFIED;
protected double frameRate = NOT_SPECIFIED;
protected int frameSizeInBits = NOT_SPECIFIED;
public static final String LINEAR = "LINEAR";
public static final String ULAW = "ulaw";
public static final String ULAW_RTP = "ULAW/rtp";
public static final String ALAW = "alaw"; // strange that this is lower
// case and ULAW is not...
public static final String G722 = "g722";
public static final String IMA4 = "ima4";
public static final String IMA4_MS = "ima4/ms";
public static final String MSADPCM = "msadpcm";
public static final String DVI4 = "dvi4";
public static final String LPC = "lpc";
public static final String G723 = "g723";
public static final String G728 = "g728";
public static final String G729 = "G729";
public static final String G729A = "g729a";
public static final String GSM = "gsm";
public static final String GSM_MS = "gsm/ms";
public static final String MAC3 = "MAC3";
public static final String MAC6 = "MAC6";
public static final String TRUESPEECH = "truespeech";
public static final String MSNAUDIO = "msnaudio";
public static final String MPEGLAYER3 = "mpeglayer3";
public static final String VOXWAREAC8 = "voxwareac8";
public static final String VOXWAREAC10 = "voxwareac10";
public static final String VOXWAREAC16 = "voxwareac16";
public static final String VOXWAREAC20 = "voxwareac20";
public static final String VOXWAREMETAVOICE = "voxwaremetavoice";
public static final String VOXWAREMETASOUND = "voxwaremetasound";
public static final String VOXWARERT29H = "voxwarert29h";
public static final String VOXWAREVR12 = "voxwarevr12";
public static final String VOXWAREVR18 = "voxwarevr18";
public static final String VOXWARETQ40 = "voxwaretq40";
public static final String VOXWARETQ60 = "voxwaretq60";
public static final String MSRT24 = "msrt24";
public static final String MPEG = "mpegaudio";
public static final String DOLBYAC3 = "dolbyac3"; // TODO: these are not
// used in this impl,
// only added for
// serialization
// compatibility.
// TODO: probably used for computeDuration, to make it faster.
double multiplier = -1.0;
int margin = 0;
boolean init = false;
private int hash;
public AudioFormat(String encoding) {
super(encoding);
hash = encoding.hashCode();
}
public AudioFormat(String encoding, double sampleRate, int sampleSizeInBits, int channels) {
super(encoding);
this.sampleRate = sampleRate;
this.sampleSizeInBits = sampleSizeInBits;
this.channels = channels;
hash = encoding.hashCode() + (int) sampleRate + sampleSizeInBits + channels;
}
public AudioFormat(String encoding, double sampleRate, int sampleSizeInBits, int channels, int endian, int signed) {
super(encoding);
this.sampleRate = sampleRate;
this.sampleSizeInBits = sampleSizeInBits;
this.channels = channels;
this.endian = endian;
this.signed = signed;
hash = encoding.hashCode() + (int) sampleRate + sampleSizeInBits + channels + endian + signed;
}
public AudioFormat(String encoding, double sampleRate, int sampleSizeInBits, int channels, int endian, int signed,
int frameSizeInBits, double frameRate) {
super(encoding);
this.sampleRate = sampleRate;
this.sampleSizeInBits = sampleSizeInBits;
this.channels = channels;
this.endian = endian;
this.signed = signed;
this.frameSizeInBits = frameSizeInBits;
this.frameRate = frameRate;
hash = encoding.hashCode() + (int) sampleRate + sampleSizeInBits + channels + endian + signed;
}
public double getSampleRate() {
return sampleRate;
}
public int getSampleSizeInBits() {
return sampleSizeInBits;
}
public int getChannels() {
return channels;
}
public int getEndian() {
return endian;
}
public int getSigned() {
return signed;
}
public int getFrameSizeInBits() {
return frameSizeInBits;
}
public double getFrameRate() {
return frameRate;
}
/**
* Overrides default toString. Flag indicates if output should be equal to parsed string: dolbyac3, 2, 1, 2;
*
* @param asInput
*
* - true - will return in the exact same way it has been fed: dolbyac3, 2, 1, 2 - this format
* is defined in rtp media format
*
- false - will return in format like: dolbyac3, 2.0 Hz, 1-bit, Stereo, Unsigned, 6.0 frame
* rate
*
* @return
*/
public String toString(boolean asInput) {
// examples:
// dolbyac3, Unknown Sample Rate
// dolbyac3, 2.0 Hz, 1-bit, Stereo, Unsigned, 6.0 frame rate,
// FrameSize=5 bits
// dolbyac3, 2.0 Hz, 1-bit, 0-channel, Unsigned, 6.0 frame rate,
// FrameSize=5 bits
// dolbyac3, 2.0 Hz, 1-bit, 3-channel, Unsigned, 6.0 frame rate,
// FrameSize=5 bits
// TODO: use "KHz" when appropriate.
final StringBuffer b = new StringBuffer();
b.append(encoding);
// b.append(", ");
if (FormatUtils.specified(sampleRate)) {
// FIXME: This removes .0
b.append(", " + (int) sampleRate);
if (!asInput) {
b.append(" Hz");
}
} else {
if (!asInput) {
b.append(", Unknown Sample Rate");
}
}
if (FormatUtils.specified(sampleSizeInBits)) {
b.append(", ");
b.append("" + sampleSizeInBits);
if (!asInput) {
b.append("-bit");
}
}
if (FormatUtils.specified(channels)) {
b.append(", ");
if (!asInput) {
if (channels == 1) {
b.append("Mono");
} else if (channels == 2) {
b.append("Stereo");
} else {
b.append("" + channels + "-channel");
}
} else {
b.append("" + channels);
}
}
if (FormatUtils.specified(endian) && FormatUtils.specified(sampleSizeInBits) && sampleSizeInBits > 8) {
b.append(", ");
if (!asInput) {
if (endian == BIG_ENDIAN) {
b.append("BigEndian");
} else if (endian == LITTLE_ENDIAN) {
b.append("LittleEndian");
} else { // unknown, don't append anything
}
} else {
b.append("" + endian);
}
}
if (FormatUtils.specified(signed)) {
b.append(", ");
if (!asInput) {
if (signed != SIGNED) {
b.append("Unsigned");
} else {
b.append("Signed");
}
} else {
b.append("" + signed);
}
}
if (FormatUtils.specified(frameRate)) {
b.append(", ");
if (!asInput) {
b.append("" + frameRate + " frame rate");
} else {
b.append("" + frameRate);
}
}
if (FormatUtils.specified(frameSizeInBits)) {
if (!asInput) {
b.append(", FrameSize=" + frameSizeInBits + " bits");
} else {
b.append(", " + frameSizeInBits);
}
}
return b.toString();
}
@Override
public String toString() {
return toString(true);
}
@Override
public boolean equals(Object format) {
return format.hashCode() == hash;
}
@Override
public int hashCode() {
return hash;
}
@Override
public boolean matches(Format format) {
if (!super.matches(format)) {
return false;
}
if (!(format instanceof AudioFormat)) {
return false;
}
final AudioFormat oCast = (AudioFormat) format;
final boolean result = FormatUtils.matches(this.sampleRate, oCast.sampleRate)
&& FormatUtils.matches(this.sampleSizeInBits, oCast.sampleSizeInBits)
&& FormatUtils.matches(this.channels, oCast.channels) && FormatUtils.matches(this.endian, oCast.endian)
&& FormatUtils.matches(this.signed, oCast.signed)
&& FormatUtils.matches(this.frameSizeInBits, oCast.frameSizeInBits)
&& FormatUtils.matches(this.frameRate, oCast.frameRate);
return result;
}
@Override
public Object clone() {
return new AudioFormat(encoding, sampleRate, sampleSizeInBits, channels, endian, signed, frameSizeInBits,
frameRate);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy