您的位置:首页 > 编程语言 > Java开发

java 编写的 mp3 播放器 1

2015-01-06 11:46 176 查看
学java也有一段时间了,想拿一些小的例子来练下手。实践的时候总是会发现很多新的问题,在这里简单罗列下实现的过程以及期间出现的一些问题,等待这个寒假给补完吧。现在做了有六七成的样子吧。

首先需要导入一个已经写好的jar包,可以直接百度下载 jaudiotagger.jar 这里面封装了一系列多媒体文件的信息的获取方法。 还有一个就是需要安装Java媒体框架(jmf),在实际的工程下需要导入一下jar包(在jmf的安装目录下能够找到,之前看到网上说只需要导入几个包就可以实际操作中发现不可以,索性就把目录下的全部都导入进去了,如下图)



之后就可以开始工作了。

先说一下已经实现的功能:添加歌曲,添加文件夹,上一首,下一首 ,歌曲的列表,歌曲详细信息显示。





归纳下做到目前的一些操作过程:

界面部分是通过可视化插件windows builder 直接拖拽的,布局选择absolutelayout 就可以了 可以精确定位,省去了解决borderlayout 局部一些不方便修改布局的问题(一开始用的便是borderlayout发现修改起来难度比较大)

目前这个界面可以进行优化的地方是:

1 控制按钮可以将 开始,暂停做成一个按钮

2 专辑图片的显示用一个自动缩放的组件把它展示出来

3 增加一个进度条可以来拖拽

下面说一下功能实现:

1 MP3Info.java : 用于封装获取歌曲的详细信息

实现代码 如下(写的比较低级,还请见谅)

private MP3File mp3File; //jar包中封装的 mp3文件类

private String singer; //歌手

private String albumName; //专辑名

private String songName; //歌曲名

private String year; //年份

private File file; //歌曲绝对路径

private byte[] byteArrayx = new byte[1024]; //用于存放专辑图片

然后设置get set 方法 ,初始化方法

// 之前要初始化file

mp3File = new MP3File(file);

try {

if (mp3File.hasID3v1Tag()) {

Tag tag = mp3File.getTag();

singer = ("歌手:" + tag.getFirst(FieldKey.ARTIST) + "\n");

albumName = ("专辑名:" + tag.getFirst(FieldKey.ALBUM) + "\n");

songName = ("歌名:" + tag.getFirst(FieldKey.TITLE) + "\n");

year = ("年份:" + tag.getFirst(FieldKey.YEAR));

Artwork artwork = tag.getFirstArtwork(); // 获得第一张专辑图片


byte[] byteArray = artwork.getBinaryData();

byteArrayx = byteArray;

JLabel lbl = new JLabel(new ImageIcon(byteArray)); //这个是我用来检验是否真的生成了图片

lbl.setSize(50, 50);

JLabel jbl1 = new JLabel();

jbl1.setText(sbf);

// 生成图片

JFrame jf = new JFrame("ccc");

jf.setLocation(20, 20);

jf.setSize(100, 100);

jf.add(lbl);

System.out.println(sbf);

//jf.setVisible(true);

}

if (mp3File.hasID3v2Tag()) {

}

} catch (Exception e) {

e.printStackTrace();

}



2 MusicControl.java : 用于对歌曲列表做一控制

private String currentSong;//存放歌曲名字,播放时使用

private ArrayList<String> songNames = new ArrayList<String>();//歌曲列表

private Map songMap = new HashMap<String , String>();//键值对,为了跟界面想呼应 界面中的名字对应一条绝对路径

然后是get set 初始化方法



然后是 获取前一首歌曲曲名

public String getPrevious(){

Iterator i =
songNames.iterator();

int count=0;

while(i.hasNext()){

if(!songNames.get(count).equals(currentSong))

count++;

else

{

//判断是否到最后

if(count==0){

System.out.println("已经是第一首了");

return null;

}

{currentSong=songNames.get(count-1); return songNames.get(count-1);}



}

}

return null;//走不到这里吧?? 那就报错咯



}

下一首的代码如法炮制

public String getNext(){

Iterator i =
songNames.iterator();

int count=0;

while(i.hasNext()){

if(!songNames.get(count).equals(currentSong))

count++;

else

{

//判断是否到最后

if(count==songNames.size()-1){

System.out.println("是最后一首了");

return null;

}

{currentSong=songNames.get(count+1); return songNames.get(count+1);}



}

}

return null;//



}

再添加 添加 删除歌曲的功能 。 用arraylist 就可以操作了。

3 PlayMusic.java : 用于播放,停止播放等功能。

private MediaPlayer player = new MediaPlayer(); //播放器类

private String path; //歌曲绝对路径

public void play(String path){

//player = new MediaPlayer();

try{

player.setMediaLocation("file:/"+path);// <<file:/>>不能删除 音频文件路径

} catch (Exception e) {

System.out.println("文件不存在");

}

player.start();

}

public void stop(){

player.stop();

}

之后打算连同进度条,把暂停的功能也实现。

页面端的内容等有时间再补充上去。

接下类要做的内容有:

1 实现多种播放顺序(通过操作歌曲的ArrayList 来实现)。

2 添加进度条。

3 修改添加文件夹的歌曲不能播放的bug 。

4 页面进行美化。



那就先写到这里吧。

估计也没有人看2333。权当练手了~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: