基于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
java音乐播放器实现代码
java⾳乐播放器实现代码本⽂实例为⼤家分享了java⾳乐播放器的具体代码,供⼤家参考,具体内容如下这个是源码结构介绍这个是界⾯,有点简陋,见笑了,但是基本上的东西都有了,没办法,没有美⼯的程序写的界⾯直接上源代码Player.javapackage com.service;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Random;import javax.sound.sampled.*;import javax.swing.JSlider;import javax.swing.JTable;import com.list.MusicList;import com.list.ThreadList;import com.list.ViewList;import com.model.Model;import com.model.Music;import com.view.View;/*"duration""author""title""copyright"private Player p;private long time = 0;Object lock = new Object();//⼀个空的对象,没什么意义private boolean paused = false;// 暂停继续public boolean isPaused() {return paused;}public void setPaused(boolean paused) {this.paused = paused;}private JSlider jSliderPlayProgress;//播放进度条private boolean over = false;//开始结束//是否⾃动播放下⼀曲private boolean isNext=true;private Music music;//⾳乐AudioInputStream din = null;SourceDataLine line=null;private FloatControl volume = null;private JSlider jSliderVolume;public JSlider getjSliderVolume() {return jSliderVolume;}public void setjSliderVolume(JSlider jSliderVolume) {this.jSliderVolume = jSliderVolume;}public Player(JSlider jSliderVolume,JSlider jSliderPlayProgress) { super();this.jSliderVolume = jSliderVolume;this.jSliderPlayProgress=jSliderPlayProgress;}public Music getMusic() {return music;}public void setMusic(Music music) {this.music = music;}public FloatControl getVolume(){return volume;}//播放⾳乐public void run(){AudioInputStream in=null;try {File file = new File(music.getPath());//播放不了的歌曲,直接下⼀⾸,并且在⾳乐列表中删除try {ViewList.getList().get(0).getJt().setModel(new Model());nextmusic();}AudioFormat baseFormat = in.getFormat();AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,baseFormat.getSampleRate(), 16, baseFormat.getChannels(),baseFormat.getChannels() * 2, baseFormat.getSampleRate(),false);if(baseFormat.getEncoding()==AudioFormat.Encoding.PCM_UNSIGNED || baseFormat.getEncoding()==AudioFormat.Encoding.ULAW || baseFormat.getEncoding()==AudioFormat.Encoding.ALAW || baseFormat.getEncoding()==AudioFormat.Encoding.PCM_SIGNED){time=(file.length()*8000000)/((int)(decodedFormat.getSampleRate()*baseFormat.getSampleSizeInBits()));}else{int bitrate=0;if(baseFormat.properties().get("bitrate")!=null){//取得播放速度(单位位每秒)bitrate=(int)((Integer)(baseFormat.properties().get("bitrate")));if(bitrate!=0)time=(file.length()*8000000)/bitrate;}}din = AudioSystem.getAudioInputStream(decodedFormat, in); info = new (SourceDataLine.class, decodedFormat);line = (SourceDataLine) AudioSystem.getLine(info);line.open();setVolume();jSliderPlayProgress.setMaximum((int)time);jSliderPlayProgress.setValue(0);if(line!=null){line.open(decodedFormat);byte[] data = new byte[4096];int nBytesRead;synchronized (lock) {while ((nBytesRead = din.read(data, 0, data.length)) != -1) {while (paused) {if(line.isRunning()) {line.stop();System.out.println("暂停");}try {lock.wait();System.out.println("等待");}catch(InterruptedException e) {}}if(!line.isRunning()&&!over) {System.out.println("开始播放");line.start();}if (over&&line.isRunning()) {System.out.println("停⽌播放");jSliderPlayProgress.setValue(0);isNext=false;line.drain();line.stop();line.close();}jSliderPlayProgress.setValue((int)line.getMicrosecondPosition());line.write(data, 0, nBytesRead);}//根据播放模式选择下⼀⾸歌nextmusic();}}finally {if(din != null) {try { din.close(); } catch(IOException e) { }}}}//设置播放器滚动条public void setVolume(){if(line!=null){if(line.isControlSupported(FloatControl.Type.MASTER_GAIN)){jSliderVolume.setEnabled(true);volume= (FloatControl)line.getControl( FloatControl.Type.MASTER_GAIN );jSliderVolume.setMinimum((int)volume.getMinimum());jSliderVolume.setMaximum((int)volume.getMaximum());//jSliderVolume.setValue((int)(volume.getMinimum()+(4*(volume.getMaximum()-volume.getMinimum()))/5)); volume.setValue((float)(volume.getMinimum()+(4*(volume.getMaximum()-volume.getMinimum()))/5));}}else{volume=null;jSliderVolume.setEnabled(false);}}private void nextmusic() {String mode=Setting.getMode();if (isNext&&!mode.equals("one")) {//单曲播放就不执⾏int nextid=0;//将要播放的idint currentid=Integer.parseInt(this.music.getId());System.out.println(mode);if (mode.equals("default")&&(currentid==MusicList.getList().size()-1)){return;}if (mode.equals("rand")) {Random random = new Random();nextid=Math.abs(random.nextInt())%MusicList.getList().size();}else if (mode.equals("onecircle")) {nextid=currentid;}else if (mode.equals("default")&&!(currentid==MusicList.getList().size()-1)) {nextid=currentid+1;}else if (mode.equals("morecircle")) {nextid=(currentid==MusicList.getList().size()-1)?0:currentid+1;}JTable jTable=ViewList.getList().get(0).getJt();if(nextid==0){//第⼀个jTable.setRowSelectionInterval(0,0);}else {jTable.setRowSelectionInterval(nextid-1,nextid);}this.stopplay();ThreadList.getList().clear();p=new Player(jSliderVolume,jSliderPlayProgress);p.setMusic(MusicList.getList().get(nextid));ThreadList.getList().add(p);p.start();}}//开始public void startplay(){over=false;}//停⽌public void stopplay(){// 暂停public void userPressedPause() {paused = true;}//继续public void userPressedPlay() {synchronized(lock) {paused = false;lock.notifyAll();}}public void Pause(){if (paused) {synchronized(lock) {paused = false;lock.notifyAll();}}else{paused = true;}}}这个主要是播放⾳乐的类,播放,暂停,停⽌,上⼀⾸,下⼀⾸都有了 View.javapackage com.view;import java.awt.BorderLayout;import java.awt.Color;import ponent;import java.awt.Container;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.Image;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.io.File;import java.io.IOException;import .URI;import .URL;import java.util.ArrayList;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JComponent;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JRootPane;import javax.swing.JScrollPane;import javax.swing.JSlider;import javax.swing.JTable;import javax.swing.ListSelectionModel;import javax.swing.ScrollPaneConstants;import javax.swing.SwingConstants;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;import javax.swing.table.TableCellRenderer;import com.list.ViewList;import com.model.Model;import com.model.Music;import com.service.Player;import com.service.Setting;import com.util.DirInput;import com.util.FileInput;import com.util.FileList;import com.util.List_File;public class View extends JFrame implements MouseListener,ActionListener,WindowListener { private JButton stop, open,del,next,pre;private Player p;private JPanel[] jPanels;private MusicList list;//private Long clickTime=0l;private JScrollPane jsp;private JTable jt;private JRootPane j;private Model model;private JSlider jSliderVolume;private JSlider jSliderPlayProgress;private FileInput fileinput;private DirInput dirInput;private JMenuBar jb;private JMenu jm;private JMenuItem fm,dm;private JComboBox jBox;public View(){System.out.println(ViewList.getList().size());if (ViewList.getList().size()==0) {Open();}}private void Open() {//this.getRootPane().setWindowDecorationStyle(JRootPane.NONE);//this.setUndecorated(true);//菜单选项jb=new JMenuBar();jm=new JMenu("打开");fm=new JMenuItem("⽂件");dm=new JMenuItem("⽂件夹");fm.addActionListener(this);dm.addActionListener(this);jb.add(jm);jm.add(fm);jm.add(dm);//this.setJMenuBar(jb);JPanel p1=new JPanel();JPanel p2=new JPanel();JPanel p3=new JPanel();//增加菜单选项j=new JRootPane();j.setJMenuBar(jb);open=new JButton("播放");stop=new JButton("停⽌");open.addMouseListener(this);stop.addMouseListener(this);pre=new JButton("上⼀⾸");next=new JButton("下⼀⾸");pre.addMouseListener(this);next.addMouseListener(this);p1.setLayout(new GridLayout(2,1));JPanel jPanel2=new JPanel();jPanel2.add(open);jPanel2.add(stop);jPanel2.add(pre);jPanel2.add(next);p1.add(jPanel2);/*p1.add(open);p1.add(stop);p1.add(pre);p1.add(next);*/del=new JButton("删除");del.addMouseListener(this);jSliderPlayProgress = new JSlider(); //播放进度条jSliderPlayProgress.setValue(0);jSliderPlayProgress.setEnabled(false);jSliderPlayProgress.setPreferredSize(new Dimension(200, 20));p1.add(jSliderPlayProgress);jSliderVolume = new JSlider(); //⾳量进度条jSliderVolume.setValue(0);//jSliderPlayProgress.setEnabled(false);jSliderVolume.setPreferredSize(new Dimension(100, 20));//设置滚动条长度jSliderVolume.addChangeListener(new ChangeListener(){public void stateChanged(ChangeEvent evt){System.out.println(jSliderVolume.getValue());if (ThreadList.getList().size()!=0) {ThreadList.getList().get(0).getVolume().setValue((float)jSliderVolume.getValue()); }}});String[] v={"顺序播放","随机播放","单曲循环","列表循环","单曲播放"};jBox=new JComboBox(v);jBox.addActionListener(this);p2.add(jBox);p2.add(del);p2.add(jSliderVolume);jPanels=new JPanel[list.getList().size()];for (int i = 0; i < list.getList().size(); i++) {Music music=list.getList().get(i);JPanel jPanel=new MyJPanel(music);JLabel jLabel=new JLabel(music.getName(),SwingConstants.CENTER);jLabel.setSize(300, 10);jPanels[i]=jPanel;jPanel.addMouseListener(this);jPanel.add(jLabel);p3.add(jPanel);}p3.setBackground(Color.WHITE);p3.setLayout(new GridLayout(10, 1));p3.setSize(320, 500);this.add(p1,BorderLayout.NORTH);this.add(p2,BorderLayout.SOUTH);model=new Model(); //添加表jt=new JTable(model){ // 设置jtable的单元格为透明的public Component prepareRenderer(TableCellRenderer renderer,int row, int column) {Component c = super.prepareRenderer(renderer, row, column);if (c instanceof JComponent) {((JComponent) c).setOpaque(false);}return c;}};;jt.setOpaque(false);jt.setRowHeight(30);jt.setSelectionMode(ListSelectionModel.SINGLE_SELECTION );jt.setShowHorizontalLines(false);jt.setSelectionBackground(new Color(189,215,238));jt.addMouseListener(this);jsp = new JScrollPane(jt);jsp.setOpaque(false);jsp.getViewport().setOpaque(false);//addmusic();//this.add(p3,BorderLayout.CENTER);this.add(jsp,BorderLayout.CENTER);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.addWindowListener(this);Image image=this.getToolkit().getImage("img/icon.jpg");this.setIconImage(image);this.setTitle("⾳乐播放器");ImageIcon icon = new ImageIcon("img/bg.jpg");JLabel lab = new JLabel(icon); // 将图⽚放⼊到label中lab.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight()); // 设置放有图⽚的label的位置this.getContentPane().add(lab, -1); // jthis本⾝是窗体,不能放置任何组件,⽤getContentPane()⽅法得到this的默认内容⾯板,将lab放⼊其中,-1表⽰放⼊⾯板的下层jSliderVolume.setOpaque(false);jPanel2.setOpaque(false);p1.setOpaque(false);p3.setOpaque(false);jSliderPlayProgress.setOpaque(false);this.setLocation(400, 200);this.setSize(337, 525);this.setResizable(false);this.setVisible(true);}@Overridepublic void mouseClicked(MouseEvent e) {System.out.println("开始播放");if (e.getSource()==open) {if (p==null) {//开始p=new Player(jSliderVolume,jSliderPlayProgress);p.setMusic(MusicList.getList().get(0));jt.setRowSelectionInterval(0,0);ThreadList.add(p);open.setText("暂停");p.start();}else{//继续if (ThreadList.getList().size()!=0) {p=ThreadList.getList().get(0);}String s=p.isPaused()?"暂停":"播放";open.setText(s);p.Pause();}}else if (e.getSource()==stop) {if (ThreadList.getList().size()!=0) {p=ThreadList.getList().get(0);}if (p!=null) {p.stopplay();p=null;open.setText("播放");}}else if (e.getSource()==pre) {//上⼀⾸premusic();}else if (e.getSource()==next) {//下⼀⾸nextmusic();}else if (e.getSource()==del) {delmusic();}else if (e.getSource()==jt&&e.getClickCount()==2) {//双击 clickmusic();}}private void clickmusic() {//双击JtableSystem.out.println("点击了");int rowNum = this.jt.getSelectedRow();System.out.println(rowNum);if(rowNum == -1) {JOptionPane.showMessageDialog(this, "你没有选择⼀项"); return;}ArrayList<Player> list=ThreadList.getList();p=new Player(jSliderVolume,jSliderPlayProgress);p.setMusic(MusicList.getList().get(rowNum));ThreadList.add(p);open.setText("暂停");p.start();}else{System.out.println("停⽌");list.get(0).stopplay();list.clear();p=new Player(jSliderVolume,jSliderPlayProgress);p.setMusic(MusicList.getList().get(rowNum));open.setText("暂停");list.add(p);p.start();}}private void delmusic() {int rowNum = this.jt.getSelectedRow();MusicList.getList().remove(rowNum);System.out.println(MusicList.getList().size());jt.setModel(new Model());ArrayList<Player> list=ThreadList.getList();p=new Player(jSliderVolume,jSliderPlayProgress);System.out.println(list.size()+"⼤⼩");if (list.size()!=0) {list.get(0).stopplay();list.clear();open.setText("暂停");if(rowNum==0){//第⼀个System.out.println("第⼀个");jt.setRowSelectionInterval(0,0);p.setMusic(MusicList.getList().get(rowNum));}else if(rowNum==MusicList.getList().size()){//最后⼀个 System.out.println("最后⼀个");jt.setRowSelectionInterval(rowNum-2,rowNum-1);p.setMusic(MusicList.getList().get(rowNum-1));}else {System.out.println("中间");jt.setRowSelectionInterval(rowNum-1,rowNum);p.setMusic(MusicList.getList().get(rowNum));}list.add(p);p.start();}}public JTable getJt() {return jt;}private void premusic() {System.out.println("上⼀⾸");ArrayList<Player> list=ThreadList.getList();int id=Integer.parseInt(list.get(0).getMusic().getId());if(id!=0){if (id==1) {jt.setRowSelectionInterval(0,0);}else{jt.setRowSelectionInterval(id-2,id-1);}System.out.println(id);p=new Player(jSliderVolume,jSliderPlayProgress); p.setMusic(MusicList.getList().get(id-1));System.out.println(id-1);open.setText("暂停");list.add(p);p.start();}}private void nextmusic() {System.out.println("下⼀⾸");ArrayList<Player> list=ThreadList.getList();int id=Integer.parseInt(list.get(0).getMusic().getId()); System.out.println(id);if(id!=MusicList.getList().size()-1){ //122jt.setRowSelectionInterval(id,id+1); //123条list.get(0).stopplay();list.clear();p=new Player(jSliderVolume,jSliderPlayProgress); p.setMusic(MusicList.getList().get(id+1));System.out.println(id+1);open.setText("暂停");list.add(p);p.start();}}//判断双击/* private boolean checkClickTime() {long nowTime = (new Date()).getTime();if ((nowTime - clickTime) < 300) {clickTime = nowTime;return true;}clickTime = nowTime;return false;}*/private void addmusic(String path) {//增加mp3⽂件夹 System.out.println("增加mp3⽂件夹");ArrayList<Music> musiclist=MusicList.getList();List_File fm = new List_File();ArrayList<String[]> FileList = fm.serachFiles(path); for (int i = 0; i < FileList.size(); i++) {Music music= new Music();music.setId(musiclist.size()+"");String[] s=(String[]) FileList.get(i);music.setName(s[0]);music.setPath(s[1]);musiclist.add(music);}jt.setModel(new Model());}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void actionPerformed(ActionEvent e) {if (e.getSource()==fm) {//添加mp3⽂件if(fileinput==null) fileinput = new FileInput(this);fileinput.open();File[] s=fileinput.getFiles();ArrayList<Music> musiclist=MusicList.getList();if(s!=null){for(int i=0;i<s.length;i++){Music music= new Music();music.setId(musiclist.size()+"");music.setName(s[i].getName());music.setPath(s[i].getAbsolutePath());musiclist.add(music);jt.setModel(new Model());}}}else if (e.getSource()==dm) {if(dirInput==null) dirInput = new DirInput(this);dirInput.open();File s=dirInput.getFile();if(s!=null){addmusic(s.getAbsolutePath());}}else if (e.getSource()==jBox) {//顺序播放 (默认)default 随机rand 单曲循环 onecircle 列表循环 morecircle 单曲播放 one if (ThreadList.getList().size()!=0) {p=ThreadList.getList().get(0);}else {p=new Player(jSliderVolume,jSliderPlayProgress);ThreadList.getList().add(p);}String[] s={"default","rand","onecircle","morecircle","one"};Setting.setMode(s[jBox.getSelectedIndex()]);}}@Overridepublic void windowActivated(WindowEvent e) {// TODO Auto-generated method stub}@Overridepublic void windowClosed(WindowEvent e) {// TODO Auto-generated method stubSystem.out.println("关闭kk");}@Overridepublic void windowClosing(WindowEvent e) {// TODO Auto-generated method stubSystem.out.println("close");if (MusicList.getList().size()!=0) {System.out.println("写⼊⽂件");//清空之前的内容FileList.clear("file/musiclist.txt");ArrayList<Music> list=MusicList.getList();for (int i = 0; i < list.size(); i++) {FileList.writeFile("file/musiclist.txt",list.get(i).getId()+","+list.get(i).getName()+","+list.get(i).getPath()+"\n");}}}@Overridepublic void windowDeactivated(WindowEvent e) {// TODO Auto-generated method stub}@Overridepublic void windowDeiconified(WindowEvent e) {// TODO Auto-generated method stub}@Overridepublic void windowIconified(WindowEvent e) {// TODO Auto-generated method stub}@Overridepublic void windowOpened(WindowEvent e) {// TODO Auto-generated method stubSystem.out.println("open");File file=new File("file/musiclist.txt");if (file.exists()==false) {try {file.createNewFile();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}else {FileList.readFileByLines("file/musiclist.txt");jt.setModel(new Model());}}}剩下的代码在后⾯附件上有,现在主要是有⼏个⼩问题,第⼀,我还没有找到获取⾳乐⽂件具体信息⽐较好的办法,所以每⼀⾸暂时还没有歌⼿,作曲的信息,第⼆界⾯有点难看,见谅了,第三个是打包成jar⽂件会有路径问题,暂时还没办法解决,我是直接在myeclipse上运⾏,⼀切正常,就是打包有点⼩问题暂时先说这些了,这个是我业余时间的项⽬,有什么不⾜的,⼤家都可以提出来。
基于java的音乐播放器课程设计报告
Java课程设计报告题目:java音乐播放器姓名学号院系班级专业任课教师1.设计内容及要求能够实现简单的音乐播放器功能,如:打开本地文件,播放,暂停,停止,背景播放,单曲循环等等,界面充实,交互友好,可以添加多首歌曲目录一个简单的基于java语言的音乐播放器,菜单栏:文件,播放控制和播放列表,文件菜单包含打开、循环和退出三个菜单项;播放控制菜单包含播放、暂停和停止三个菜单项,播放列表菜单则是当向里面添加歌曲之后才能够查看到里面所包含的歌曲目录。
当播放歌曲时,可以调节音量大小或者设置是否静音;可以查看当前播放音乐的相关属性,如:歌曲名,歌手,发布时间,所属专辑等等。
2.需求分析1、时间跟踪条:根据歌曲播放的进度,控制条自动进行追踪,用户可以随时了解歌曲的播放进度2、音量控制键:可以点击该控键进行音量大小的调节以及是否静音的设置3、属性查询键:通过该控键,用户可以查看当前播放音乐的相属性,获取关于该歌曲的用户所需的相关信息。
4、菜单栏:①文件:打开:用户通过该菜单项打开本地音乐文件,听任何用户想听的歌曲循环:通过循环设置,用户可以重复的播放一首喜欢的歌曲退出:退出音乐播放器,及退出该程序②播放控制:播放:选择歌曲之后,通过点击播放菜单项启动播放器播放音乐暂停:暂停当前正在播放的音乐停止:停止当前正在播放的音乐③播放列表:当用户通过文件打开本地音乐文件后,及相当于在播放列表里面添加了歌曲,及形成相应的歌曲播放目录3.总体设计结合需求分析来看,整个设计包含了简单的菜单栏,根据用户需求设置了三个简单的实现基本操作的菜单,分别是:文件,播放控制,播放列表;根据具体的操作每个菜单还包含了相应的菜单项,文件:打开,循环,退出;播放控制:播放,暂停,停止;播放列表则没有菜单项,该菜单就是用来显示或者查看相应的歌曲目录的。
该音乐播放器设置了两个窗口,运行程序时打开的初始化欢迎界面,用户可以根据自己的需求进行菜单栏里面的基本操作和相应的设置,当用户添加或者打开音乐播放文件的时候,程序将会显示出第二个音乐文件播放窗口,与此同时,第一个初始化窗口将会自动隐藏,在音乐播放窗口里面用户可以进行相关的音乐播放的控制操作。
基于java的音乐播放器课程设计报告 (1)
Java课程设计报告题目:java音乐播放器姓名学号院系班级专业任课教师1.设计内容及要求能够实现简单的音乐播放器功能,如:打开本地文件,播放,暂停,停止,背景播放,单曲循环等等,界面充实,交互友好,可以添加多首歌曲目录一个简单的基于java语言的音乐播放器,菜单栏:文件,播放控制和播放列表,文件菜单包含打开、循环和退出三个菜单项;播放控制菜单包含播放、暂停和停止三个菜单项,播放列表菜单则是当向里面添加歌曲之后才能够查看到里面所包含的歌曲目录。
当播放歌曲时,可以调节音量大小或者设置是否静音;可以查看当前播放音乐的相关属性,如:歌曲名,歌手,发布时间,所属专辑等等。
2.需求分析1、时间跟踪条:根据歌曲播放的进度,控制条自动进行追踪,用户可以随时了解歌曲的播放进度2、音量控制键:可以点击该控键进行音量大小的调节以及是否静音的设置3、属性查询键:通过该控键,用户可以查看当前播放音乐的相属性,获取关于该歌曲的用户所需的相关信息。
4、菜单栏:①文件:打开:用户通过该菜单项打开本地音乐文件,听任何用户想听的歌曲循环:通过循环设置,用户可以重复的播放一首喜欢的歌曲退出:退出音乐播放器,及退出该程序②播放控制:播放:选择歌曲之后,通过点击播放菜单项启动播放器播放音乐暂停:暂停当前正在播放的音乐停止:停止当前正在播放的音乐③播放列表:当用户通过文件打开本地音乐文件后,及相当于在播放列表里面添加了歌曲,及形成相应的歌曲播放目录3.总体设计结合需求分析来看,整个设计包含了简单的菜单栏,根据用户需求设置了三个简单的实现基本操作的菜单,分别是:文件,播放控制,播放列表;根据具体的操作每个菜单还包含了相应的菜单项,文件:打开,循环,退出;播放控制:播放,暂停,停止;播放列表则没有菜单项,该菜单就是用来显示或者查看相应的歌曲目录的。
该音乐播放器设置了两个窗口,运行程序时打开的初始化欢迎界面,用户可以根据自己的需求进行菜单栏里面的基本操作和相应的设置,当用户添加或者打开音乐播放文件的时候,程序将会显示出第二个音乐文件播放窗口,与此同时,第一个初始化窗口将会自动隐藏,在音乐播放窗口里面用户可以进行相关的音乐播放的控制操作。
音乐播放器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。
音乐播放器软件课程设计小组报告(java)
软件课程设计实验报告课题:音乐点播系统班级:作者:学号:指导老师:课设评价:课设成绩:(小组报告)一、需求分析1)项目描述 (3)1.1编写目的 (3)1.2项目背景 (3)1.3开发工具及环境简介 (4)2)软件基本要求 (4)二、总体方案设计说明1)整体结构模型 (5)2)各部分功能具体内容及关系 (5)3)任务分配 (6)三、详细设计说明1)客户端设计1.1图形界面设计和列表管理 (6)1.2本地播放 (9)1.3特色功能的实现 (10)1.4客户端与服务器通信 (12)2)服务器端设计2.1服务器界面设计 (14)2.2乐库管理14 (14)2.3服务器与客户端通信 (16)四、测试过程说明1)测试步骤 (16)2)测试结果与测评 (17)五、功能模块使用说明1)客户端 (18)2)服务器端 (19)六、开发计划 (20)七、开发总结与建议 (21)一、需求分析1)项目描述1.1编写目的设计一个基于windows平台的音乐点播系统,实现音乐库的管理以及用户网络下载和播放功能。
通常音乐播放器能够满足音乐的播放功能,实现一款播放器的基本功能,但随着网络的日益发达以及人们对信息交互的需要,越来越多的情况下我们更多的是通过网络来获取音乐资源,但如何有效的实现这一目的以及提供良好的用户体验是其关键。
通过window socket服务将客户端与服务器端相连接,将资源信息通过客户端来显示,不但简洁方便同时也能更好的满足用户需求,给用户带来极大的方便。
1.2项目背景本项目作为《软件课程设计》课程的训练项目提出,在基本的设计实现基础上,将不断对已有的设计进行进一步的修改和完善,最终完成整个软件开发过程。
本次项目的旨在通过不同软件工程设计方法与技术的实践,了解和掌握各种技术、工具平台的特点与局限性,体会协同开发方式。
第1阶段:主要目的是通过对项目需求的分析和理解,通过面向对象的设计方式完成项目前期的准备工作。
基于java的音乐播放器课程设计报告
基于java的音乐播放器课程设计报告第一篇:基于java的音乐播放器课程设计报告Java课程设计报告题目:java音乐播放器姓名学号院系班级专业任课教师1.设计内容及要求能够实现简单的音乐播放器功能,如:打开本地文件,播放,暂停,停止,背景播放,单曲循环等等,界面充实,交互友好,可以添加多首歌曲目录一个简单的基于java语言的音乐播放器,菜单栏:文件,播放控制和播放列表,文件菜单包含打开、循环和退出三个菜单项;播放控制菜单包含播放、暂停和停止三个菜单项,播放列表菜单则是当向里面添加歌曲之后才能够查看到里面所包含的歌曲目录。
当播放歌曲时,可以调节音量大小或者设置是否静音;可以查看当前播放音乐的相关属性,如:歌曲名,歌手,发布时间,所属专辑等等。
2.需求分析1、时间跟踪条:根据歌曲播放的进度,控制条自动进行追踪,用户可以随时了解歌曲的播放进度2、音量控制键:可以点击该控键进行音量大小的调节以及是否静音的设置3、属性查询键:通过该控键,用户可以查看当前播放音乐的相属性,获取关于该歌曲的用户所需的相关信息。
4、菜单栏:①文件:打开:用户通过该菜单项打开本地音乐文件,听任何用户想听的歌曲循环:通过循环设置,用户可以重复的播放一首喜欢的歌曲退出:退出音乐播放器,及退出该程序②播放控制:播放:选择歌曲之后,通过点击播放菜单项启动播放器播放音乐暂停:暂停当前正在播放的音乐停止:停止当前正在播放的音乐③播放列表:当用户通过文件打开本地音乐文件后,及相当于在播放列表里面添加了歌曲,及形成相应的歌曲播放目录3.总体设计结合需求分析来看,整个设计包含了简单的菜单栏,根据用户需求设置了三个简单的实现基本操作的菜单,分别是:文件,播放控制,播放列表;根据具体的操作每个菜单还包含了相应的菜单项,文件:打开,循环,退出;播放控制:播放,暂停,停止;播放列表则没有菜单项,该菜单就是用来显示或者查看相应的歌曲目录的。
该音乐播放器设置了两个窗口,运行程序时打开的初始化欢迎界面,用户可以根据自己的需求进行菜单栏里面的基本操作和相应的设置,当用户添加或者打开音乐播放文件的时候,程序将会显示出第二个音乐文件播放窗口,与此同时,第一个初始化窗口将会自动隐藏,在音乐播放窗口里面用户可以进行相关的音乐播放的控制操作。
音乐播放器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综合实验-简易音乐播放器-实验报告
Java综合实验实验报告一、实验要求根据下列描述:为某音乐爱好者开发音乐管理系统,该系统可以为音乐爱好者对已有的音乐信息检索、音乐播放、音乐收藏进行管理。
(1)音乐检索:对指定音乐名称进行检索,获取音乐的基本信息。
(2)音乐播放:对已有音源的音乐进行播放音乐收藏:对喜欢的音乐进行收藏管理,记录音源的位置等;二、核心思想利用MVC模式,结合javafx和SceneBuilder开发音乐管理系统三、实验原理四、实验环境Window 11、JDK-17、Intellij IDEA、JavaFX Scene Builder 2.0五、核心代码:1.业务逻辑:①User类package prehensiveExperiment.logic;import java.util.ArrayList;import java.util.List;/*** 用户类* 这个类记录了用户信息:账号、密码以及自己维护的音乐收藏*/public class User {private String account;private String password;private List<Music> musicCollection;public User(String account, String password) {this.account = account;this.password = password;musicCollection = new ArrayList<>();}public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}/*** 获取音乐收藏* @return musicCollection*/public List<Music> getMusicCollection() {return musicCollection;}/*** 收藏歌曲* @param music*/public void addMusic(Music music){musicCollection.add(music);}/*** 取消收藏* @param music*/public void deleteMusic(Music music){musicCollection.remove(music);}@Overridepublic String toString() {return "User{" +"account='" + account + '\'' +", password='" + password + '\'' +", musicCollection=" + musicCollection +'}';}}②Music类:package prehensiveExperiment.logic;/*** 音乐类* 这个类记录了歌曲的信息:歌曲名、歌手、歌曲时长、大小、发行时间、专辑*/public class Music implements Comparable<Music>{private String name;private String singer;private String totalTime;private String size;private String startTime;private String album;public Music(String name, String singer, String totalTime, String size, String startTime, String album) { = name;this.singer = singer;this.totalTime = totalTime;this.size = size;this.startTime = startTime;this.album = album;}public String getName() {return name;}public void setName(String name) { = name;}public String getSinger() {return singer;}public void setSinger(String singer) {this.singer = singer;}public String getTotalTime() {return totalTime;}public void setTotalTime(String totalTime) {this.totalTime = totalTime;}public String getSize() {return size;}public void setSize(String size) {this.size = size;}public String getStartTime() {return startTime;}public void setStartTime(String startTime) {this.startTime = startTime;}public String getAlbum() {return album;}public void setAlbum(String album) {this.album = album;}/*** 默认按歌手排序* @param o* @return*/@Overridepublic int compareTo(Music o){return pareTo(o.singer);}@Overridepublic String toString() {return "Music{" +"name='" + name + '\'' +", singer='" + singer + '\'' +", totalTime='" + totalTime + '\'' +", size='" + size + '\'' +", startTime='" + startTime + '\'' +", album='" + album + '\'' +'}';}}③MusicSys类:package prehensiveExperiment.logic;import java.io.File;import java.io.FileNotFoundException;import java.util.ArrayList;import parator;import java.util.List;import java.util.Scanner;/*** 音乐管理系统* 这个类维护了用户音乐收藏、本地音乐以及播放器的常规操作*/public class MusicSys {private Music currentMusic;private int index;//当前播放音乐的索引值private String state;private double volume;private List<User> users;//用户private int index2;//当前登录用户的索引值private List<Music> musics;//本地音乐private static MusicSys instance = null;//单例模式/*** 构造函数* 分别调用createUser()和createMusic()录入用户和音乐信息* 播放器初始状态:默认关闭(state = OFF),如果打开默认播放第一首歌(index=0),音量调至一半(volume = 0.5)* @throws FileNotFoundException*/private MusicSys() throws FileNotFoundException {users = new ArrayList<>();musics = new ArrayList<>();createUser();createMusic();index = 0;currentMusic = musics.get(index);state = "OFF";volume = 0.5;}/*** 单一工厂* @return instance* @throws FileNotFoundException*/public static MusicSys getInstance() throws FileNotFoundException {if(instance == null)instance = new MusicSys();return instance;}/*** 这个方法通过扫描事先写好的User.txt文件,将用户信息一条条录入。
基于java的音乐播放器的设计(源代码+实验报告)
主类MUSICPLAYER类:import java.util.*;import javax.swing.JSlider;import java.awt.BorderLayout;import java.awt.FlowLayout;import java.awt.Point;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import javax.media.ControllerEvent;import javax.media.ControllerListener;import javax.media.EndOfMediaEvent;import javax.media.Manager;import javax.media.MediaLocator;import javax.media.NoPlayerException;import javax.media.Player;import javax.media.PrefetchCompleteEvent;import javax.media.Time;import javax.swing.ButtonGroup;import javax.swing.DefaultListModel;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JList;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JRadioButtonMenuItem;import javax.swing.JScrollBar;import javax.swing.JScrollPane;import javax.swing.filechooser.FileNameExtensionFilter;public class MusicPlayer implements ActionListener, Serializable,ControllerListener {private static final long serialVersionUID = 1L;private JFrame frame = null;private JPanel controlPanel = null;private JButton btnPlay = null;private JButton btnPre = null;private JButton btnNext = null;private JScrollPane listPane = null;private JList list = null;private DefaultListModel listModel = null;private JMenuBar menubar = null;private JMenu menuFile = null, menuAbout = null, menuMode = null;private JMenuItem itemOpen, itemOpens, itemExit, itemAbout;private JRadioButtonMenuItem itemSingle, itemSequence ,itemRandom;private ListItem currentItem = null;private static Player player = null;private boolean isPause = false;private int mode;private int currentIndex;private ImageIcon iconPlay = new ImageIcon("d:\\1.jpg");private ImageIcon iconPre = new ImageIcon("d:\\3.jpg");private ImageIcon iconNext = new ImageIcon("d:\\2.jpg");private ImageIcon iconPause = new ImageIcon("d:\\4.jpg");public static void main(String[] args){new MusicPlayer();}public MusicPlayer(){init();}public void init(){frame = new JFrame();frame.setTitle("音乐播放器");frame.setSize(400, 300);frame.setResizable(false);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);menubar = new JMenuBar();menuFile = new JMenu("文件");menuAbout = new JMenu("关于");menuMode = new JMenu("播放模式");itemOpen = new JMenuItem("添加文件");itemOpens = new JMenuItem("添加文件夹");itemExit = new JMenuItem("退出");itemAbout = new JMenuItem("关于");itemOpen.addActionListener(this);itemOpens.addActionListener(this);itemExit.addActionListener(this);itemAbout.addActionListener(this);itemSequence = new JRadioButtonMenuItem("顺序播放"); itemSequence.setSelected(true);itemSingle = new JRadioButtonMenuItem("单曲循环"); itemSequence.addActionListener(this);itemRandom = new JRadioButtonMenuItem("随机播放"); itemRandom.addActionListener(this);itemSingle.addActionListener(this);ButtonGroup bg = new ButtonGroup();bg.add(itemRandom);bg.add(itemSequence);bg.add(itemSingle);menuFile.add(itemOpen);menuFile.add(itemOpens);menuFile.add(itemExit);menuAbout.add(itemAbout);menuMode.add(itemSequence);menuMode.add(itemSingle);menuMode.add(itemRandom);menubar.add(menuFile);menubar.add(menuAbout);menubar.add(menuMode);frame.setJMenuBar(menubar);frame.setLayout(new BorderLayout());controlPanel = new JPanel();controlPanel.setLayout(new FlowLayout());btnPlay = new JButton(iconPlay);btnPre = new JButton(iconPre);btnNext = new JButton(iconNext);btnPlay.addActionListener(this);btnPre.addActionListener(this);btnNext.addActionListener(this);controlPanel.add(btnPre);controlPanel.add(btnPlay);controlPanel.add(btnNext);listPane = new JScrollPane();listModel = load();list = new JList(listModel);if (list.getSelectedIndex() == -1 && listModel.size() > 0){currentItem = (ListItem) listModel.get(0);list.setSelectedIndex(0);currentIndex=0;}listPane.getViewport().add(list);list.addMouseListener(new MouseAdapter(){public void mouseClicked(MouseEvent e){if (e.getClickCount() == 2){if(player!=null){player.close();btnPlay.setIcon(iconPlay);}currentIndex = list.locationToIndex(e.getPoint());currentItem = (ListItem) listModel.get(currentIndex);list.setSelectedIndex(currentIndex);play();}}});frame.setLayout(new BorderLayout());frame.add(controlPanel, BorderLayout.NORTH);frame.add(listPane, BorderLayout.CENTER);frame.setVisible(true);};public void actionPerformed(ActionEvent e){if (e.getSource() == itemOpen){// add filesJFileChooser jfc = new JFileChooser();FileNameExtensionFilter filter = new FileNameExtensionFilter("音乐文件", "mp3", "wav");jfc.setFileFilter(filter);jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);jfc.setMultiSelectionEnabled(true);if (jfc.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION){File[] files = jfc.getSelectedFiles();for (File f : files){ListItem item = new ListItem(f.getName(), f.getAbsolutePath());listModel.addElement(item);}}}else if (e.getSource() == itemOpens){// add files in a directoryJFileChooser jfc = new JFileChooser();jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);if (jfc.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION){File directory = jfc.getSelectedFile();File[] files = directory.listFiles(new java.io.FileFilter(){public boolean accept(File f){if (f.getName().toLowerCase().endsWith(".mp3")|| f.getName().toLowerCase().endsWith(".wav"))return true;return false;}});for (File file : files){ListItem item = new ListItem(file.getName(), file.getAbsolutePath());listModel.addElement(item);}save(listModel);}}else if (e.getSource() == itemExit){System.exit(0);}else if (e.getSource() == itemAbout){JOptionPane.showMessageDialog(frame, "作者:陆鑫");}else if (e.getSource() == btnPlay){// play or pauseplay();}else if (e.getSource() == btnPre){pre();}else if (e.getSource() == btnNext){// next musicnext();}else if (e.getSource() == itemSequence){mode = 0;}else if (e.getSource() == itemSingle){mode = 1;}else if (e.getSource() == itemRandom){mode = 2;}}// play control/*** 播放*/public void play(){if (btnPlay.getIcon() == iconPlay){if (isPause){player.start();System.out.println("暂停结束");isPause = false;}else{try{player = Manager.createPlayer(new MediaLocator("file:"+ currentItem.getPath()));player.addControllerListener(this); // 提取媒体内容player.prefetch();}catch (NoPlayerException e1){e1.printStackTrace();}catch (IOException e1){e1.printStackTrace();}}btnPlay.setIcon(iconPause);}else{player.stop();isPause = true;System.out.println("暂停");btnPlay.setIcon(iconPlay);}}public void next(){if (currentIndex == listModel.getSize() - 1){currentIndex = 0;}else{currentIndex++;}currentItem = (ListItem) listModel.get(currentIndex);list.setSelectedIndex(currentIndex);Point p = list.indexToLocation(currentIndex);JScrollBar jScrollBar = listPane.getVerticalScrollBar();// 获得垂直转动条jScrollBar.setValue(p.y);// 设置垂直转动条位置btnPlay.setIcon(iconPlay);if (player != null)player.close();isPause = false;play();}public void rand(){list.setSelectedIndex((int)(Math.random()%(listModel.getSize()-1)));Pointp=list.indexToLocation((int)(Math.random()%(listModel.getSize()-1)));JScrollBar jScrollBar = listPane.getVerticalScrollBar();jScrollBar.setValue(p.y);btnPlay.setIcon(iconPlay);if (player != null)player.close();isPause = false;play();}public void pre(){if (currentIndex == 0){currentIndex = listModel.getSize() - 1;}else{currentIndex--;}currentItem = (ListItem) listModel.get(currentIndex);list.setSelectedIndex(currentIndex);Point p = list.indexToLocation(currentIndex);JScrollBar jScrollBar = listPane.getVerticalScrollBar();// 获得垂直转动条jScrollBar.setValue(p.y);// 设置垂直转动条位置btnPlay.setIcon(iconPlay);if (player != null){player.close();}isPause = false;play();}// end play controlpublic DefaultListModel load(){File file = new File("list.lst");DefaultListModel dlm = new DefaultListModel();if (file.exists()){try{ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));Integer size = (Integer) ois.readObject();if (size != 0){for (int i = 0; i < size; i++){ListItem item = (ListItem) ois.readObject();dlm.addElement(item);}}ois.close();return dlm;}catch (FileNotFoundException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}catch (ClassNotFoundException e){e.printStackTrace();}}return dlm;}public void save(DefaultListModel dlm){try{ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("list.lst")));Integer size = dlm.getSize();oos.writeObject(size);for (int i = 0; i < size; i++){ListItem item = (ListItem) dlm.get(i);oos.writeObject(item);}oos.close();}catch (Exception e){e.printStackTrace();}}public void controllerUpdate(ControllerEvent e) {if (e instanceof EndOfMediaEvent){if (mode == 0){// 顺序播放System.out.println("顺序播放");next();}else if (mode == 1){ // 单曲循环System.out.println("播放结束");player.setMediaTime(new Time(0));System.out.println("单曲循环");player.start();}else if (mode == 2){System.out.println("随机播放");rand();}return;}// 当提取媒体的内容结束if (e instanceof PrefetchCompleteEvent){System.out.println("开始播放");player.start();return;}}}LISTITEM类import java.io.Serializable;public class ListItem implements Serializable{private static final long serialVersionUID = 1L;private String name;private String path;public ListItem(){}public ListItem(String name, String path){ = name;this.path = path;}public String getName(){return name;}public void setName(String name){ = name;}public String getPath(){return path;}public void setPath(String path){this.path = path;}public String toString(){return name;}}基于java的音乐播放器的设计摘要:在信息,技术高速发展的今天,多媒体技术也越来越受到人们的重视。
音乐播放器的实验报告
一、实验目的1. 熟悉音乐播放器的基本原理和设计方法。
2. 掌握音乐播放器软件的开发流程和关键技术。
3. 培养学生的动手实践能力和团队协作精神。
二、实验环境1. 操作系统:Windows 102. 开发工具:Java Development Kit (JDK) 1.83. 开发环境:Eclipse IDE for Java Developers4. 音乐格式:MP3、WAV等三、实验内容1. 音乐播放器功能需求分析2. 音乐播放器系统设计3. 音乐播放器软件实现4. 音乐播放器测试与优化四、实验步骤1. 功能需求分析音乐播放器应具备以下功能:(1)播放音乐:支持MP3、WAV等音乐格式;(2)播放列表:支持添加、删除、排序音乐列表;(3)音量控制:支持音量调节;(4)播放模式:支持顺序播放、随机播放、单曲循环;(5)播放进度:显示当前播放时间和总时长;(6)播放界面:简洁、美观、易用。
2. 系统设计(1)模块划分音乐播放器系统分为以下模块:①音乐播放模块:负责播放音乐、控制播放进度、音量等;②播放列表模块:负责管理音乐列表、添加、删除、排序音乐;③用户界面模块:负责显示播放界面、交互操作等。
(2)技术选型①音乐播放模块:采用Java Media Framework (JMF) 进行音乐播放;②播放列表模块:使用ArrayList存储音乐信息;③用户界面模块:采用Swing组件实现。
3. 软件实现(1)音乐播放模块①导入JMF库,创建播放器实例;②设置播放器播放源(音乐文件);③实现播放、暂停、停止、音量调节等功能;④实现播放进度显示。
(2)播放列表模块①创建播放列表类,继承ArrayList;②添加、删除、排序音乐列表;③实现音乐列表的遍历和查找。
(3)用户界面模块①设计播放界面布局,包括播放按钮、进度条、音量条等;②实现播放器与用户界面的交互操作;③实现播放器功能的调用。
4. 测试与优化(1)功能测试①测试播放音乐功能,确保支持多种音乐格式;②测试播放列表功能,确保添加、删除、排序操作正常;③测试播放模式功能,确保顺序播放、随机播放、单曲循环正常;④测试音量控制功能,确保音量调节正常;⑤测试播放进度显示功能,确保播放时间与总时长准确。
基于java音乐播放器设计
基于java的音乐播放器的设计摘要:在信息,技术高速进展的今天,多媒体技术也愈来愈受到人们的重视。
文章对目前利用较多的音乐播放器作出较详细的比较。
通过阅读多张文献,分析了一些音乐播放器的功能并考虑了如何能实现支持更多格式的音乐文件,如何能知足利用者对播放器的需求。
本文要紧介绍了一个基于Java Applet来实现的音乐播放器的设计。
并对系统开发中涉及到的关键技术作了探讨,简要分析介绍了Java技术和 Applet的工作原理,最后说明系统需要实现的功能。
关键词:java;Applet;音乐播放器;前言最近几年来,听音乐已成为人们生活的一部份,与此同时,音乐播放器以其平易近人的价钱也日趋普及,这大大丰硕了业余生活也减缓了工作压力,但尚有诸多不足的地方有待改良日常生活中,咱们在听音时,常感手动操作甚是麻烦且想寻觅某个音频文件须从头至尾逐个查看,如此费时费力很是不便。
音乐播放器的实现方式,采纳口述音乐文件名的方式即可播放指定歌曲文件,幸免了繁琐的查找,亦使其加倍人性化,实现了播放器的全自动语音操纵。
我以后要采纳java Applet的多媒体技术,设计出一个基于java Applet的音乐播放器。
此刻电脑上的音乐播放器百花齐放,以Winamp,Foobar2000,千千静听,酷狗和酷我音乐盒最流行。
播放器最重要的参数当属支持的格式了,即便只图个响,也需要有丰硕的格式作为后盾。
在此方面,千千静听支持多种音频格式,除常见的MP3,WMA等,也支持APE,FLAC等无损紧缩格式,它一共支持三十多种音频格式,是一个比较全能的播放器。
Winamp也支持超级多的格式,但对APE 格式的支持需要安装对应插件;除音频格式外,Winamp还支持一些常见的视频格式,那个功能能为用户带来一些方便。
Foobar2000支持的格式数量也差不多,可是对APE的支持仍然需要安装插件。
只是Foobar2000有一个特色功能,它支持直接读取紧缩包里的音乐文件,从电骡上下载的APE完整碟通常都是打包的,若是用Foobar2000的那个功能就能够够不解压直接听歌了。
Java程序设计课程设计报告材料音乐播放器
《Java及Java web应用开发》实验报告设计题目: Java音乐播放器专业计算机信息管理班级 1班学号姓名2014年12月24 日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.*;public class MediaPlayer extends JFrame implements ActionListener, ItemListener, ControllerListener {String title;Player player;boolean first = true, loop = false;Component 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.exit(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();CheckboxMenuItem cbmi = new CheckboxMenuItem("循环", 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.getActionCommand().equals("退出")) {// 调用dispose以便执行windowCloseddispose();return; }// 此事表明拥护选择了“播放”命令;// 如果当前有一个文件可以播放则执行播放命令;if (e.getActionCommand().equals("播放")) {if (player != null) {player.start(); }return; }// 如果当前正在播放某一文件,则执行暂停;if (e.getActionCommand().equals("暂停")) {if (player != null) {player.stop(); }return; } // 停止命令的响应;if (e.getActionCommand().equals("停止")) {if (player != null) {player.stop();player.setMediaTime(new Time(0)); }return; } // 用户选择要播放的媒体文件if (e.getActionCommand().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.setActionCommand(cufile);MenuBar mb = getMenuBar();Menu m = mb.getMenu(2);mi.addActionListener(this);m.add(mi);} else {// 程序逻辑运行到次表示用户选择了一个“播放列表”中的媒体文件// 此时可以通过如下动作获得该文件的全路径名cufile = e.getActionCommand();selectfile = cufile; }// 如果存在一个播放器,则先将其关闭,稍后再重新创建// 创建播放器时需要捕捉一些异常if (player != null) {player.close(); }try {player = Manager.createPlayer(new MediaLocator("file:" + cufile));} catch (Exception e2) {System.out.println(e2);return; }/** catch(NoPlayerException 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; }// PrefetchCompletEvent事件发生后调用start,正式启动播放if (e instanceof PrefetchCompleteEvent) {player.start();return; }// 本事件表示由于播放的资源已经确定;此时要将媒体的图形conmopnent// 如果有显示出来,同时将播放器player的控制显示到窗口里;if (e instanceof RealizeCompleteEvent) {// 如果媒体中有图像,将对应图像component载入窗体;vc = player.getVisualComponent();if (vc != null)tainer.add(vc, BorderLayout.CENTER);// 将对应控制器component载入窗体;cc = player.getControlPanelComponent();cc.setBackground(Color.blue);if (cc != null)tainer.add(cc, BorderLayout.SOUTH);// 有一些特殊媒体在播放时提供另外的控制手段,将控制器一并加入窗口; /* * gc=player.getGainControl(); gcc=gc.getControlComponent();* if(gcc!=null) tainer.add(gcc,BorderLayout.NORTH); */// 根据媒体文件中是否有图像,设定相应的窗口大小if (vc != null) {pack();return;} else {setSize(300, 75);setVisible(true);return; } } } }。
音乐播放器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的音乐播放器的设计与实现
基于Java的音乐播放器的设计与实现介绍本文档旨在介绍基于Java的音乐播放器的设计与实现。
音乐播放器是一种常见的应用程序,它能够播放音频文件,并提供一系列基本的播放控制功能。
功能以下是基于Java的音乐播放器的主要功能:1. 播放和暂停:用户可以选择要播放的音乐文件,并进行播放和暂停操作。
2. 播放列表:用户可以创建和管理播放列表,以便更方便地组织音乐文件。
3. 选择曲目:用户可以通过界面选择要播放的曲目,或者通过搜索功能查找特定的曲目。
4. 快进和倒退:用户可以通过拖动进度条来快进或倒退音乐的播放位置。
5. 音量控制:用户可以通过滑动音量条来调整音乐的音量大小。
6. 重复和随机播放:用户可以选择是否要重复播放当前曲目或随机播放曲目列表中的音乐。
7. 歌词显示:如果音乐文件包含歌词信息,用户可以选择显示歌词以及歌词滚动展示功能。
设计与实现以下是基于Java的音乐播放器的设计与实现的主要步骤:1. 界面设计:设计一个用户友好的界面,包括播放控制按钮、播放列表、歌曲选择界面等。
2. 音频处理:使用Java提供的音频处理库,实现音频文件的解码和播放功能。
3. 播放逻辑:实现播放器的核心逻辑,包括播放、暂停、停止、快进/倒退等操作。
4. 播放列表管理:实现播放列表的创建、添加音乐、删除音乐等功能。
5. 用户交互:为用户提供直观的交互方式,包括点击按钮、拖动进度条等。
总结通过本文档的介绍,我们了解了基于Java的音乐播放器的设计与实现。
基于Java的音乐播放器可以为用户提供丰富的音乐播放功能,并通过友好的界面与用户进行交互。
设计和实现一个功能完善的音乐播放器需要综合考虑音频处理、播放逻辑、播放列表管理和用户交互等方面的因素。
基于Java的智能音乐播放器设计
基于Java的智能音乐播放器设计一、引言随着科技的不断发展,智能音乐播放器已经成为人们日常生活中不可或缺的一部分。
在这个信息爆炸的时代,人们对音乐的需求越来越高,因此设计一款功能强大、智能化的音乐播放器显得尤为重要。
本文将介绍基于Java语言开发的智能音乐播放器的设计思路和实现方法。
二、功能设计音乐播放功能:实现音乐文件的播放、暂停、停止、快进、快退等基本功能。
音乐库管理:支持对本地音乐文件进行扫描和管理,包括歌曲信息的读取和展示。
智能推荐:根据用户的听歌历史和喜好,推荐相关音乐给用户,提升用户体验。
歌词显示:实现歌词同步显示功能,让用户可以更好地理解歌曲内容。
多平台支持:支持在Windows、MacOS和Linux等多个操作系统上运行。
三、技术选型Java语言:作为一种跨平台的编程语言,Java具有良好的兼容性和稳定性,非常适合开发智能音乐播放器。
JavaFX:作为Java官方推荐的GUI工具包,JavaFX提供了丰富的界面设计组件,能够帮助我们快速构建用户友好的界面。
SQLite数据库:用于存储音乐库信息和用户数据,SQLite是一款轻量级的数据库引擎,易于集成和管理。
四、系统架构系统架构图上图展示了基于Java的智能音乐播放器的系统架构。
主要包括用户界面模块、音乐播放控制模块、数据管理模块和推荐算法模块。
用户可以通过界面与系统进行交互,系统根据用户操作调用相应模块实现功能。
五、关键实现步骤界面设计:使用JavaFX设计出美观直观的用户界面,包括音乐列表展示、播放控制按钮等。
音乐解码:利用Java内置的音频解码库对音乐文件进行解码,并通过Java Sound API实现音频播放功能。
数据存储:使用SQLite数据库存储音乐库信息和用户数据,确保数据安全和高效访问。
推荐算法:根据用户听歌历史和喜好,设计合适的推荐算法为用户推荐相关音乐。
六、未来展望基于Java的智能音乐播放器在功能和性能上都有很大的提升空间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主类M U S I C P L A Y E R类:import .*;public class MusicPlayer implements ActionListener, Serializable,ControllerListener {private static final long serialVersionUID = 1L;private JFrame frame = null;private JPanel controlPanel = null;private JButton btnPlay = null;private JButton btnPre = null;private JButton btnNext = null;private JScrollPane listPane = null;private JList list = null;private DefaultListModel listModel = null;private JMenuBar menubar = null;private JMenu menuFile = null, menuAbout = null, menuMode = null;private JMenuItem itemOpen, itemOpens, itemExit, itemAbout;private JRadioButtonMenuItem itemSingle, itemSequence ,itemRandom;private ListItem currentItem = null;private static Player player = null;private boolean isPause = false;private int mode;private int currentIndex;private ImageIcon iconPlay = new ImageIcon("d:\\");private ImageIcon iconPre = new ImageIcon("d:\\");private ImageIcon iconNext = new ImageIcon("d:\\");private ImageIcon iconPause = new ImageIcon("d:\\");public static void main(String[] args){new MusicPlayer();}public MusicPlayer(){init();}public void init(){frame = new JFrame();("音乐播放器");(400, 300);(false);(null);;menubar = new JMenuBar();menuFile = new JMenu("文件");menuAbout = new JMenu("关于");menuMode = new JMenu("播放模式");itemOpen = new JMenuItem("添加文件");itemOpens = new JMenuItem("添加文件夹");itemExit = new JMenuItem("退出");itemAbout = new JMenuItem("关于");(this);(this);(this);(this);itemSequence = new JRadioButtonMenuItem("顺序播放"); (true);itemSingle = new JRadioButtonMenuItem("单曲循环"); (this);itemRandom = new JRadioButtonMenuItem("随机播放"); (this);(this);ButtonGroup bg = new ButtonGroup(); (itemRandom);(itemSequence);(itemSingle);(itemOpen);(itemOpens);(itemExit);(itemAbout);(itemSequence);(itemSingle);(itemRandom);(menuFile);(menuAbout);(menuMode);(menubar);(new BorderLayout());controlPanel = new JPanel();(new FlowLayout());btnPlay = new JButton(iconPlay);btnPre = new JButton(iconPre);btnNext = new JButton(iconNext);(this);(this);(this);(btnPre);(btnPlay);(btnNext);listPane = new JScrollPane();listModel = load();list = new JList(listModel);if () == -1 && () > 0){currentItem = (ListItem) (0);(0);currentIndex=0;}().add(list);(new MouseAdapter(){public void mouseClicked(MouseEvent e){if () == 2){if(player!=null){();(iconPlay);}currentIndex = ());currentItem = (ListItem) (currentIndex);(currentIndex);play();}}});(new BorderLayout());(controlPanel, ;(listPane, ;(true);};public void actionPerformed(ActionEvent e){if () == itemOpen){oLowerCase().endsWith(".mp3")|| ().toLowerCase().endsWith(".wav"))return true;return false;}});for (File file : files){ListItem item = new ListItem(), ());(item);}save(listModel);}}else if () == itemExit){(0);}else if () == itemAbout){(frame, "作者:陆鑫");}else if () == btnPlay){u,.mid,.wav等。
对于其他格式的文件,可以用相应地工具软件将它们转换为.au 或.mid等Java支持的文件。
在Applet中播放声音文件有两种方法:(1)在Java的API中,Applet类提供了一个方法play(),它可以直接根据URL 地址来播放声音。
这个方法指定如下:Public void play(URL url);Public void play(URL url,string soundFile);在第一种方法的定义中,参数url是保存声音文件的绝对URL地址,即统一资源定位,它指定Web网上的一个声音文件;在第二种方法定义中,参数URL是保存声音文件的基地址,而参数soundFile是声音文件的文件名。
如果声音文件与Applet的HTML文件在相同的目录下,则可以通过使用getCodeBase()方法来获得该声音文件的基地址。
如果Applet本身的URL地址为“则语句:Play(gatCodeBase(),“”);等同于语句:Play(“;在程序编写过程中,若使用第一种方法定义,则将程序由一个服务器转移到另一服务器上或从一个目录转移到另一个目录下时,必须改变源代码中的URL地址:若使用第二种方法定义,即使用getCodeBase()方法来定位资源文件,则将程序由一个服务器转移到另一个服务器或从一个目录转移到另一个目录下时,不必改变源代码中的URL地址,而只需将声音文件与播放他的Java文件放在同一目录下即可。
Play()方法只能进行简单的播放,只能一次敬爱那个声音文件播放完,没有停止和连续播放的功能,所以,一般编写播放声音的程序时不采用此方法。
(2)利用Java中的AudioClip类对象播放声音文件。
AudioClip类提供了两种获取声音数据的方法,定义如下:AudioClip getAudioClip(URL url);AudioClip getAudioClip(URL url,String soundFile);它们的参数含义与以上相同。
使用时可按如下步骤。
○1)声明一个AudioClip类的对象,如:AudioClip audio;○2)使用getAudioClip()方法为AudioClip类的对象获得句柄,如:aud=getAudioClip(getCodeBase(),“”);或一次完成,如:AudioClip aud=getAudioClip(getCodeBase(),“”);或:AudioClip aud=getAudioClip(“HTTP3.2.13.2.23.2.3ava程序设计[M].北京:机械工业出版社,2005,10:309-312.[2]朱喜福,赵敏,夏齐霄,等.java程序设计[M].北京:人民邮电出版社,2005,2:272-290.[3] Liang 着,马海军,景丽等译.java编程原理与实践[M].北京:清华大学出版社2005,8:367-643.[4]徐明浩着,武转海,译.java编程基础应用与实例[M].北京:人民邮电出版社,2005,10:342-347.[6]王祖析.基于java技术的网络教学互动系统的构建[J].学术探讨,2009:74-78.[7]汤庸主编,冯至圣,申建芳等.java 程序设计与实践[J].北京:冶金工业出社,2003,1:208-212.[8] 马义德 ,周炜超 ,文芳 ,李柏年,李庚 . 基于SPCE061A 的声控 mp3播放器设计[J]. 电子设计,2009:217-301.[9] 周华中,李继凯.基于J2ME 流媒体播放器的模型设计[J].科技创新导报,2009:15-18.[10]春水东流. [J]. 电脑迷,2009,(7).。