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本身支持的格式有局限,只能支持wav、au、aiff这些格式的音频文件,对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格式的音频文件。