Java pcm/wav文件转mp3(流的方式)

项目场景:

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引入

<dependency>
    <groupId>net.sourceforge.lame</groupId>
    <artifactId>lame</artifactId>
    <version>3.98.4</version>
</dependency>

Jar引入
jar下载链接: https://github.com/nwaldispuehl/java-lame/releases


  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
要将 MP3 换为 WAV,可以使用 Java 中的 JLayer 库和 Tritonus 库。 首先,您需要从以下网址下载 JLayer 库和 Tritonus 库: - JLayer: http://www.javazoom.net/javalayer/javalayer.html - Tritonus: http://www.tritonus.org/plugins.html 将这些库文件添加到您的 Java 项目中,并使用以下代码将 MP3 文件换为 WAV 文件: ```java import java.io.*; import javax.sound.sampled.*; import javazoom.jl.decoder.*; public class MP3toWAVConverter { public static void convert(String filename) throws IOException, UnsupportedAudioFileException, Exception { String outputFilename = filename.replace(".mp3", ".wav"); InputStream in = new FileInputStream(filename); OutputStream out = new FileOutputStream(outputFilename); Decoder decoder = new Decoder(); AudioFormat format = new AudioFormat(44100, 16, 2, true, false); javax.sound.sampled.AudioInputStream ais = new javax.sound.sampled.AudioInputStream(new BufferedInputStream(new DecoderInputStream(in)), format, DecoderInputStream.getLength()); AudioSystem.write(ais, AudioFileFormat.Type.WAVE, out); out.close(); in.close(); } } ``` 在上面的代码中,我们使用 JLayer 库的 Decoder 类将 MP3 文件解码为音频,然后使用 Java 内置的 AudioSystem 类将音频写入 WAV 文件。 要使用上面的代码,只需调用 `MP3toWAVConverter.convert(filename)` 方法并传入要换的 MP3 文件名。换后的 WAV 文件将与 MP3 文件位于同一目录中,并且文件名将相同,只是扩展名不同。 注意,这种方法可能会导致换后的 WAV 文件大小较大,因为 WAV 格式的音频文件通常比 MP3 格式的文件更大。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值