当前位置:首页 > 后端开发 > 正文

Java如何读取MP3文件?

在Java中读取MP3文件通常使用音频处理库,常用方法包括:,1. 通过 javax.sound.sampled读取音频流,2. 利用第三方库(如JLayer)解析MP3帧数据,3. 使用Tritonus或jaudiotagger处理元数据,需注意标准库对MP3格式支持有限,推荐使用专门库实现高效解码。

在Java中读取MP3文件通常涉及两种需求:读取元数据(如歌曲信息)处理音频数据(如解码播放),以下是详细方法,结合标准API和主流第三方库实现:


读取MP3元数据(ID3标签)

MP3的元数据(歌手、专辑等)存储在ID3标签中,推荐使用 jaudiotagger 库:

步骤

  1. 添加依赖(Maven):

    <dependency>
      <groupId>org</groupId>
      <artifactId>jaudiotagger</artifactId>
      <version>2.0.3</version>
    </dependency>
  2. 代码示例

    Java如何读取MP3文件?  第1张

    import org.jaudiotagger.audio.AudioFile;
    import org.jaudiotagger.audio.AudioFileIO;
    import org.jaudiotagger.tag.FieldKey;
    public class ReadMP3Metadata {
        public static void main(String[] args) {
            try {
                AudioFile audioFile = AudioFileIO.read(new File("song.mp3"));
                String title = audioFile.getTag().getFirst(FieldKey.TITLE);     // 标题
                String artist = audioFile.getTag().getFirst(FieldKey.ARTIST);   // 歌手
                String album = audioFile.getTag().getFirst(FieldKey.ALBUM);     // 专辑
                System.out.println("标题: " + title);
                System.out.println("歌手: " + artist);
                System.out.println("专辑: " + album);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    输出

    歌手: Adele
    专辑: 25

读取MP3音频数据(解码播放)

Java标准库不支持MP3解码,需用第三方库如 JLayerJavaFX

方法1:使用JLayer(轻量级)

  1. 添加依赖

    <dependency>
      <groupId>javazoom</groupId>
      <artifactId>jlayer</artifactId>
      <version>1.0.1</version>
    </dependency>
  2. 播放MP3代码

    import javazoom.jl.player.Player;
    import java.io.FileInputStream;
    public class PlayMP3 {
        public static void main(String[] args) {
            try (FileInputStream fis = new FileInputStream("song.mp3")) {
                Player player = new Player(fis);
                player.play(); // 阻塞直到播放结束
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

方法2:使用JavaFX(支持高级音频操作)

  1. 代码示例

    import javafx.scene.media.Media;
    import javafx.scene.media.MediaPlayer;
    public class JavaFXMP3Player {
        public static void main(String[] args) {
            String filePath = new File("song.mp3").toURI().toString();
            Media media = new Media(filePath);
            MediaPlayer player = new MediaPlayer(media);
            player.play(); // 异步播放
            // 避免程序退出,可添加Thread.sleep()
        }
    }

    注意:JavaFX需配置模块(module-info.java中添加 requires javafx.media;)。


注意事项

  1. 文件路径问题
    • 使用绝对路径或正确相对路径,避免 FileNotFoundException
  2. 依赖冲突

    确保第三方库版本兼容(如jaudiotagger与Java 11+可能存在模块化问题)。

  3. 音频解码限制

    JLayer仅支持MPEG 1 Layer 3(不含Layer 2)。

  4. 异常处理
    • 捕获 IOException 和库特定异常(如 CannotReadException)。

应用场景建议

需求 推荐方案
读取歌曲信息 jaudiotagger
简单播放MP3 JLayer
复杂音频处理 JavaFX / JAVE库
转换格式 FFmpeg + Java包装

引用说明

  • jaudiotagger GitHub
  • JLayer官网
  • JavaFX Media文档

提示:生产环境建议使用成熟音频库(如FFmpeg通过JNI调用),或直接使用Android/iOS原生音频API处理移动端需求。

0