001/* Format conversion API 002 Copyright (C) 2005 Free Software Foundation, Inc. 003 004This file is part of GNU Classpath. 005 006GNU Classpath is free software; you can redistribute it and/or modify 007it under the terms of the GNU General Public License as published by 008the Free Software Foundation; either version 2, or (at your option) 009any later version. 010 011GNU Classpath is distributed in the hope that it will be useful, but 012WITHOUT ANY WARRANTY; without even the implied warranty of 013MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 014General Public License for more details. 015 016You should have received a copy of the GNU General Public License 017along with GNU Classpath; see the file COPYING. If not, write to the 018Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 01902110-1301 USA. 020 021Linking this library statically or dynamically with other modules is 022making a combined work based on this library. Thus, the terms and 023conditions of the GNU General Public License cover the whole 024combination. 025 026As a special exception, the copyright holders of this library give you 027permission to link this library with independent modules to produce an 028executable, regardless of the license terms of these independent 029modules, and to copy and distribute the resulting executable under 030terms of your choice, provided that you also meet, for each linked 031independent module, the terms and conditions of the license of that 032module. An independent module is a module which is not derived from 033or based on this library. If you modify this library, you may extend 034this exception to your version of the library, but you are not 035obligated to do so. If you do not wish to do so, delete this 036exception statement from your version. */ 037 038 039package javax.sound.sampled.spi; 040 041import javax.sound.sampled.AudioFormat; 042import javax.sound.sampled.AudioInputStream; 043 044/** 045 * A format conversion provider supplies methods for converting between 046 * different audio formats. This abstract class defines the interface 047 * to this functionality; concrete subclasses will implement the methods 048 * declared here. 049 * @since 1.3 050 */ 051public abstract class FormatConversionProvider 052{ 053 /** 054 * Create a new format conversion provider. 055 */ 056 public FormatConversionProvider() 057 { 058 } 059 060 /** 061 * Return an audio input stream given the desired target encoding and 062 * another audio input stream. The data in the given stream will be 063 * converted to the desired encoding. 064 * @param encoding the encoding 065 * @param source the source audio input stream 066 * @return a new audio input stream 067 * @throws IllegalArgumentException if the conversion is not supported 068 */ 069 public abstract AudioInputStream getAudioInputStream(AudioFormat.Encoding encoding, 070 AudioInputStream source); 071 072 /** 073 * Return an audio input stream given the desired target format and 074 * another audio input stream. The data in the given stream will be 075 * converted to the desired format. 076 * @param format the format 077 * @param source the source audio input stream 078 * @return a new audio input stream 079 * @throws IllegalArgumentException if the conversion is not supported 080 */ 081 public abstract AudioInputStream getAudioInputStream(AudioFormat format, 082 AudioInputStream source); 083 084 /** 085 * Return an array of all the source encodings supported by this conversion 086 * provider. 087 */ 088 public abstract AudioFormat.Encoding[] getSourceEncodings(); 089 090 /** 091 * Return an array of all the target encodings supported by this conversion 092 * provider. 093 */ 094 public abstract AudioFormat.Encoding[] getTargetEncodings(); 095 096 /** 097 * Return an array of all the target encodings that are available for a given 098 * source format. 099 * @param fmt the source format 100 * @return an array of supported target encodings 101 */ 102 public abstract AudioFormat.Encoding[] getTargetEncodings(AudioFormat fmt); 103 104 /** 105 * Return a array of all the target formats that match given target encoding, 106 * and to which this provider can convert the source format. 107 * @param targ the target encoding to match 108 * @param src the source format 109 * @return an array of supported target formats 110 */ 111 public abstract AudioFormat[] getTargetFormats(AudioFormat.Encoding targ, 112 AudioFormat src); 113 114 /** 115 * Return true if this provider supports conversion from the given 116 * source format to the given target encoding. 117 * @param targ the target encoding 118 * @param src the source format 119 * @return true if the conversion is supported 120 */ 121 public boolean isConversionSupported(AudioFormat.Encoding targ, 122 AudioFormat src) 123 { 124 AudioFormat.Encoding[] encodings = getTargetEncodings(src); 125 for (int i = 0; i < encodings.length; ++i) 126 { 127 if (targ.equals(encodings[i])) 128 return true; 129 } 130 return false; 131 } 132 133 /** 134 * Return true if this provider supports conversions from the given 135 * source format to the given target format. 136 * @param targ the source format 137 * @param src the target format 138 * @return true if the conversion is supported 139 */ 140 public boolean isConversionSupported(AudioFormat targ, AudioFormat src) 141 { 142 AudioFormat[] encodings = getTargetFormats(targ.getEncoding(), src); 143 return encodings.length > 0; 144 } 145 146 /** 147 * Return true if an encoding matching the argument is supported as a 148 * source encoding by this provider. 149 * @param src the source encoding 150 * @return true if it is supported 151 */ 152 public boolean isSourceEncodingSupported(AudioFormat.Encoding src) 153 { 154 AudioFormat.Encoding[] srcs = getSourceEncodings(); 155 for (int i = 0; i < srcs.length; ++i) 156 { 157 if (src.equals(srcs[i])) 158 return true; 159 } 160 return false; 161 } 162 163 /** 164 * Return true if an encoding matching the argument is supported as a 165 * target encoding by this provider. 166 * @param targ the target encoding 167 * @return true if it is supported 168 */ 169 public boolean isTargetEncodingSupported(AudioFormat.Encoding targ) 170 { 171 AudioFormat.Encoding[] encodings = getTargetEncodings(); 172 for (int i = 0; i < encodings.length; ++i) 173 { 174 if (targ.equals(encodings[i])) 175 return true; 176 } 177 return false; 178 } 179}