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 + -
显示快捷键?