基于java的音乐播放器课程设计报告 (1)
java音乐实训报告

新乡学院计算机与信息工程学院项 目 实 训 报 告2015年 12月29日项目名称基于Android 的i 音乐播放器班级 2012级计算机科学与技术1班 学号 姓名 指导教师目录第1章概述 (1)第2章需求分析 (2)2.1 项目背景 (2)2.2项目需求 (2)第3章相关技术 (3)3.1 Adnroid平台介绍 (3)3.2 关键技术研究 (3)第4章概要设计 (4)4.1 系统体系结构 (4)4.2 用户界面设 (4)第5章详细设计 (6)5.1 播放设置以及后台播放源码 (6)5.2 获取网络歌曲分类列表的代码实现. (13)第6章结论 (24)第1章概述本课题要求:设计…个基于Android的手机端音乐播放器软件。
实现的功能有:a) 能在Android上利用其播放本地和远程的歌曲。
b) 能通过…个搜索框实现本地和远程的搜索功能.c) 可以实现后台播放,并能流畅的实现多界面的跳转。
需重点研究的关键问题:实现播放,后台播放,进度条显示进度等,以及网络请求数据和处理。
解决思路:浏览Android开源网站,认证学习,并请教老师,学习相关知识;不过主要还是靠自己的解题思路,解决问题的能力。
第2章需求分析2.1 项目背景移动互联网时代的来临,直接促进了搭载智能操作系统、具有强大扩展性的智能手机、平板电脑等移动终端产业的蓬勃发展。
搭载安卓操作系统的智能手机目前已经成为市场上最炙手可热的智能产品。
开放的源代码和零成本已经让安卓在全世界范围内受到青睐并迅速获得了主要手机厂商和数百万软件开发者的支持,无疑android已经是智能设别领域的老大.在这个移动互联网飞速发展的时代,带动全球的经济重心向着轻小得移动端发展.人们的衣食住行已经和手机这种设别息息相关,甚至是不可分割的状态.出于这个时代的背景,Android端的娱乐软件更是层出不穷.这些软件丰富了人们的闲暇之余.所以我打算入手…款娱乐软件,为大家揭秘神秘的android软件.该课题的主要设计任务是实现android设备上的音乐播放器功能,属于自己设计的…款软件,轻巧方便,没有广告,内存利用率高,是…款实用而且高端的手机软件。
音乐播放器Java专业课程设计方案报告

课程设计汇报课程设计题目: java音乐播放器学生姓名:专业: XXXXXXXXXXXXX班级:指导老师:20XX年X月X日一、课程设计目标1.编程设计音乐播放软件, 使之实现音乐播放功效。
2.培养学生用程序处理实际问题能力和爱好。
3.加深java中对多媒体编程应用。
二、课程设计要求利用学到编程知识和编程技巧, 要求学生:1.系统设计要能完成题目所要求功效, 设计软件能够进行简单播放及其它基础功效。
2、编程简练, 可用, 尽可能使系统功效愈加完善和全方面3.说明书、步骤图要清楚。
三、课程设计内容1.课程设计题目及介绍音乐播放软件要求:有图形界面, 能播放MP3歌曲, 有播放列表, 前一首、后一首等常见播放软件功效。
2.设计说明关键利用多媒体编程、图形界面、数组及循环进行设计, 从而实现简单音乐播放。
public MyMusicPlayer(): 实现窗口组员方法publi c void run(): 实现改变歌曲播放状态组员方法public AudioClip loadSound(String filename): 实现对声音加载public void mouseClicked(MouseEvent e): 实现对按钮监听public void itemStateChanged(ItemEvent arg0): 返回一个AudioClip对象3.程序步骤图4.程序清单import java.awt.*;import javax.swing.*; import java.applet.*; import java.awt.event.*; import .*;public class MyMusicPlayer extends Thread implements MouseListener,ItemListener{JFrame MainFrame=new JFrame("MyMusicPlayer"); //定义主窗体JLabel songname=new JLabel(); //用标签显示状态JButton last=new JButton();JButton play=new JButton();JButton next=new JButton();JButton loop=new JButton(); //定义上一曲,播放,下一曲,循环四个按钮JLabel list=new JLabel("播放列表");List songlist=new List(); //显示歌曲列表AudioClip[] song=new AudioClip[10]; //将音频文件放在数组中AudioClip playsong; //目前选定播放音频文件String[] name={"黄小琥 - 顺其自然.wav","陈奕迅-张氏情歌.wav","黄小琥 _没那么简单.wav","戚薇-假如爱忘了.wav","郭采洁 - 狠狠哭.wav","test.wav"};//将全部文件名存放在字符串数组name中String playname; //目前选定播放音频名int j=0; //统计目前选定播放是哪首歌曲, 默认为第一首boolean playbutton=true; //统计播放状态, 默认为暂停播放boolean loopbutton=false; //统计循环状态, 默认为没有循环Thread thread=new Thread("pl");static MyMusicPlayer Yu;public MyMusicPlayer(){MainFrame.setLayout(null);MainFrame.setBounds(300,50,310,500);MainFrame.setVisible(true);MainFrame.setDefaultCloseOperation(3);MainFrame.add(songname);Font sname=new Font("斜体",Font.ITALIC,18);songname.setFont(sname); //设置显示状态字体为斜体songname.setText("我音乐播放器");songname.setBounds(10,10,300,40);last.setBounds(10,70,50,40);play.setBounds(70,70,50,40); //设置四个功效键位置和大小next.setBounds(130,70,50,40);loop.setBounds(190,70,50,40);last.setIcon(new ImageIcon("1.png"));play.setIcon(new ImageIcon("2.png"));next.setIcon(new ImageIcon("3.png"));loop.setIcon(new ImageIcon("4.png")); //设置四个功效键图片last.addMouseListener(this);play.addMouseListener(this);next.addMouseListener(this);loop.addMouseListener(this); //添加按键鼠标监听器MainFrame.add(last);MainFrame.add(play);MainFrame.add(next);MainFrame.add(loop);list.setBounds(10,120,100,30);Font lis=new Font("宋",Font.BOLD,15);list.setFont(lis); //显示“播放列表”MainFrame.add(list);songlist.setBounds(10,150,250,300);songlist.setBackground(Color.GREEN); //设置播放列表背景色为绿色songlist.setVisible(true);songlist.addItemListener((ItemListener) this); //添加列表监听器MainFrame.add(songlist);for(int i=0;i<name.length;i++){song[i]=loadSound(name[i]); //逐一获取音频文件songlist.add(name[i]); //将歌曲名添加到播放列表}playsong=song[0];}public static void main(String[] args){Yu=new MyMusicPlayer();Yu.start();}public void mouseClicked(MouseEvent e) {JButton btn=(JButton)e.getSource();playsong.stop();if(btn==play){ if(playbutton==false)playbutton=true;elseplaybutton=false; //当按下play后改变播放状态}elseif(btn==last){ j-=1; //当按下last 后将上一曲选定if(j<0)j=name.length-1; //若之前选定为第一首, 则跳到最终一首playbutton=true;loopbutton=false;}elseif(btn==next){ j+=1; //当按下next后将下一曲选定if(j>=name.length)j=0; //若之前选定为最终一首, 则跳到第一首playbutton=true;loopbutton=false;}elseif(btn==loop){ if(loopbutton==false){loopbutton=true;playbutton=true;}else{ //按下loop 后, 改变循环状态和播放状态loopbutton=false;playbutton=false;}}if(playbutton==true)Yu.run();else{songname.setText("暂停播放: "+playname); //暂停播放歌曲play.setIcon(new ImageIcon("2.png"));}}public void mouseEntered(MouseEvent arg0) {// TODO Auto-generated method stub}public void mouseExited(MouseEvent arg0) {// TODO Auto-generated method stub}public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub}public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub}public void itemStateChanged(ItemEvent arg0) { String str=songlist.getSelectedItem();playsong.stop();for(int i=0;i<name.length;i++)if(str==name[i]){j=i;break;}Yu.run();}public void run(){playsong=song[j]; //播放状态为播放时playsong.play(); //播放选定歌曲playname=name[j];if(loopbutton==true){playsong.loop(); //循环播放选定歌曲songname.setText("循环播放: "+playname);}elsesongname.setText("正在播放: "+playname);songlist.select(j); //播放列表中选定播放歌曲项目play.setIcon(new ImageIcon("5.png"));}public AudioClip loadSound(String filename){ //返回一个AudioClip对象URL url=null;try{url=new URL("file:"+filename);}catch(MalformedURLException e){ }return Applet.newAudioClip(url);}}5.程序运行结果四、课程设计总结经过这几天Java课程设计, 让我知道了做课程设计通常方法, 经过多种努力最终完成了设计要求.这次课程设计基础上含盖了大学十二个月学习到Java语言知识点, 课设题目要求不仅要求对书本知识有较深刻了解, 同时要求程序设计者有较强思维和动手能力。
Java课程设计音乐播放器设计

程序设计课程设计综合实验音乐播放器班级:指导老师:组员:2014年12月2日目录1 程序功能描述 -------------------------------------------------------------------------------- 32 开发环境描述 -------------------------------------------------------------------------------- 33 开发技术介绍 -------------------------------------------------------------------------------- 34 详细设计--------------------------------------------------------------------------------------- 4 4.1功能模块划分 ------------------------------------------------------------------------------------ 4 4.2 用户界面设计 ----------------------------------------------------------------------------------- 54.2.1 歌曲列表面板 --------------------------------------------------------------------------------------------- 54.2.2 播放控制面板 --------------------------------------------------------------------------------------------- 84.2.3 搜索及展示面板 ------------------------------------------------------------------------------------------ 84.3 播放功能实现 ----------------------------------------------------------------------------------- 94.3.1播放歌曲 ---------------------------------------------------------------------------------------------------- 94.3.2 暂停及继续播放 ---------------------------------------------------------------------------------------- 114.3.3 音量控制 ------------------------------------------------------------------------------------------------- 124.3.4 播放模式 ------------------------------------------------------------------------------------------------- 124.3.5 时间进度条 ---------------------------------------------------------------------------------------------- 134.4 歌词展示实现 --------------------------------------------------------------------------------- 144.4.1 加载歌词文件 ------------------------------------------------------------------------------------------- 144.4.2 解析歌词文件 ------------------------------------------------------------------------------------------- 144.4.3 展示歌词 ------------------------------------------------------------------------------------------------- 154.5 搜索网络歌曲资源---------------------------------------------------------------------------- 164.5.1 获取HTML文本 --------------------------------------------------------------------------------------- 164.5.2 解析HTML文本 --------------------------------------------------------------------------------------- 184.5.3 抓取数据描述 ------------------------------------------------------------------------------------------- 204.6 网络歌曲资源处理---------------------------------------------------------------------------- 204.6.1 歌曲资源的载体 ---------------------------------------------------------------------------------------- 204.6.2 歌曲资源的操作 ---------------------------------------------------------------------------------------- 244.7 程序内置的游戏------------------------------------------------------------------------------- 264.7.1 2048 -------------------------------------------------------------------------------------------------------- 264.7.2 贪吃蛇 ---------------------------------------------------------------------------------------------------- 274.7.3 五子棋 ---------------------------------------------------------------------------------------------------- 275程序运行 -------------------------------------------------------------------------------------- 28 6 实验小结-------------------------------------------------------------------------------------- 311 程序功能描述音乐播放器是一种用于播放各种音乐文件的多媒体播放软件。
音乐播放器Java课程设计报告

2、编程简练,可用,尽可能的使系统的功能更加完善和全面
3、说明书、流程图要清楚。
三、课程设计内容
1
音乐播放软件要求:
有图形界面,能播放MP3歌曲,有播放列表,前一首、后一首等常用播放软件 功能。
2
主要运用多媒体编程、 图形界面、数组及循环进行设计,从而实现简单的音
上一曲,播放,下一曲,循环四个按钮
JLabel list =new JLabel("播放列表");
List songlist =new List();//显示歌曲列表
AudioClip[] song =new AudioClip[10];
//将音频文件放在数组中
AudioClip playsong; //当前选定播放的音频文件
乐播放。
public
MyMusicPlayer():实现窗口的成员方法
publi c
void run():实现改变歌曲的播放状态的成员方法
public
AudioClip loadSound(String)
:实现对声音的加载
public
void mouseClicked(MouseEvent e)
:实现对按钮的监听
JButton btn=(JButton)e.getSource(); playsong .stop();
if (btn== play)
{if(playbutton==false)playbutton =true;
else
playbutton =false;
play后改变播放状态
}
else
(完整word版)基于java的音乐播放器的设计

《课程设计报告》课程名称:WEB课程设计2016—2017 学年度第一学期题目:基于java的音乐播放器系别:信息工程学院专业: 计算机科学与技术专业班级:指导教师:编者目录一。
需求分析 (1)(一)背景 (1)(二)音乐播放器需求分析 (1)二.概要设计 (5)(一)系统所用类及各类的主要说明 (5)(二)系统UML类图 (6)三。
详细设计 (8)(一)核心技术介绍 (8)(二)创建播放器的图形用户界面所需的控件 (11)四。
系统实现 (14)五.测试 (44)结论 (46)一.需求分析(一)背景随着计算机的广泛运用,手机市场的迅速发展,各种音频视频也在网上广为流传,这些资源看似平常,但以渐渐成为人们必不可少的一部分了,于是各种手机播放器也紧跟着发展起来,但是很多播放器一味追求外观花哨,功能庞大,对很多用户的时间造成了很多资源的浪费,比如CPU、内存的占有率过高,在用户需求多用户操作时,受到了不小的影响,带来了许多的不便,而对于大多数普通用户,许多功能用不上,形同虚设。
(二)音乐播放器需求分析根据项目,我们可以获得项目系统的基本需求主要是功能需求而系统的功能需求,我们分成三部分来概括,即播放器的基本控制需求、播放列表管理需求和性能需求。
以下分别描述:121、播放器的基本控制需求(1)播放:点击播放列表中的歌曲进行播放。
(2)停止:在歌曲列表下方有一个小按钮,当歌曲正在播放时,显示的是可停止的按钮,点击则停止当前播放的歌曲.(3)上一曲:歌曲在播放或者未播放时单击上一曲按钮时歌曲会跳到列表的当前歌曲的上一首.(4)下一曲:歌曲在播放或者未播放时单击下一曲按钮时歌曲会跳到列表的当前歌曲的下一首。
(5)停止:单击停止按钮时立即停止播放当前的歌曲。
3用户需求图音乐播放器系统流程图2、播放列表管理(1)添加歌曲文件夹:在播放列表中单击,选择添加的文件夹则弹出一个添加文件夹的会话框,点击要添加的歌曲,则弹出“添加成功"的消息提示,否则弹出“添加失败”的相关信息。
Java程序设计课程设计报告音乐播放器

《Java及Java web应用开发》实验报告设计题目: Java音乐播放器专业计算机信息管理班级 1班****2014年12月24 日import java*.media.ControllerEvent;import java*.media.ControllerListener;import java*.media.EndOfMediaEvent;import java*.media.PrefetchpleteEvent;import java*.media.RealizepleteEvent;import java*.media.*;import java*.swing.*;import java.awt.*;import java.awt.event.*;public class MediaPlayer e*tends JFrame implements ActionListener, ItemListener, ControllerListener {String title;Player player;boolean first = true, loop = false;ponent vc, cc;String currentDirectory=null;// 构造函数,其中包括了设置响应窗口事件的监听器。
MediaPlayer(String title) {super(title);/* 关闭按钮的实现。
*/addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {dispose(); }public void windowClosed(WindowEvent e) {if (player != null)player.close();System.e*it(0);} }); // 调用程序菜单栏的方法成员完成菜单的布置setupMenu();setSize(400, 400);setVisible(true); } // 本方法用以设置程序菜单栏public void setupMenu() {// 设置一个菜单Menu f = new Menu("文件");// 往设置的菜单添加菜单项MenuItem mi = new MenuItem("打开");f.add(mi);mi.addActionListener(this);f.addSeparator();Checkbo*MenuItem cbmi = new Checkbo*MenuItem("循环", false); cbmi.addActionListener(this);f.add(cbmi);f.addSeparator();MenuItem ee = new MenuItem("退出");ee.addActionListener(this);f.add(ee);f.addSeparator();Menu l = new Menu("播放列表");Menu c = new Menu("播放控制");MenuItem move = new MenuItem("播放");move.addActionListener(this);c.add(move);c.addSeparator();MenuItem pause = new MenuItem("暂停");pause.addActionListener(this);c.add(pause);c.addSeparator();MenuItem stop = new MenuItem("停止");stop.addActionListener(this);c.add(stop);c.addSeparator();// 设置一个菜单栏MenuBar mb = new MenuBar();mb.add(f);mb.add(c);mb.add(l);// 将构造完成的菜单栏交给当前程序的窗口; setMenuBar(mb); }// 动作时间响应成员;捕捉发送到本对象的各种事件; public void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubString cufile, selectfile, currentDirectory;if (e.getActionmand().equals("退出")) {// 调用dispose以便执行windowCloseddispose();return; }// 此事表明拥护选择了“播放”命令;// 如果当前有一个文件可以播放则执行播放命令;if (e.getActionmand().equals("播放")) {if (player != null) {player.start(); }return; }// 如果当前正在播放*一文件,则执行暂停;if (e.getActionmand().equals("暂停")) {if (player != null) {player.stop(); }return; } // 停止命令的响应;if (e.getActionmand().equals("停止")) {if (player != null) {player.stop();player.setMediaTime(new Time(0)); }return; } // 用户选择要播放的媒体文件if (e.getActionmand().equals("打开")) {FileDialog fd = new FileDialog(this, "打开媒体文件", FileDialog.LOAD); // fd.setDirectory(currentDirectory);fd.setVisible(true);// 如果用户放弃选择文件,则返回if (fd.getFile() == null) {return; }// 保存了所选文件的名称及其路径名称已被稍后使用// 同时设置当前文件夹路径selectfile = fd.getFile();currentDirectory = fd.getDirectory();cufile = currentDirectory + selectfile;// 将用户选择的文件作为一个菜单项加入播放列表,该菜单项名为该文件名; // 被点击后给出的命令串是该文件的全路径名MenuItem mi = new MenuItem(selectfile);mi.setActionmand(cufile);MenuBar mb = getMenuBar();Menu m = mb.getMenu(2);mi.addActionListener(this);m.add(mi);} else {// 程序逻辑运行到次表示用户选择了一个“播放列表”中的媒体文件// 此时可以通过如下动作获得该文件的全路径名cufile = e.getActionmand();selectfile = cufile; }// 如果存在一个播放器,则先将其关闭,稍后再重新创建// 创建播放器时需要捕捉一些异常if (player != null) {player.close(); }try {player = Manager.createPlayer(new MediaLocator("file:" + cufile));} catch (E*ception e2) {System.out.println(e2);return; }/** catch(NoPlayerE*ception e2){ System.out.println("不能找到播放器"); * return ; }*/if (player == null) {System.out.println("无法创建播放器");return; }first = false;setTitle(selectfile);// 设置处理播放控制器实际的对象;/**/player.addControllerListener(this);player.prefetch(); }// 菜单状态改变事件的响应函数;public void itemStateChanged(ItemEvent arg0) {// TODO Auto-generated method stub }public static void main(String[] args) {// TODO Auto-generated method stubnew MediaPlayer("播放器"); }// 调用绘图函数进行界面的绘制// public void update() { // }// 绘图函数成员//public void paint(Graphics g) { // }public void controllerUpdate(ControllerEvent e) {// TODO Auto-generated method stubContainer tainer = getContentPane();// 调用player.close()时ControllerClosedEvent事件出现// 如果存在视觉部件,则该部件应该拆除(为了一致起见,我们对控制面版部件也执行同样的操作,下一次需要时再构造)if (e instanceof ControllerClosedEvent) {if (vc != null) {remove(vc);vc = null; }if (cc != null) {remove(cc);cc = null; } }// 播放结束时,将播放指针置于文件之首,如果设定了循环播放,则再次启动播放器;if (e instanceof EndOfMediaEvent) {player.setMediaTime(new Time(0));if (loop) {player.start(); }return; }// PrefetchpletEvent事件发生后调用start,正式启动播放if (e instanceof PrefetchpleteEvent) {player.start();return; }// 本事件表示由于播放的资源已经确定;此时要将媒体的图形conmopnent// 如果有显示出来,同时将播放器player的控制显示到窗口里;if (e instanceof RealizepleteEvent) {// 如果媒体中有图像,将对应图像ponent载入窗体;vc = player.getVisualponent();if (vc != null)tainer.add(vc, BorderLayout.CENTER);// 将对应控制器ponent载入窗体;cc = player.getControlPanelponent();cc.setBackground(Color.blue);if (cc != null)tainer.add(cc, BorderLayout.SOUTH);// 有一些特殊媒体在播放时提供另外的控制手段,将控制器一并加入窗口; /* * gc=player.getGainControl(); gcc=gc.getControlponent();* if(gcc!=null) tainer.add(gcc,BorderLayout.NORTH); */// 根据媒体文件中是否有图像,设定相应的窗口大小if (vc != null) {pack();return;} else {setSize(300, 75);setVisible(true);return; } } } }。
音乐播放器课程设计java

音乐播放器课程设计java一、课程目标知识目标:1. 理解Java语言中面向对象编程的基本概念,包括类、对象、继承、封装等;2. 掌握Java中事件处理机制,了解图形用户界面(GUI)设计的基本方法;3. 学会使用Java内置的音频播放库,实现对音乐文件的播放、暂停、停止等基本控制。
技能目标:4. 能够运用所学知识设计并实现一个音乐播放器界面,包括播放、暂停按钮和音乐列表;5. 能够编写相应的Java代码,实现音乐播放器的功能,如音乐文件的加载、播放、暂停和停止;6. 培养学生解决问题的能力,学会调试和修复程序中出现的错误。
情感态度价值观目标:7. 培养学生对编程的兴趣和热情,增强其对学习Java语言的自信心;8. 培养学生团队协作精神,学会与他人分享和交流编程经验;9. 培养学生创新意识,激发学生主动探索新知识、新技术的热情。
本课程针对高年级学生,结合学科特点和教学要求,以实用性为导向,旨在让学生掌握Java编程的基本技能,培养其解决实际问题的能力。
通过本课程的学习,学生将能够独立设计并实现一个音乐播放器,提高其编程实践能力。
同时,注重培养学生的情感态度价值观,使其在掌握知识的同时,形成良好的学习习惯和团队协作精神。
二、教学内容1. 面向对象编程基础:- 类的定义与使用- 对象的创建与操作- 继承与多态- 封装与接口2. Java GUI设计:- Swing图形用户界面概述- 常用Swing组件的使用方法- 事件处理机制- 布局管理器3. 音乐播放器功能实现:- 音频播放库简介- 音乐文件的加载与播放- 播放控制功能实现(播放、暂停、停止)- 音乐列表展示4. 教学案例与实战:- 设计音乐播放器界面- 编写音乐播放器功能代码- 调试与优化音乐播放器程序- 项目展示与评价本章节教学内容按照课程目标进行选择和组织,注重科学性和系统性。
教学内容分为四个部分,分别对应Java面向对象编程基础、GUI设计、音乐播放器功能实现和教学案例实战。
音乐播放器Java课程设计报告

《JA V A程序设计》课程设计报告题目:音乐播放器学院:计算机科学与工程学院专业:信息管理与信息系统学生姓名:杨柏昌学号:1400320228指导老师:汪华登目录1. 概要设计....................................................................2. 详细设计....................................................................3. 测试............................................................................4. 总结............................................................................概要设计播放器主要使用JMF框架实现,播放器界面如下详细设计package design.curriculum.JAVA;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.Border;import java.io.*;import javax.media.*;public class JMFPlayer extends JFrame implements ActionListener,ControllerListener{Player player=null;//声明一个Player对象String filePath;//存放音乐文件夹所在目录String fileName;//存放歌曲名称boolean click=false;//用来标记歌曲是否被点击int songIndex;//歌曲元素在列表中的位置int loop=3;//作为播放模式的标记JLabel songNameLable;JRadioButton sequenceBtn;JRadioButton singleBtn;JRadioButton randomBtn;ButtonGroup loopGroup;JButton beforeBtn;JButton nextBtn;JButton playBtn;JButton pauseBtn;JButton stopBtn;JButton fileBtn;JButton exitBtn;Component controlComponent;//player的控制面板Container container;JPanel songNamejp;JPanel loopjp;JPanel btnjp;JPanel listjp;JPanel btn2jp;List list;public JMFPlayer(){super("音乐播放器");setBounds(480,50,400,600);setResizable(false);//设置界面不可修改setVisible(true);container=getContentPane();//获得容器主面板container.setLayout(new BoxLayout(container,BoxLayout.Y_AXIS));songNamejp=new JPanel(new GridLayout(2,2));songNamejp.setSize(400,50);container.add(songNamejp);songNameLable=new JLabel("正在播放:未选取歌曲");songNamejp.add(songNameLable);songNamejp.setBorder(BorderFactory.createEtchedBorder());loopjp=new JPanel();loopjp.setSize(400,50);container.add(loopjp);sequenceBtn=new JRadioButton("顺序播放");sequenceBtn.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent evt){loop = 1;}});singleBtn=new JRadioButton("单曲循环");singleBtn.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent evt){loop = 0;}});randomBtn=new JRadioButton("随机播放");randomBtn.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent evt){loop = 2;}});loopGroup=new ButtonGroup();loopGroup.add(sequenceBtn);loopGroup.add(singleBtn);loopGroup.add(randomBtn);loopjp.add(sequenceBtn);loopjp.add(singleBtn);loopjp.add(randomBtn);btnjp=new JPanel();btnjp.setLayout(new BoxLayout(btnjp,BoxLayout.X_AXIS));btnjp.setSize(400,50);container.add(btnjp);beforeBtn=new JButton("上一首");playBtn=new JButton("播放");pauseBtn=new JButton("暂停");stopBtn=new JButton("停止");nextBtn=new JButton("下一首");beforeBtn.addActionListener(this);playBtn.addActionListener(this);pauseBtn.addActionListener(this);stopBtn.addActionListener(this);nextBtn.addActionListener(this);btnjp.add(beforeBtn);btnjp.add(playBtn);btnjp.add(pauseBtn);btnjp.add(stopBtn);btnjp.add(nextBtn);listjp=new JPanel(new BorderLayout());listjp.setSize(300,300);container.add(listjp);Border border = BorderFactory.createEtchedBorder();Border titled = BorderFactory.createTitledBorder(border, "歌曲列表");listjp.setBorder(titled);fileBtn=new JButton("选择文件夹");exitBtn=new JButton("退出");fileBtn.addActionListener(this);exitBtn.addActionListener(this);btn2jp=new JPanel();btnjp.setSize(300,50);container.add(btn2jp);btn2jp.add(fileBtn);btn2jp.add(exitBtn);list=new List();list.setBackground(Color.pink);JScrollPane songListScroll = new JScrollPane(list);listjp.add(songListScroll, BorderLayout.CENTER);list.addMouseListener(new MouseAdapter() {//对歌曲点击的监听public void mouseClicked(MouseEvent e) {if (e.getClickCount() == 1) {fileName = list.getSelectedItem();songIndex=list.getSelectedIndex();click=true;}}});addWindowListener (new WindowAdapter(){public void windowClosing(WindowEvent e){if(player!=null){player.stop();player.deallocate();}System.exit(0);}});validate();}/** 对按钮事件的处理*/public void actionPerformed(ActionEvent e){if(e.getSource()==fileBtn){FileDialog dialog=new FileDialog(this,"音乐",FileDialog.LOAD);dialog.setVisible(true);filePath = dialog.getDirectory();if (filePath != null) {File filedir = new File(filePath);File[] filelist = filedir.listFiles();for (File file : filelist) {String filename = file.getName().toLowerCase();if(filename.endsWith(".wav")||filename.endsWith(".mp3")) {list.add(filename);}}}}if(e.getSource()==playBtn){if(click){click=!click;try{if(player!=null){player.stop();player.deallocate();}if(controlComponent!=null){songNamejp.remove(controlComponent);songNamejp.validate();}player=Manager.createPlayer(newMediaLocator("file:"+filePath+fileName));player.getDuration();player.prefetch();player.addControllerListener(this);songNameLable.setText(fileName);}catch (IOException e3) {}catch(NoPlayerException e2) {}}else if(!click){player.start();}}if(e.getSource()==exitBtn){System.exit(0);}if(e.getSource()==pauseBtn) {if(player!=null){player.stop();}}if(e.getSource()==stopBtn){if(player!=null){player.stop();player.setMediaTime(new Time(0));}elsereturn;}if(e.getSource()==beforeBtn){int n=list.getItemCount();if(songIndex<n){songIndex=songIndex-1;if(songIndex<0){songIndex=n-1;}fileName=list.getItem(songIndex);run();}}if(e.getSource()==nextBtn){int n=list.getItemCount();if(songIndex<n){songIndex=songIndex+1;if(songIndex>=n){songIndex=0;}fileName=list.getItem(songIndex);run();}}}public void run(){try{if(player!=null){player.stop();player.deallocate();}if(controlComponent!=null){songNamejp.remove(controlComponent);songNamejp.validate();}player=Manager.createPlayer(newMediaLocator("file:"+filePath+fileName));player.getDuration();player.prefetch();player.addControllerListener(this);songNameLable.setText(fileName);}catch (IOException e3) {}catch(NoPlayerException e2) {}}/** 对控制面板事件的处理* */public synchronized void controllerUpdate(ControllerEvent event){if(event instanceof RealizeCompleteEvent){if((controlComponent=player.getControlPanelComponent())!=null)songNamejp.add(controlComponent);}else if(event instanceof PrefetchCompleteEvent){player.start();}else if(event instanceof EndOfMediaEvent){player.setMediaTime(new Time(0));if(loop==0){player.start();}if(loop==1){int n=list.getItemCount();if(songIndex<n){fileName=list.getItem(songIndex+1);songIndex=songIndex+1;run();}}if(loop==2){int n=list.getItemCount();if(songIndex<n){songIndex=(int)(Math.random()*1000)%n;fileName=list.getItem(songIndex);run();}}}validate();}/** 主程序*/public static void main(String srgs[]){new JMFPlayer();}}测试1.运行程序如下:2.点击文件夹按钮弹出文件对话框,选择音乐文件夹界面如下:3.点击一首歌曲并播放总结做这个播放器用了两周的时间,一开始去图书馆借了好些书,发现了好几种类型做播放器用的API,发现有些比较繁杂和功能性不强,最终选用了JMF。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java课程设计报告题目:java音乐播放器姓名学号院系班级专业任课教师1.设计内容及要求能够实现简单的音乐播放器功能,如:打开本地文件,播放,暂停,停止,背景播放,单曲循环等等,界面充实,交互友好,可以添加多首歌曲目录一个简单的基于java语言的音乐播放器,菜单栏:文件,播放控制和播放列表,文件菜单包含打开、循环和退出三个菜单项;播放控制菜单包含播放、暂停和停止三个菜单项,播放列表菜单则是当向里面添加歌曲之后才能够查看到里面所包含的歌曲目录。
当播放歌曲时,可以调节音量大小或者设置是否静音;可以查看当前播放音乐的相关属性,如:歌曲名,歌手,发布时间,所属专辑等等。
2.需求分析1、时间跟踪条:根据歌曲播放的进度,控制条自动进行追踪,用户可以随时了解歌曲的播放进度2、音量控制键:可以点击该控键进行音量大小的调节以及是否静音的设置3、属性查询键:通过该控键,用户可以查看当前播放音乐的相属性,获取关于该歌曲的用户所需的相关信息。
4、菜单栏:①文件:打开:用户通过该菜单项打开本地音乐文件,听任何用户想听的歌曲循环:通过循环设置,用户可以重复的播放一首喜欢的歌曲退出:退出音乐播放器,及退出该程序②播放控制:播放:选择歌曲之后,通过点击播放菜单项启动播放器播放音乐暂停:暂停当前正在播放的音乐停止:停止当前正在播放的音乐③播放列表:当用户通过文件打开本地音乐文件后,及相当于在播放列表里面添加了歌曲,及形成相应的歌曲播放目录3.总体设计结合需求分析来看,整个设计包含了简单的菜单栏,根据用户需求设置了三个简单的实现基本操作的菜单,分别是:文件,播放控制,播放列表;根据具体的操作每个菜单还包含了相应的菜单项,文件:打开,循环,退出;播放控制:播放,暂停,停止;播放列表则没有菜单项,该菜单就是用来显示或者查看相应的歌曲目录的。
该音乐播放器设置了两个窗口,运行程序时打开的初始化欢迎界面,用户可以根据自己的需求进行菜单栏里面的基本操作和相应的设置,当用户添加或者打开音乐播放文件的时候,程序将会显示出第二个音乐文件播放窗口,与此同时,第一个初始化窗口将会自动隐藏,在音乐播放窗口里面用户可以进行相关的音乐播放的控制操作。
当用户进入音乐播放窗口时,该窗口有几个快捷控制的控键:时间追踪轴:可以实现播放的前进、后退功能,根据用户需求调节音乐的播放进度等;音量控制:设置静音,打开扬声器或者调节音量大小;播放列表:查看当前播放音乐的相关属性。
4.主要功能设计流程5.系统实现及测试:(一)JMF(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)如果只是想观看捕获的内容,只需要使用捕获数据源创建播放器Player即可。
如果想把捕获的数据发送到网络或者保存起来,就需要创建处理器Processor。
基本步骤是首先获取视频、音频捕获设备的信息,然后再根据取得的设备信息确定设备的位置。
找到设备的位置以后,调用ManageCreatePlayer 方法创建Player,当Player开始播放的时候,就开始了捕获的过程。
有多种方法获得捕获设备信息,可以通过查询指定的格式,也可以查询特定的设备名字。
Player准备好播放数据,当Player发出这个事件时,就可以获取播放器的可视面板和控制面板了。
具体步骤如下:1. 先把所有的捕获设备调出来2. 创建Player,当Play开始的时候,就开始了音频捕获的过程3.以MediaLocator为参数,创建Player4. 为PLAYER添加监听器,以便监听RealizeComplete事件(二)代码实现(1)添加库、包等相关文件import javax.media.ControllerEvent;import javax.media.ControllerListener;import javax.media.EndOfMediaEvent;import javax.media.PrefetchCompleteEvent;import javax.media.RealizeCompleteEvent;import javax.media.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;(2)初始化窗口1代码实现private void init() {// TODO Auto-generated method stubthis.setLayout(new BorderLayout());JPanel lrcPanel = new JPanel();JPanel controP= new JPanel();jta = new JTextArea(22,35);jta.setBackground(Color.black);jta.setLineWrap(true);jta.setWrapStyleWord(true);jta.setEditable(false);lrcPanel.add(new JScrollPane(jta));lrcPanel.setBackground(Color.black);lrcPanel.setVisible(true);JButton Jstart= new JButton("");Jstart.setIcon(new ImageIcon("start.png"));Jstart.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stubstart();}});JButton Jpause=new JButton();Jpause.setIcon(new ImageIcon("停止.png")); Jpause.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){stop();}});JButton Jnext =new JButton();Jnext.setIcon(new ImageIcon("next.png"));Jnext.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) { // TODO Auto-generated method stubnext();}});JButton Jprior =new JButton();Jprior.setIcon(new ImageIcon("back.png"));Jprior.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){back();}});controP.setLayout(new FlowLayout());controP.add(Jprior);controP.add(Jstart);controP.add(Jpause);controP.add(Jnext);this.add(lrcPanel,BorderLayout.CENTER); this.add(controP,BorderLayout.SOUTH);}(3)音乐播放窗口机基本功能的实现①界面②代码实现// 播放方法public void start() {if(isplaying==false){try {player =Manager.createPlayer(new File(mp3List.get(mp3NO)).toURI().toURL());jta.setText(null);} catch (NoPlayerException e) {// TODO 自动生成catch 块e.printStackTrace();System.out.println("不能播放此文件!");return;} catch (IOException e) {// TODO 自动生成catch 块e.printStackTrace();return;}if (player == null) {System.out.println("播放文件为空!");return;}player.addControllerListener(this);// 提取媒体内容player.prefetch();isplaying=true;//正在播放一首歌setLrc();}}private void setLrc() {// TODO Auto-generated method stubFile lrcfile = new File(lrcpath);if(!lrcfile.exists()){lrcfile.mkdir();}String lrcFName = getlrcFName();BufferedReader bReader;File lcf= new File(lrcpath+lrcFName+".lrc");System.out.println(lcf.getName());try {bReader = new BufferedReader(new FileReader(lcf));String s;while((s=bReader.readLine()) != null){jta.append(" "+s);jta.append("\n");}} catch (Exception e) {// TODO Auto-generated catch blockjta.setText("没有歌词");System.out.println("没有歌词文件!");}}private String getlrcFName() {//解析歌曲名;// TODO Auto-generated method stubString musicPath = mp3List.get(mp3NO);String s =musicPath.substring(11);System.out.println(s);String []str = s.split("\\.");String lrcFName=str[0] ;System.out.println(lrcFName);return lrcFName;}public void stop(){player.stop();isplaying=false;}public void next(){if(isplaying==true)stop();if(mp3NO<mp3List.size()-1){mp3NO++;start();}else{jta.setText("没有下一首了(<_>");}}public void back(){if(isplaying)stop();if(mp3NO>0){mp3NO--;start();}elsejta.setText("已经是第一首歌了(<_>)");}public void controllerUpdate(ControllerEvent e) {// 当媒体播放结束时,循环播放if (e instanceof EndOfMediaEvent) {isplaying=false;mp3NO++;System.out.println(mp3NO);if (mp3NO < mp3List.size()) {this.start();}return;}// 当提取媒体的内容结束if (e instanceof PrefetchCompleteEvent) {System.out.println("内容结束");player.start();return;}// 当实例化后if (e instanceof RealizeCompleteEvent) {System.out.println("实例化");// pack(); //执行pack()操作return;}}public void setMp3List(){File file = new File(musicpath);if( !file.exists()){file.mkdir();}File[] mcFiles ;mcFiles = file.listFiles();if(mcFiles!=null){for(File f : mcFiles){ System.out.println(f.getPath());mp3List.add(f.getPath());}}elseSystem.out.println("MyMusic中没有歌曲文件");}6.总结与说明在做写程序实现功能的过程中,界面和基本功能的设计需要较强的逻辑思维,一不小心就容易出错,在具体的功能设计和实现的过程中要尽可能用最简单的语句实现基本的播放器功能。