audiosystem.java

来自「kaffe Java 解释器语言,源码,Java的子集系统,开放源代码」· Java 代码 · 共 1,450 行 · 第 1/3 页

JAVA
1,450
字号
			// continue the iteration			return false;		}		public AudioInputStream getAudioInputStream()		{			return m_audioInputStream;		}	}	public static AudioInputStream getAudioInputStream(InputStream inputStream)		throws	UnsupportedAudioFileException, IOException	{		return getAudioInputStreamImpl(inputStream);	}	public static AudioInputStream getAudioInputStream(URL url)		throws	UnsupportedAudioFileException, IOException	{		return getAudioInputStreamImpl(url);	}	public static AudioInputStream getAudioInputStream(File file)		throws	UnsupportedAudioFileException, IOException	{		return getAudioInputStreamImpl(file);	}	private static AudioInputStream getAudioInputStreamImpl(		Object source)		throws	UnsupportedAudioFileException, IOException	{		GetAudioInputStreamAudioFileReaderAction	action = new GetAudioInputStreamAudioFileReaderAction(source);		doAudioFileReaderIteration(action);		AudioInputStream	audioInputStream = action.getAudioInputStream();		if (audioInputStream != null)		{			return audioInputStream;		}		else		{			throw new UnsupportedAudioFileException("format not supported");		}	}	public static AudioFileFormat.Type[] getAudioFileTypes()	{		Set		supportedTypes = new HashSet();		Iterator	audioFileWriters = TAudioConfig.getAudioFileWriters();		if (TDebug.TraceAudioSystem) { TDebug.out(">AudioSystem.getAudioFileTypes()"); }		while (audioFileWriters.hasNext())		{			AudioFileWriter	audioFileProvider = (AudioFileWriter) audioFileWriters.next();			if (TDebug.TraceAudioSystem) { TDebug.out("trying AudioFileWriter: " + audioFileProvider); }			AudioFileFormat.Type[]	aSupportedTypes = audioFileProvider.getAudioFileTypes();			if (TDebug.TraceAudioSystem) { TDebug.out("this AudioFileWriter supports the following Types:"); }			for (int i = 0; i < aSupportedTypes.length; i++)			{				if (TDebug.TraceAudioSystem) { TDebug.out(aSupportedTypes[i].toString()); }				supportedTypes.add(aSupportedTypes[i]);			}		}		if (TDebug.TraceAudioSystem) { TDebug.out("< returning "+supportedTypes.size()+" types."); }		return (AudioFileFormat.Type[]) supportedTypes.toArray(EMPTY_TYPE_ARRAY);	}	/**	AudioFileWriterAction for isFileTypeSupported().	 */	private static class IsFileTypeSupportedAudioFileWriterAction	implements	AudioFileWriterAction	{		private AudioFileFormat.Type	m_fileType;		private AudioInputStream	m_audioInputStream;		private boolean			m_bSupported;		public IsFileTypeSupportedAudioFileWriterAction(			AudioFileFormat.Type fileType,			AudioInputStream audioInputStream)		{			m_fileType = fileType;			m_audioInputStream = audioInputStream;			m_bSupported = false;		}		public boolean handleAudioFileWriter(			AudioFileWriter mixer)		{			boolean bSupported = false;			if (m_audioInputStream == null)			{				bSupported = mixer.isFileTypeSupported(					m_fileType);			}			else			{				bSupported = mixer.isFileTypeSupported(					m_fileType,					m_audioInputStream);			}			m_bSupported |= bSupported;			// interrupt the iteration depending on the result			return bSupported;		}		public boolean isSupported()		{			return m_bSupported;		}	}	public static boolean isFileTypeSupported(		AudioFileFormat.Type fileType)	{		return isFileTypeSupported(fileType, null);	}	public static AudioFileFormat.Type[] getAudioFileTypes(		AudioInputStream audioInputStream)	{		Set		supportedTypes = new HashSet();		Iterator	audioFileWriters = TAudioConfig.getAudioFileWriters();		if (TDebug.TraceAudioSystem) { TDebug.out(">AudioSystem.getAudioFileTypes()"); }		while (audioFileWriters.hasNext())		{			AudioFileWriter	audioFileProvider = (AudioFileWriter) audioFileWriters.next();			if (TDebug.TraceAudioSystem) { TDebug.out("trying AudioFileWriter: " + audioFileProvider); }			AudioFileFormat.Type[]	aSupportedTypes = audioFileProvider.getAudioFileTypes(audioInputStream);			if (TDebug.TraceAudioSystem) { TDebug.out("this AudioFileWriter supports the following Types:"); }			for (int i = 0; i < aSupportedTypes.length; i++)			{				if (TDebug.TraceAudioSystem)				{					TDebug.out(aSupportedTypes[i].toString());				}				supportedTypes.add(aSupportedTypes[i]);			}		}		if (TDebug.TraceAudioSystem) { TDebug.out("< returning "+supportedTypes.size()+" types."); }		return (AudioFileFormat.Type[]) supportedTypes.toArray(EMPTY_TYPE_ARRAY);	}	public static boolean isFileTypeSupported(		AudioFileFormat.Type fileType,		AudioInputStream audioInputStream)	{		IsFileTypeSupportedAudioFileWriterAction	action = new IsFileTypeSupportedAudioFileWriterAction(			fileType,			audioInputStream);		try		{			doAudioFileWriterIteration(action);		}		catch (IOException e)		{			if (TDebug.TraceAllExceptions) { TDebug.out(e); }		}		return action.isSupported();	}	/**	AudioFileWriterAction for write().	 */	private static class WriteAudioFileWriterAction	implements	AudioFileWriterAction	{		private AudioInputStream	m_audioInputStream;		private AudioFileFormat.Type	m_fileType;		private Object			m_destination;		private int			m_nWritten;		public WriteAudioFileWriterAction(			AudioInputStream audioInputStream,			AudioFileFormat.Type fileType,			Object destination)		{			m_audioInputStream = audioInputStream;			m_fileType = fileType;			m_destination = destination;			m_nWritten = -1;		}		// $$fb 2000-04-02: variable should be called "audioFileWriter" (too much copy&paste :)		public boolean handleAudioFileWriter(			AudioFileWriter audioFileWriter)			throws	IOException		{			int	nWritten = -1;			// $$fb 2000-04-02: need to check whether this audioFileWriter is actually			//                  capable of handling this file type !			if (TDebug.TraceAudioSystem) { TDebug.out(">AudioSystem.handleAudioFileWriter("+audioFileWriter.getClass().getName()+") checking for type "+m_fileType); }			if (!audioFileWriter.isFileTypeSupported(m_fileType)) 			{				if (TDebug.TraceAudioSystem) { TDebug.out("< is not capable of handling this file type"); }				return false;			}			try			{				if (m_destination instanceof OutputStream)				{					// $$fb 2000-04-02: s.a.					nWritten = audioFileWriter.write(						m_audioInputStream,						m_fileType,						(OutputStream) m_destination);				}				else if (m_destination instanceof File)				{					// $$fb 2000-04-02: s.a.					nWritten = audioFileWriter.write(						m_audioInputStream,						m_fileType,						(File) m_destination);				}				else				{					// TODO: debug message				}				m_nWritten = nWritten;				if (TDebug.TraceAudioSystem) { TDebug.out("< wrote "+nWritten+" bytes"); }				// interrupt the iteration				return true;			}			catch (IllegalArgumentException e)			{				if (TDebug.TraceAudioSystem || TDebug.TraceAllExceptions) { TDebug.out(e); }			}			if (TDebug.TraceAudioSystem) { TDebug.out("< does not support this file type."); }			// continue the iteration			return false;		}		public int getWritten()		{			return m_nWritten;		}	}	public static int write(AudioInputStream inputStream,				AudioFileFormat.Type fileType,				OutputStream outputStream)		throws	IOException	{		return writeImpl(inputStream,				 fileType,				 outputStream);	}	public static int write(AudioInputStream inputStream,				AudioFileFormat.Type fileType,				File file)		throws	IOException	{		return writeImpl(inputStream,				 fileType,				 file);	}	private static int writeImpl(AudioInputStream audioInputStream,				     AudioFileFormat.Type fileType,				     Object destination)		throws	IOException	{		WriteAudioFileWriterAction	action = new WriteAudioFileWriterAction(			audioInputStream,			fileType,			destination);		doAudioFileWriterIteration(action);		int	nWritten = action.getWritten();		if (nWritten == -1)		{			throw new IllegalArgumentException("format not  supported");		}		else		{			return nWritten;		}	}	//////////////////////////////////////////////////////////////	//	//	auxiliary methods and interfaces	//	//////////////////////////////////////////////////////////////	private static interface MixerProviderAction	{		public boolean handleMixerProvider(MixerProvider mixerProvider);	}	/**	Iterates over the available MixerProviders.	 *	For each MixerProvider, the mathod handleMixerProvider() of	 *	the passed MixerProviderAction is called with the MixerProvider	 *	in question as the only argument.	 */	private static void doMixerProviderIteration(		MixerProviderAction action)	{		Iterator	mixerProviders = TAudioConfig.getMixerProviders();		boolean	bCompleted = false;		if (TDebug.TraceAudioSystem) { TDebug.out(">AudioSystem.doMixerProviderIteration()"); }		while (mixerProviders.hasNext() && ! bCompleted)		{			MixerProvider	mixerProvider = (MixerProvider) mixerProviders.next();			if (TDebug.TraceAudioSystem) { TDebug.out("handling MixerProvider: " + mixerProvider); }			bCompleted = action.handleMixerProvider(mixerProvider);		}		if (TDebug.TraceAudioSystem) { TDebug.out("< completed="+bCompleted); }	}	private static interface MixerAction	{		public boolean handleMixer(Mixer mixer);	}	/**	Iterates over the available MixerProviders.	 *	For each MixerProvider, the mathod handleMixerProvider() of	 *	the passed MixerProviderAction is called with the MixerProvider	 *	in question as the only argument.	 */	private static void doMixerIteration(		MixerAction action)	{		Mixer.Info[]	mixerInfos = getMixerInfo();		boolean	bCompleted = false;		if (TDebug.TraceAudioSystem) { TDebug.out(">AudioSystem.doMixerIteration()"); }		for (int nMixer = 0; nMixer < mixerInfos.length && ! bCompleted; nMixer++)		{			Mixer	mixer = getMixer(mixerInfos[nMixer]);			if (TDebug.TraceAudioSystem) { TDebug.out("handling Mixer: " + mixer); }			bCompleted = action.handleMixer(mixer);		}		if (TDebug.TraceAudioSystem) { TDebug.out("< completed="+bCompleted); }	}	private static interface FormatConversionProviderAction	{		public boolean handleFormatConversionProvider(FormatConversionProvider formatConversionProvider);		// throws	IOException;	}	/**	Iterates over the available FormatConversionProviders.	 *	For each FormatConversionProvider, the mathod handleFormatConversionProvider() of	 *	the passed FormatConversionProviderAction is called with the FormatConversionProvider	 *	in question as the only argument.	 */	private static void doFormatConversionProviderIteration(		FormatConversionProviderAction action)		// throws	IOException	{		Iterator	formatConversionProviders = TAudioConfig.getFormatConversionProviders();		boolean bCompleted = false;		if (TDebug.TraceAudioSystem) { TDebug.out(">AudioSystem.doFormatConversionProviderIteration()"); }		while (formatConversionProviders.hasNext() && ! bCompleted)		{			FormatConversionProvider	formatConversionProvider = (FormatConversionProvider) formatConversionProviders.next();			if (TDebug.TraceAudioSystem) { TDebug.out("handling FormatConversionProvider: " + formatConversionProvider); }			bCompleted = action.handleFormatConversionProvider(formatConversionProvider);		}		if (TDebug.TraceAudioSystem) { TDebug.out("< completed="+bCompleted); }	}	private static interface AudioFileReaderAction	{		public boolean handleAudioFileReader(AudioFileReader audioFileReader)			throws	IOException;	}	/**	Iterates over the available AudioFileReaders.	 *	For each AudioFileReader, the mathod handleAudioFileReader() of	 *	the passed AudioFileReaderAction is called with the AudioFileReader	 *	in question as the only argument.	 */	private static void doAudioFileReaderIteration(		AudioFileReaderAction action)		throws	IOException	{		Iterator	audioFileReaders = TAudioConfig.getAudioFileReaders();		boolean bCompleted = false;		if (TDebug.TraceAudioSystem) { TDebug.out(">AudioSystem.doAudioFileReaderIteration()"); }		while (audioFileReaders.hasNext() && ! bCompleted)		{			AudioFileReader	audioFileReader = (AudioFileReader) audioFileReaders.next();			if (TDebug.TraceAudioSystem) { TDebug.out("handling AudioFileReader: " + audioFileReader); }			bCompleted = action.handleAudioFileReader(audioFileReader);		}		if (TDebug.TraceAudioSystem) { TDebug.out("< completed="+bCompleted); }	}	private static interface AudioFileWriterAction	{		public boolean handleAudioFileWriter(AudioFileWriter audioFileWriter)			throws	IOException;	}	/**	Iterates over the available AudioFileWriters.	 *	For each AudioFileWriter, the mathod handleAudioFileWriter() of	 *	the passed AudioFileWriterAction is called with the AudioFileWriter	 *	in question as the only argument.	 */	private static void doAudioFileWriterIteration(		AudioFileWriterAction action)		throws	IOException	{		Iterator	audioFileWriters = TAudioConfig.getAudioFileWriters();		boolean bCompleted = false;		if (TDebug.TraceAudioSystem) { TDebug.out(">AudioSystem.doAudioFileWriterIteration()"); }		while (audioFileWriters.hasNext() && ! bCompleted)		{			AudioFileWriter	audioFileWriter = (AudioFileWriter) audioFileWriters.next();			if (TDebug.TraceAudioSystem) { TDebug.out("handling AudioFileWriter: " + audioFileWriter); }			bCompleted = action.handleAudioFileWriter(audioFileWriter);		}		if (TDebug.TraceAudioSystem) { TDebug.out("< completed="+bCompleted); }	}}/*** AudioSystem.java ***/

⌨️ 快捷键说明

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