package com.dji.sample.speak.util; import javax.sound.sampled.*; import java.io.File; import java.io.IOException; public class AudioConverter { public static File convertToFile(File file) throws UnsupportedAudioFileException, IOException { int channels =analyzeAudio(file); if (channels != 1){ return convertAudio(file); } return file; } public static int analyzeAudio(File inputFile) throws IOException, UnsupportedAudioFileException { AudioInputStream audioStream = AudioSystem.getAudioInputStream(inputFile); AudioFormat format = audioStream.getFormat(); int channels = format.getChannels(); audioStream.close(); return channels; } public static File convertAudio(File inputFile) throws IOException, UnsupportedAudioFileException { // 固定参数:声道数 1,采样率 16 kHz,位宽 16 bit float sampleRate = 16000; int channels = 1; int bitDepth = 16; AudioInputStream sourceStream = AudioSystem.getAudioInputStream(inputFile); AudioFormat targetFormat = new AudioFormat( AudioFormat.Encoding.PCM_SIGNED, sampleRate, bitDepth, channels, (bitDepth / 8) * channels, sampleRate, false ); AudioInputStream convertedStream = AudioSystem.getAudioInputStream(targetFormat, sourceStream); // 使用源文件名生成输出文件名 File outputFile = new File("converted_" + inputFile.getName()); AudioSystem.write(convertedStream, AudioFileFormat.Type.WAVE, outputFile); sourceStream.close(); convertedStream.close(); return outputFile; } }