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

📄 taudiooutputstream.java

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 JAVA
字号:
/* *	TAudioOutputStream.java *//* *  Copyright (c) 2000 by Matthias Pfisterer <Matthias.Pfisterer@gmx.de> * * *   This program is free software; you can redistribute it and/or modify *   it under the terms of the GNU Library General Public License as published *   by the Free Software Foundation; either version 2 of the License, or *   (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU Library General Public License for more details. * *   You should have received a copy of the GNU Library General Public *   License along with this program; if not, write to the Free Software *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */package	org.tritonus.share.sampled.file;import java.io.IOException;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioSystem;import org.tritonus.share.TDebug;/**	 * Base class for classes implementing AudioOutputStream. * * @author Matthias Pfisterer */ public abstract class TAudioOutputStream	implements	AudioOutputStream{	private AudioFormat		m_audioFormat;	private long			m_lLength; // in bytes	private long			m_lCalculatedLength;	private TDataOutputStream	m_dataOutputStream;	private boolean			m_bDoBackPatching;	private boolean			m_bHeaderWritten;	protected TAudioOutputStream(AudioFormat audioFormat,				     long lLength,				     TDataOutputStream dataOutputStream,				     boolean bDoBackPatching)	{		m_audioFormat = audioFormat;		m_lLength = lLength;		m_lCalculatedLength = 0;		m_dataOutputStream = dataOutputStream;		m_bDoBackPatching = bDoBackPatching;		m_bHeaderWritten = false;	}	public AudioFormat getFormat()	{		return m_audioFormat;	}	/**	Gives length of the stream.	 *	This value is in bytes. It may be AudioSystem.NOT_SPECIFIED	 *	to express that the length is unknown.	 */	public long getLength()	{		return m_lLength;	}	/**	Gives number of bytes already written.	 */	// IDEA: rename this to BytesWritten or something like that ?	public long getCalculatedLength()	{		return m_lCalculatedLength;	}	protected TDataOutputStream getDataOutputStream()	{		return m_dataOutputStream;	}	/**	Writes audio data to the destination (file or output stream).	 */	// IDEA: use long?	public int write(byte[] abData, int nOffset, int nLength)		throws	IOException	{		if (TDebug.TraceAudioOutputStream)		{			TDebug.out("TAudioOutputStream.write(): wanted length: " + nLength);		}		if (! m_bHeaderWritten)		{			writeHeader();			m_bHeaderWritten = true;		}		// $$fb added		// check that total writes do not exceed specified length		long lTotalLength=getLength();		if (lTotalLength!=AudioSystem.NOT_SPECIFIED && (m_lCalculatedLength+nLength)>lTotalLength) {			if (TDebug.TraceAudioOutputStream) {				TDebug.out("TAudioOutputStream.write(): requested more bytes to write than possible.");			}			nLength=(int) (lTotalLength-m_lCalculatedLength);			// sanity			if (nLength<0) {				nLength=0;			}		}		// TODO: throw an exception if nLength==0 ? (to indicate end of file ?)		if (nLength>0) {			m_dataOutputStream.write(abData, nOffset, nLength);			m_lCalculatedLength += nLength;		}		if (TDebug.TraceAudioOutputStream)		{			TDebug.out("TAudioOutputStream.write(): calculated (total) length: " + m_lCalculatedLength+" bytes = "+(m_lCalculatedLength/getFormat().getFrameSize())+" frames");		}		return nLength;	}	/**	Writes the header of the audio file.	 */	protected abstract void writeHeader()		throws	IOException;	/**	Closes the stream.	 *	This does write remaining buffered data to the destination,	 *	backpatch the header, if necessary, and closes the destination.	 */	public void close()		throws	IOException	{		if (TDebug.TraceAudioOutputStream)		{			TDebug.out("TAudioOutputStream.close(): called");		}		// flush?		if (m_bDoBackPatching)		{			if (TDebug.TraceAudioOutputStream)			{				TDebug.out("TAudioOutputStream.close(): patching header");			}			patchHeader();		}		m_dataOutputStream.close();	}	protected void patchHeader()		throws	IOException	{		TDebug.out("TAudioOutputStream.patchHeader(): called");		// DO NOTHING	}	protected void setLengthFromCalculatedLength()	{		m_lLength = m_lCalculatedLength;	}}/*** TAudioOutputStream.java ***/

⌨️ 快捷键说明

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