项目场景:
pcm与wav文件是无损音质,几分钟的文件就高达20几M,要求将pcm/wav文件转mp3文件,既完成文件的压缩,又不影响使用。
解决方案
网上找了很多例子,大都是Lame与FFmpeg,但前者的例子总是DOS命令控制lame.exe,后者好些,但是需要使用音频文件的绝对路径,这就需要频繁创建临时文件,不优雅,最后找到了流的操作方式,代码如下。
private byte[] encodeToMp3(MultipartFile file) throws IOException, UnsupportedAudioFileException {
// Stream流的方式
InputStream in = file.getInputStream();
// import javax.sound.sampled.AudioSystem;
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(in);
// import net.sourceforge.lame.mp3.Lame;
// 官方样例
// LameEncoder encoder = new LameEncoder(audioInputStream.getFormat(), 256, MPEGMode.STEREO, Lame.QUALITY_HIGHEST, false);
LameEncoder encoder = new LameEncoder(audioInputStream.getFormat(), 128, MPEGMode.STEREO, Lame.QUALITY_HIGHEST, false);
ByteArrayOutputStream mp3 = new ByteArrayOutputStream();
byte[] inputBuffer = new byte[encoder.getPCMBufferSize()];
byte[] outputBuffer = new byte[encoder.getPCMBufferSize()];
int bytesRead;
int bytesWritten;
while(0 < (bytesRead = audioInputStream.read(inputBuffer))) {
bytesWritten = encoder.encodeBuffer(inputBuffer, 0, bytesRead, outputBuffer);
mp3.write(outputBuffer, 0, bytesWritten);
}
encoder.close();
return mp3.toByteArray();
}
项目引入:
提示:Maven引入或手动引入Jar。(这里Maven引入可能有问题,推荐大家使用Jar引入的方式)
Maven引入
文章来源:https://www.toymoban.com/news/detail-623003.html
<dependency>
<groupId>net.sourceforge.lame</groupId>
<artifactId>lame</artifactId>
<version>3.98.4</version>
</dependency>
Jar引入
jar下载链接: https://github.com/nwaldispuehl/java-lame/releases文章来源地址https://www.toymoban.com/news/detail-623003.html
到了这里,关于Java pcm/wav文件转mp3(流的方式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!