在 Java 中将 mp3 转换为 wav

问题描述

我正在编写一个通用实用程序,用于将音频文件转换为 WAV。 WAV 到 WAV 工作正常(我也在更改一些属性),但我无法转换 MP3 文件。我的类路径中有 mp3spi,所以它似乎能够读取 MP3,但写入的 WAV 文件似乎不起作用。

在本例中,我没有尝试更改任何属性。只需读取 MP3 并写入 WAV 文件

我的代码看起来像这样

    File inputFileObj = new File(input);
    AudioInputStream audioInputStream = null;

    try {
        audioInputStream = AudioSystem.getAudioInputStream(inputFileObj);
    } catch (Exception e) {
        e.printstacktrace();
    }

    System.out.println("Input file format:");
    System.out.println(AudioSystem.getAudioFileFormat(inputFileObj));

    try {
        AudioSystem.write(audioInputStream,outputType,new File(output));
    } catch (Exception e) {
        e.printstacktrace();
    }

    System.out.println("Output file format:");
    System.out.println(AudioSystem.getAudioFileFormat(new File(output)));

这是输出。如您所见,它似乎在写入输出文件,但是当我尝试检索输出文件的格式时,它无法处理。如果我尝试播放输出文件,播放器无法识别它。

Input file: c:\testfiles\sample-b-converted.mp3
Output file: c:\testfiles\foo.wav
Output type: wav

Input file format:
MP3 (.mp3) file,byte length: 13227300,data format: MPEG2L3 16000.0 Hz,unkNown bits per sample,mono,unkNown frame size,27.777779 frames/second,frame length: 122475
Bytes written: 13227344
Output file format:
Exception in thread "main" javax.sound.sampled.UnsupportedAudioFileException: file is not a supported file type
    at javax.sound.sampled.AudioSystem.getAudioFileFormat(AudioSystem.java:1078)
    at org.torchai.AudioFileConvert01.main(AudioFileConvert01.java:60)

我还需要其他什么才能让它工作吗?

解决方法

有人发表评论将我推荐给 mp3 to wav conversion in java。我看过这个问题,但没看清楚答案的主要方面,因为它没有真正解释得很好。

MP3 文件显然需要经过两步转换。我不完全理解为什么,但似乎您必须首先将其转换为 PCM_SIGNED,样本大小为 16,帧大小为 2*# 通道。此时,您可以再次将其转换为所需的最终格式。

仍然希望有一个更好的解释,但这至少让我解决了我的问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...