In the Java Sound API, you can check if your system supports a particular audio format by using the AudioSystem.isConversionSupported
and AudioSystem.getTargetEncodings
methods. You can also determine if a particular AudioFormat
is supported by querying the DataLine.Info
object when working with audio input and output lines.
Here’s a breakdown of how you can check:
1. Using AudioSystem.isConversionSupported
The AudioSystem.isConversionSupported
method checks whether the conversion between two audio formats or audio encodings is supported by the system.
Example:
package org.kodejava.sound;
import javax.sound.sampled.*;
public class AudioFormatCheck {
public static void main(String[] args) {
// Define the audio format you want to check
AudioFormat format = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED, // Encoding
44100.0f, // Sample Rate
16, // Sample Size in Bits
2, // Channels
4, // Frame Size
44100.0f, // Frame Rate
false // Big Endian
);
// Check if the system supports this format
if (AudioSystem.isConversionSupported(AudioFormat.Encoding.PCM_SIGNED, format)) {
System.out.println("The audio format is supported!");
} else {
System.out.println("The audio format is not supported!");
}
}
}
2. Using DataLine.Info
DataLine.Info allows you to check if specific audio data lines support the desired audio format.
Example:
package org.kodejava.sound;
import javax.sound.sampled.*;
public class AudioLineSupportCheck {
public static void main(String[] args) {
// Define the audio format you want to check
AudioFormat format = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED, // Encoding
44100.0f, // Sample Rate
16, // Sample Size in Bits
2, // Channels
4, // Frame Size
44100.0f, // Frame Rate
false // Big Endian
);
// Create a DataLine.Info object with the desired format
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
// Check if the DataLine with the specified info is supported
if (AudioSystem.isLineSupported(info)) {
System.out.println("The audio line supports the specified format!");
} else {
System.out.println("The audio line does not support the specified format!");
}
}
}
3. Getting Supported Encodings and Conversions
You can also retrieve the supported audio encodings and conversions using AudioSystem
methods like AudioSystem.getTargetEncodings
or AudioSystem.getAudioInputStream
.
Example of supported encodings:
package org.kodejava.sound;
import javax.sound.sampled.*;
public class SupportedEncodings {
public static void main(String[] args) {
// Define an audio format
AudioFormat format = new AudioFormat(44100.0f, 16, 2, true, false);
// Get the target encodings for this format
AudioFormat.Encoding[] encodings = AudioSystem.getTargetEncodings(format);
System.out.println("Supported target encodings:");
for (AudioFormat.Encoding encoding : encodings) {
System.out.println("- " + encoding);
}
}
}
Output:
Supported target encodings:
- ULAW
- PCM_UNSIGNED
- PCM_SIGNED
- PCM_SIGNED
- PCM_UNSIGNED
- PCM_FLOAT
- ALAW
Summary
- Use
AudioSystem.isConversionSupported()
to check if a certain format/encoding conversion is supported. - Use
AudioSystem.isLineSupported()
to check if a specific audio format is supported on aDataLine
like aSourceDataLine
or aTargetDataLine
. - Use
AudioSystem.getTargetEncodings()
to retrieve possible target encodings for a specificAudioFormat
.
These methods let you determine if your system can handle the desired audio format or perform conversions between formats.