关于JMF不能播放MP3的问题解决方法

JMF官方下载地址

JMF下载地址JMF 2.1.1e Software Downloads

推荐下载 jmf-2_1_1e-windows-i586.exe

问题来源

本问题来自于中国大学MOOC北京大学唐大仕老师的Java程序设计课程的第11讲 网络、多媒体和数据库编程一章中11.2 多媒体编程的第一个视频。这个视频讲了使用JMF来播放MP3的一段代码。

视频地址Java程序设计

后面我又看了CSDN上的一篇讲使用JMF来播放MP3的文章:

文章地址Java 播放MP3

我试着写了以下一段代码:

package pkumooc;

import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;

/**
 * @author liuwenchen
 * @create 2020-07-31 0:00
 */

public class PlayerMusic {
    public static void main(String[] args) throws NoPlayerException, MalformedURLException, IOException {
        File file=new File("C:\\Users\\81228\\Desktop\\vocaloid工程\\以父之名\\以父之名.mp3");
        Player player= Manager.createPlayer(file.toURI().toURL());
        player.start();
    }
}

编译报错:
在这里插入图片描述

其他人的解决办法

关于jmf不能播放mp3的问题解决
急救!JMF报错 Unable to handle format: mpeglayer3
JMF Error: Unable to handle format: mpeglayer3

一种可行的解决办法

我把在文章急救!JMF报错 Unable to handle format: mpeglayer3里提到的方法都实践了一遍,还是没办法解决问题。
直到看见了这篇文章:JMF能否扩展支持除WAV外的格式才知道报错原因是JMF本身支持的格式有局限,只能支持wavauaiff这些格式的音频文件,对44.1KHz的MP3不能正常解码。

JMF的sound.jar支持.wav .au .aiff这些格式的音频文件,当然 PCM(Pulse Code Modulation----脉冲编码调制)文件也是可以直接播放的,如果是 .mp3,.ogg,.ape,.flac等格式的音频文件,则需要第三方jar,比如jl1.0.jar、jmp123.jar。

更全面的有关JMF支持格式的官方文档JMF 2.1.1 - Supported Formats

于是,正确的解决办法就是将mp3转码成wav。这样就能正常播放了。

代码:

package pkumooc;

import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;

/**
 * @author liuwenchen
 * @create 2020-07-31 0:00
 */

public class PlayerMusic {
    public static void main(String[] args) throws NoPlayerException, MalformedURLException, IOException {
        File file=new File("C:\\Users\\81228\\Desktop\\vocaloid工程\\以父之名\\以父之名.wav");
        Player player= Manager.createPlayer(file.toURI().toURL());
        player.start();
    }
}

用JLayer播放MP3

JLayer是一个第三方Java类库,用来解码,转换,播放MP3文件。还有一个面向J2ME平台的JLayerME。

下载地址

官方地址Download JLayer 1.0.1 (Sources + Binaries + Docs)

另一个可以下载的地址Download jlayer-1.0.1-1.jar

示例

先导入jar包,IDEA的导入方法参照IntelliJ IDEA 2020.1添加HttpClient类库

示例代码:

package pkumooc;

import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * @author liuwenchen
 * @create 2020-07-31 13:17
 */

public class TestJLayer {
    public static void main(String[] args) {
        File file = new File("C:\\Users\\81228\\Desktop\\vocaloid工程\\以父之名\\以父之名.mp3");
        try {
            Player player=new Player(new FileInputStream(file));
            player.play();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (JavaLayerException e) {
            e.printStackTrace();
        }
    }
}

测试了一下,JLayer能播放mp3格式的音频文件,但是不能播放wav格式的音频文件。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值