今天为大家分享一个音乐播放器的开发与制作,目前系统已经完成了初步功能,后续会进一步完善。整个系统界面漂亮,有完整得源码,希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步

开发环境

开发语言为Java,开发环境Eclipse或者IDEA都可以。运行主程序,或者执行打开JAR文件即可以运行本程序。

系统框架

利用JDK自带的SWING框架开发,不需要安装第三方JAR包。纯窗体模式,直接运行Main文件即可以。同时带有详细得设计文档。

主要功能

主要需求

能够实现简单的音乐播放器功能,如:打开本地文件,播放,暂停,停止,背景播放,单曲循环等等,界面充实,交互友好,可以添加多首歌曲目录

一个简单的基于java语言的音乐播放器,菜单栏:文件,播放 控制和播放列表,文件菜单包含打开、循环和退出三个菜单项;播放控制菜单包含播放、暂停和停止三个菜单项,播放列表菜单则是当向里面添加歌曲之后才能够查看到里面所包含的歌曲目录。当播放歌曲时,可以调节音量大小或者设置是否静音;可以查看当前播放音乐的相关属性,如:歌曲名,歌手,发布时间等

技术关键点

JMF 即Java媒体框架。其核心框架支持不同媒体,如音频输出和视频输出,包括时间的时钟同步。它是一个标准的扩展框架,允许用户制作纯音频流和视频流。 JMF实际上是Java的一个类包。它包括了一个开放的媒体架构,可使开发人员灵活采用各种媒体回放、捕获组件,或采用他们自己的定制的内

插组件。 JMF软件是Java Media系列软件的一部分。采用各种Java Media API,软件开发商人员就能容易、快速地为他们已有的各种应用程序和客户端,Java小程序增添丰富的媒体功能,如流式视频、3D图像和影像处理等。就是 说,各种Java Media API发挥了Java平台的固有优势,将"编写一次,到处运行"的能力扩展到了图像、影像和数字媒体等各种应用领域,从而大大缩减了开发时间和降低了开发 成本。在开发JMF 应用程序之前要完全理解JMF 的体系架构、接口和类。就拿我们的家用摄像机系统作个例子。首先用摄像机拍摄内容,拍摄下来的内容录制在DV带中。DV带可以放在放像机里播放、放像机提供视频信号给电视机,提供音频信号给音箱,这样我们就可以在电视机上看到画面,从音箱里听到声音。JMF API 提供的也是同样的模型。 JMF 提供的模型可大致分为七类

* 数据源(Data source)

* 截取设备(Capture Device,包括视频和音频截取设备)

* 播放器(Player)

* 处理器(Processor)

* 数据池(DataSink)

* 数据格式(Format)

* 管理器(Manager)

1. 先把所有的捕获设备调出来

2. 创建Player,当Play开始的时候,就开始了音频捕获的过程

3.以MediaLocator为参数,创建Player

4. 为PLAYER添加监听器,以便监听RealizeComplete事件

运行效果




java  音乐播放器 java音乐播放器所需jar包_音乐播放器


java  音乐播放器 java音乐播放器所需jar包_播放器_02


关键代码

package Music;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JPanel;

public class GeciThread extends Thread{

    JPanel gecipanel;
    String Filename;
    
    GeciThread(JPanel gecipanel,String Filename){
        this.gecipanel=gecipanel;
        this.Filename=Filename;
    }
    public void run() {
        playgeci(getlrc(Filename));//歌词显示
        
    }
    
    public File getlrc(String filename) {
        int end =filename.indexOf(".mp3");
        String lrc=filename.substring(0, end);
        System.out.println("lrc is:"+lrc);
        
        File dir=new File(".\\music\\geci");
         File[] filelist=dir.listFiles();
         
         for(int i=0;i<filelist.length;i++) {
                System.out.println("filelist[i].getName():"+filelist[i].getName());
             
            if((lrc+".lrc").equals(filelist[i].getName())) {
                return filelist[i];
            }
             
         }
         
        return null;    
    }
    public void playgeci(File geci) {
      if(geci!=null) {
        try {
        BufferedReader br = new BufferedReader(new FileReader(geci));
        String s;
        int x=10;
        int y=460;
        int w=570;
        int h=22;
        while((s = br.readLine())!=null){
            System.out.println(s);
            GeCiLabel t=new GeCiLabel(s,x,y,w,h);
            t.start();
            gecipanel.add(t.getL());
            //gecipanel.repaint();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            }
        br.close();
        }catch( FileNotFoundException e) {
            System.out.println("文件找不到");
        }catch( IOException e) {
            System.out.println("歌词io异常");
            
        }
        }
    }
}

package Music;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class panein implements MouseListener{

    JPanel seapanel,contentPane; 
    paneexit t;
    flush flu;

    panein(JPanel sp,JPanel cp,    flush flu,JPanel pane,JPanel gecipanel,JScrollPane jsp){
        seapanel=sp;
        contentPane=cp;
        this.flu=flu;
        t=new paneexit(sp,cp,flu,pane,gecipanel,jsp);
    
    }
    



    @Override
    public void mouseClicked(MouseEvent arg0) {
        // TODO Auto-generated method stub
        
    }
    @Override
    public void mouseEntered(MouseEvent arg0) {
        //System.out.println("进来了");
        contentPane.addMouseMotionListener(t);
        
    }
    @Override
    public void mouseExited(MouseEvent arg0) {
        
        
    }

    @Override
    public void mousePressed(MouseEvent arg0) {
        // TODO Auto-generated method stub
        
    }


    @Override
    public void mouseReleased(MouseEvent arg0) {
        // TODO Auto-generated method stub
        
    }
    public void exitsearch() {
        seapanel.removeAll();
        contentPane.remove(seapanel);
        contentPane.repaint();
        contentPane.revalidate();
        
    }

}