Java mp3文件轉pcm文件package cn.zpy.util;
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javazoom.spi.mpeg.sampled.file.MpegAudioFileReader;
/**
* 音頻轉換工具類
*
*/
public class AudioUtils {
/**
* MP3轉換PCM文件方法
*
* @param mp3filepath 原始文件路徑
* @param pcmfilepath 轉換文件的保存路徑
* @return
* @throws Exception
*/
public static boolean convertMP32Pcm(String mp3filepath, String pcmfilepath){
try {
//獲取文件的音頻流,pcm的格式
AudioInputStream audioInputStream = getPcmAudioInputStream(mp3filepath);
//將音頻轉化為 pcm的格式保存下來
AudioSystem.write(audioInputStream, AudioFileFormat.Type.WAVE, new File(pcmfilepath));
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
* 機能概要:獲取文件的音頻流
* @param mp3filepath
* @return
*/
private static AudioInputStream getPcmAudioInputStream(String mp3filepath) {
File mp3 = new File(mp3filepath);
AudioInputStream audioInputStream = null;
AudioFormat targetFormat = null;
try {
AudioInputStream in = null;
//讀取音頻文件的類
MpegAudioFileReader mp = new MpegAudioFileReader();
in = mp.getAudioInputStream(mp3);
AudioFormat baseFormat = in.getFormat();
//設定輸出格式為pcm格式的音頻文件
targetFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16,
baseFormat.getChannels(), baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false);
//輸出到音頻
audioInputStream = AudioSystem.getAudioInputStream(targetFormat, in);
} catch (Exception e) {
e.printStackTrace();
}
return audioInputStream;
}
}