/*
* FormatConversionProviderTest.java
*/
import java.util.ArrayList;
import java.util.List;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioFormat.Encoding;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.spi.FormatConversionProvider;
public class FormatConversionProviderTest
{
private static final float[] COMMON_SAMPLE_RATES =
{
8000.0F,
11025.0F,
16000.0F,
22050.0F,
32000.0F,
44100.0F,
48000.0F,
96000.0F,
};
private static final int[] COMMON_SAMPLE_SIZES =
{
8, 16, 24, 32,
};
private static final int[] COMMON_CHANNELS =
{
1, 2,
};
public static void main(String[] args)
throws Exception
{
String strProviderClassName = args[0];
FormatConversionProvider provider = getProvider(strProviderClassName);
outSeparator();
out("FormatConversionProvider: " + provider.getClass().getName());
outSeparator();
Encoding[] aSourceEncodings = provider.getSourceEncodings();
out("Source Encodings:");
out(aSourceEncodings);
outSeparator();
Encoding[] aTargetEncodings = provider.getTargetEncodings();
out("Target Encodings:");
out(aTargetEncodings);
outSeparator();
for (int i = 0; i < aSourceEncodings.length; i++)
{
outTargetEncodingsForFormat(provider,
aSourceEncodings[i]);
}
// test getAudioInputStream(AudioFormat.Encoding targetEncoding, AudioInputStream sourceStream)
for (int nSourceEncoding = 0; nSourceEncoding < aSourceEncodings.length; nSourceEncoding++)
{
Encoding sourceEncoding = aSourceEncodings[nSourceEncoding];
AudioFormat[] aSourceFormats = createAudioFormatsForEncoding(sourceEncoding);
for (int nSourceFormat = 0; nSourceFormat < aSourceFormats.length; nSourceFormat++)
{
AudioFormat sourceFormat = aSourceFormats[nSourceFormat];
for (int nTargetEncoding = 0; nTargetEncoding < aTargetEncodings.length; nTargetEncoding++)
{
Encoding targetEncoding = aTargetEncodings[nTargetEncoding];
boolean bSupported = provider.isConversionSupported(targetEncoding, sourceFormat);
out("conversion supported " + getAudioFormatString(sourceFormat) + " --> " + targetEncoding + ": " + bSupported);
}
}
}
}
private static void outTargetEncodingsForFormat(
FormatConversionProvider provider,
Encoding sourceEncoding)
{
AudioFormat audioFormat = new AudioFormat(
sourceEncoding,
AudioSystem.NOT_SPECIFIED,
AudioSystem.NOT_SPECIFIED,
AudioSystem.NOT_SPECIFIED,
AudioSystem.NOT_SPECIFIED,
AudioSystem.NOT_SPECIFIED,
false);
Encoding[] aTargetEncodingsForFormat = provider.getTargetEncodings();
out("Target Encodings for " + getAudioFormatString(audioFormat));
out(aTargetEncodingsForFormat);
outSeparator();
}
private static AudioFormat[] createAudioFormatsForEncoding(Encoding encoding)
{
List formats = new ArrayList();
if (encoding == Encoding.PCM_SIGNED ||
encoding == Encoding.PCM_UNSIGNED)
{
for (int nSampleSizeIndex = 0; nSampleSizeIndex < COMMON_SAMPLE_SIZES.length; nSampleSizeIndex++)
{
createAudioFormatsForEncodingSub(formats, encoding,
COMMON_SAMPLE_SIZES[nSampleSizeIndex]);
}
}
else if (encoding == Encoding.ALAW ||
encoding == Encoding.ULAW)
{
createAudioFormatsForEncodingSub(formats, encoding, 8);
}
return (AudioFormat[]) formats.toArray(new AudioFormat[0]);
}
private static void createAudioFormatsForEncodingSub(List formats,
Encoding encoding,
int nSampleSizeInBits)
{
for (int nSampleRateIndex = 0; nSampleRateIndex < COMMON_SAMPLE_RATES.length; nSampleRateIndex++)
{
for (int nChannelIndex = 0; nChannelIndex < COMMON_CHANNELS.length; nChannelIndex++)
{
for (int nEndianess = 0; nEndianess <= 1; nEndianess++)
{
boolean bEndianess = (nEndianess == 0);
AudioFormat format = new AudioFormat(
encoding,
COMMON_SAMPLE_RATES[nSampleRateIndex],
nSampleSizeInBits,
COMMON_CHANNELS[nChannelIndex],
nSampleSizeInBits * COMMON_CHANNELS[nChannelIndex] / 8,
COMMON_SAMPLE_RATES[nSampleRateIndex],
bEndianess);
formats.add(format);
}
}
}
}
private static FormatConversionProvider getProvider(String strProviderClassName)
throws Exception
{
Class providerClass = Class.forName(strProviderClassName);
FormatConversionProvider provider = (FormatConversionProvider) providerClass.newInstance();
return provider;
}
private static String getAudioFormatString(AudioFormat audioFormat)
{
return getAudioFormatStringImpl0(audioFormat);
}
private static String getAudioFormatStringImpl0(AudioFormat audioFormat)
{
StringBuffer strBuf = new StringBuffer();
strBuf.append(audioFormat.getEncoding().toString());
strBuf.append(", ");
strBuf.append(audioFormat.getSampleRate());
strBuf.append(" Hz , ");
strBuf.append(audioFormat.getSampleSizeInBits());
strBuf.append(" bit , ");
strBuf.append(audioFormat.getChannels());
strBuf.append(" ch, ");
strBuf.append(audioFormat.getFrameSize());
strBuf.append(" byte, ");
strBuf.append(audioFormat.getFrameRate());
strBuf.append(" Hz, ");
strBuf.append(audioFormat.isBigEndian() ? "BE" : "le");
return strBuf.toString();
}
private static String getAudioFormatStringImpl1(AudioFormat audioFormat)
{
StringBuffer strBuf = new StringBuffer();
strBuf.append("enc: ");
strBuf.append(audioFormat.getEncoding().toString());
strBuf.append(", sr: ");
strBuf.append(audioFormat.getSampleRate());
strBuf.append(", ss: ");
strBuf.append(audioFormat.getSampleSizeInBits());
strBuf.append(", ch: ");
strBuf.append(audioFormat.getChannels());
strBuf.append(", fs: ");
strBuf.append(audioFormat.getFrameSize());
strBuf.append(", fr: ");
strBuf.append(audioFormat.getFrameRate());
strBuf.append(audioFormat.isBigEndian() ? ", BE" : ", le");
return strBuf.toString();
}
private static void out(Encoding[] aEncodings)
{
for (int i = 0; i < aEncodings.length; i++)
{
out(aEncodings[i].toString());
}
}
private static void outSeparator()
{
out("------------------------------------------------------------------------------");
}
private static void out(String strMessage)
{
System.out.println(strMessage);
}
}
/*** FormatConversionProviderTest.java ****/