⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 audioformat.java

📁 FMJ(freedom media for java)是java视频开发的新选择
💻 JAVA
字号:
package javax.media.format;import javax.media.Format;import net.sf.fmj.utility.FormatUtils;/** * Coding complete. * @author Ken Larson * */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 IMA4 = "ima4";	public static final String IMA4_MS = "ima4/ms";	public static final String MSADPCM = "msadpcm";	public static final String DVI = "dvi";	public static final String DVI_RTP = "dvi/rtp";	public static final String G723 = "g723";	public static final String G723_RTP = "g723/rtp";	public static final String G728 = "g728";	public static final String G728_RTP = "g728/rtp";	public static final String G729 = "g729";	public static final String G729_RTP = "g729/rtp";	public static final String G729A = "g729a";	public static final String G729A_RTP = "g729a/rtp";	public static final String GSM = "gsm";	public static final String GSM_MS = "gsm/ms";	public static final String GSM_RTP = "gsm/rtp";	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 MPEG_RTP = "mpegaudio/rtp";	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;	public AudioFormat(String encoding)	{		super(encoding);		this.dataType = byteArray;	}	public AudioFormat(String encoding, double sampleRate,			int sampleSizeInBits, int channels)	{		super(encoding); 		this.dataType = byteArray;		this.sampleRate = sampleRate;		this.sampleSizeInBits = sampleSizeInBits;		this.channels = channels;	}	public AudioFormat(String encoding, double sampleRate,			int sampleSizeInBits, int channels, int endian, int signed)	{		super(encoding); 		this.dataType = byteArray;		this.sampleRate = sampleRate;		this.sampleSizeInBits = sampleSizeInBits;		this.channels = channels;		this.endian = endian;		this.signed = signed;			}	public AudioFormat(String encoding, double sampleRate,			int sampleSizeInBits, int channels, int endian, int signed,			int frameSizeInBits, double frameRate, Class dataType)	{		super(encoding, dataType);		this.sampleRate = sampleRate;		this.sampleSizeInBits = sampleSizeInBits;		this.channels = channels;		this.endian = endian;		this.signed = signed;		this.frameSizeInBits = frameSizeInBits;		this.frameRate = frameRate;	}		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;	}		public long computeDuration(long length)	{			// TODO: this calculation does not always give the exact same result as the reference implementation.		// see JavaSound API for information on frames and samples.		// http://java.sun.com/j2se/1.4.2/docs/api/javax/sound/sampled/AudioFormat.html				final double frameRate;		final int frameSizeInBits; 				if (FormatUtils.specified(this.frameRate) && FormatUtils.specified(this.frameSizeInBits))		{			frameRate = this.frameRate;			frameSizeInBits = this.frameSizeInBits;		}		else if (FormatUtils.specified(this.sampleRate) && FormatUtils.specified(this.sampleSizeInBits) && FormatUtils.specified(this.channels))		{//			this calculation is correct for uncompressed data.  TODO: are there any formats where this is not correct?			frameRate = this.sampleRate;			frameSizeInBits = this.sampleSizeInBits * this.channels;		}		else			return -1L;				return 1000L * (long)(length * 8 * 1000000.0 / ((double) frameRate * (double) frameSizeInBits));	}	public String toString()	{	// 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))			b.append(sampleRate + " Hz");		else			b.append("Unknown Sample Rate");				if (FormatUtils.specified(sampleSizeInBits))		{			b.append(", ");			b.append("" + sampleSizeInBits + "-bit");		}		if (FormatUtils.specified(channels))		{			b.append(", ");			if (channels == 1)				b.append("Mono");			else if (channels == 2)				b.append("Stereo");			else				b.append("" + channels + "-channel");		}				if (FormatUtils.specified(endian) && FormatUtils.specified(sampleSizeInBits) && sampleSizeInBits > 8)		{						if (endian == BIG_ENDIAN)			{	b.append(", ");				b.append("BigEndian");			}			else if (endian == LITTLE_ENDIAN)			{					b.append(", ");				b.append("LittleEndian");			}			else 			{	// unknown, don't append anything			}		}				if (FormatUtils.specified(signed))		{			b.append(", ");			if (signed != SIGNED)				b.append("Unsigned");			else				b.append("Signed");		}				if (FormatUtils.specified(frameRate))		{			b.append(", ");			b.append("" + frameRate + " frame rate");		}		if (FormatUtils.specified(frameSizeInBits))		{			b.append(", FrameSize=" + frameSizeInBits + " bits"); 		}		return b.toString();			}	public boolean equals(Object format)	{			if (!super.equals(format))			return false;				if (!(format instanceof AudioFormat))			{			return false;		}				final AudioFormat oCast = (AudioFormat) format;		return 			this.sampleRate == oCast.sampleRate &&			this.sampleSizeInBits == oCast.sampleSizeInBits &&			this.channels == oCast.channels &&			this.endian == oCast.endian &&			this.signed == oCast.signed &&			this.frameSizeInBits == oCast.frameSizeInBits &&			this.frameRate == oCast.frameRate;	}	public boolean matches(Format format)	{			if (!super.matches(format))		{				if (getClass() == FormatUtils.audioFormatClass) FormatUtils.traceMatches(this, format, false); // otherwise let subclass trace			return false;		}				if (!(format instanceof AudioFormat))		{				final boolean result = true;			if (getClass() == FormatUtils.audioFormatClass) FormatUtils.traceMatches(this, format, result);			return result;		}				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);				if (getClass() == FormatUtils.audioFormatClass) FormatUtils.traceMatches(this, format, result); // otherwise let subclass trace				return result;	}	public Format intersects(Format other)	{					final Format result = super.intersects(other);		if (other instanceof AudioFormat)		{			final AudioFormat resultCast = (AudioFormat) result;						final AudioFormat oCast = (AudioFormat) other;			if (getClass().isAssignableFrom(other.getClass()))			{					// "other" was cloned.								if (FormatUtils.specified(this.sampleRate))					resultCast.sampleRate = this.sampleRate;				if (FormatUtils.specified(this.sampleSizeInBits))					resultCast.sampleSizeInBits = this.sampleSizeInBits;				if (FormatUtils.specified(this.channels))					resultCast.channels = this.channels;				if (FormatUtils.specified(this.endian))					resultCast.endian = this.endian;				if (FormatUtils.specified(this.signed))					resultCast.signed = this.signed;				if (FormatUtils.specified(this.frameSizeInBits))					resultCast.frameSizeInBits = this.frameSizeInBits;				if (FormatUtils.specified(this.frameRate))					resultCast.frameRate = this.frameRate;							}			else if (other.getClass().isAssignableFrom(getClass()))			{	// this was cloned								if (!FormatUtils.specified(resultCast.sampleRate))					resultCast.sampleRate = oCast.sampleRate;				if (!FormatUtils.specified(resultCast.sampleSizeInBits))					resultCast.sampleSizeInBits = oCast.sampleSizeInBits;				if (!FormatUtils.specified(resultCast.channels))					resultCast.channels = oCast.channels;				if (!FormatUtils.specified(resultCast.endian))					resultCast.endian = oCast.endian;				if (!FormatUtils.specified(resultCast.signed))					resultCast.signed = oCast.signed;				if (!FormatUtils.specified(resultCast.frameSizeInBits))					resultCast.frameSizeInBits = oCast.frameSizeInBits;				if (!FormatUtils.specified(resultCast.frameRate))					resultCast.frameRate = oCast.frameRate;						}		}				if (getClass() == FormatUtils.audioFormatClass) FormatUtils.traceIntersects(this, other, result);				return result;	}		public Object clone()	{		return new AudioFormat(encoding, sampleRate, sampleSizeInBits,				channels, endian, signed, frameSizeInBits, frameRate, dataType);	}		protected void copy(Format f)	{			super.copy(f);		final AudioFormat oCast = (AudioFormat) f;	// it has to be a AudioFormat, or ClassCastException will be thrown.		this.sampleRate = oCast.sampleRate;		this.sampleSizeInBits = oCast.sampleSizeInBits;		this.channels = oCast.channels;		this.endian = oCast.endian;		this.signed = oCast.signed;		this.frameSizeInBits = oCast.frameSizeInBits;		this.frameRate = oCast.frameRate;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -