java 编写的 mp3 播放器 1

2 篇文章 0 订阅
2 篇文章 0 订阅
这篇博客介绍了作者使用Java编程实现MP3播放器的过程,包括导入jaudiotagger.jar库来获取MP3文件信息,使用Java媒体框架(JMF)进行播放,并实现了添加歌曲、文件夹、上下一首切换及歌曲信息显示等功能。目前的功能还有待完善,如整合播放/暂停按钮、专辑图片显示和进度条控制等。
摘要由CSDN通过智能技术生成

             学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。权当练手了~


    


           


        

  














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值