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;
|
}
|
}
|