All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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