Java_applet_音频播放器
java.applet

概述软件包类使用树已过时索引帮助Java TM 2 PlatformStandard Ed. 6上一个软件包下一个软件包框架无框架软件包 java.applet提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。
请参见:描述接口摘要AppletContext 此接口对应于 applet 的环境:包含 applet 的文档以及同一文档中的其他 applet。
AppletStub 当 applet 第一次被创建时,使用 applet 的 setStub 方法把applet stub 连接到它。
AudioClip AudioClip接口是用于播放音频剪辑的简单抽象。
类摘要Applet applet 是一种不能单独运行但可嵌入在其他应用程序中的小程序。
软件包 java.applet 的描述提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。
applet 框架包括两种实体:applet和applet 上下文。
applet 是一种可嵌入的窗体(参见 Panel 类),它带有几个 applet 上下文用来初始化、启动和终止applet 的额外方法。
applet 上下文是负责加载和运行 applet 的应用程序。
例如,applet 上下文可能是 Web 浏览器或 applet 开发环境。
从以下版本开始:JDK1.0概述软件包类使用树已过时索引帮助Java TM 2 PlatformStandard Ed. 6上一个软件包下一个软件包框架无框架提交错误或意见有关更多的 API 参考资料和开发人员文档,请参阅Java 2 SDK SE 开发人员文档。
该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。
版权所有 2004 Sun Microsystems, Inc. 保留所有权利。
请遵守许可证条款。
另请参阅文档重新分发政策。
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、⾸先获取⾳频⽂件的地址,然后通过IO流读取⾳频⽂件,加缓冲区,实现Player类的对象。
2、Player类主要⽤于播放器的初始化,以及通过它来实现⼀些⾳视频⽂件的播放,这个类需要⼿动去⽹上下载,然后添加路径到我们Eclipse的library中。
3、Player类有两种⽅法⽐较常⽤,play()⽅法和close()⽅法,前者⽤于启动⾳频⽂件,后者⽤于退出⾳频⽂件的播放,这两个⽅法我们在使⽤的时候需要注意,在整个⾳频播放的过程中,程序都会停留在play()⽅法中,类似于在读进度条,close()⽅法可以使得其退出播放,程序往下继续运⾏。
4、假设我们点击了开始按钮,那么程序就不会再去响应你的停⽌操作了,于是,我们可以通过多线程来实现这个启动和停⽌功能,让播放在⼀个线程⾥⾃⼰去执⾏。
5、那么循环呢?如何实现循环播放?答案是while循环,我们需要⼀个参数作为while的循环条件,类似于⼀个开关,只要为true,就⼀直循环播放。
6、我们在执⾏完⼀次播放后就不能再次对这个对象调⽤play()⽅法了,我们需要再次创建新的对象,那么我们要想关闭新的对象就必须让执⾏close()⽅法的对象是这个新的对象,我们每次新建相同名称的对象,player.close()执⾏后关闭的往往只能是最后的那个对象。
在启动和停⽌中我们看不出问题,但是当我们试图关闭在run⽅法⾥循环中的⾳频时,我们会发现停⽌不了!为什么?我们把对象传给线程类,close()⽅法依然可由此对象来执⾏,当他执⾏完play()⽅法后,我们new⼀个新的对象时,⼜开辟了⼀块新的内存空间存放这个对象的数据,再⽤原先的对象close()就不能到达效果了,即⽆法关闭这个⾳频。
解决办法:在每次new新对象后⽤set⽅法把对象传回去,我们可以理解为让close⽅法的调⽤者⼀直是这个新new的对象。
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 播放声音

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
cas = new ContinuousAudioDataStream(data);
// Play audio.
AudioPlayer.player.start(cas);
}
// 循环播放 停止
public void continuousStop() {
if (cas != null) {
music.play();
//MusicPlay mp = new MusicPlay(file.toURI().toURL());
//mp.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import .MalformedURLException;
import .URL;
import java.applet.Applet;
public class MusicPlay {
private AudioStream as; // 单次播放声音用
private ContinuousAudioDataStream cas;// 循环播放声音
java 游戏开发学习情境5音乐播放器设计

08游戏3-2
目标:
◦ 为游戏添加音效,能够用Java加载、播放游戏中的声 音文件,并按要求控制播放。
任务:
◦ 用Java设计一个播放多种声音的程序。为电梯模拟游 戏添加背景音乐。
目标与仸务
学习过程
教师 项目核心 提供: 声音播放案例 提供: 多个声音列表 播放关键代码 提供: 电梯游戏的 声音和界面 学生 模仿完成: 声音播放案例 协作完成: 多个声音列表 播放 协作完成: 电梯游戏的 音效处理
音文件的例子,运行结果如图所示:
步骤一:创建一个Applet小程序
(1)通过继承Applet类来创建一个有三个 按钮的容器 import java.applet.*; public class mAudio extends Applet{} (2)定义成员属性 包含3个成员属性,分别表示播放的声音的 URL相对地址,当前播放的音频流和声音播 放状态。
应用升级
(2)编写一个类,通过播放AudioClip对象 来产生声音。(学生自主完成)
功能扩展之案例二
// 控制播放停止的按钮 private Button playClip; private Button loopClip; private Button stopClip; private Button stopAllClips; // 跟踪当前哪些音频片段在播放 private boolean[] clipsPlaying;
应用升级
问题陈述: 在电梯系统的模拟程序里,公司要求在模拟中 加入声音。例如,当一个人走路时,应能听到 脚步声。每当按下戒者复位一个楼层按钮戒者 电梯按钮时,应当听到单击声。电梯到达时铃 声应当响起,且在门打开时戒者关上时,门应 当吱吱作响。最后,当电梯在楼层间运行时, 应播放“电梯音乐”。
Java实战音乐播放器

Java实战音乐播放器-播放音乐文件,包括基本的音频控制创建一个基本的音乐播放器是一个有趣而复杂的项目,它涉及到音频文件的处理、用户界面的设计以及音频控制功能的实现。
在这个实战博客中,我将向您展示如何使用Java来创建一个简单的音乐播放器。
我们将使用Java的Swing库来构建用户界面,以及Java的javax.sound.sampled库来处理音频文件和音频控制。
这个播放器将能够加载和播放本地音频文件,包括基本的音频控制功能,如播放、暂停、停止和音量调节。
步骤1:创建Java项目首先,创建一个新的Java项目,并添加Swing和javax.sound.sampled库的依赖。
您可以使用Eclipse、IntelliJ IDEA或任何其他Java集成开发环境来完成这些任务。
步骤2:创建用户界面在我们的音乐播放器中,我们需要一个用户界面来加载和控制音乐文件。
我们将使用Swing 来创建以下基本组件:文件选择器:用于选择要播放的音乐文件。
播放按钮:用于开始或继续播放音乐。
暂停按钮:用于暂停音乐的播放。
停止按钮:用于停止音乐的播放。
音量控制:用于调整音量。
下面是一个示例的用户界面代码:javaCopy codeimport javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class MusicPlayerGUI extends JFrame {private JButton playButton;private JButton pauseButton;private JButton stopButton;private JSlider volumeSlider;private JFileChooser fileChooser;public MusicPlayerGUI() {setTitle("音乐播放器");setSize(400, 200);setDefaultCloseOperation(EXIT_ON_CLOSE);setLayout(new FlowLayout());fileChooser = new JFileChooser();playButton = new JButton("播放");pauseButton = new JButton("暂停");stopButton = new JButton("停止");volumeSlider = new JSlider(JSlider.HORIZONTAL, 0, 100, 50);add(fileChooser);add(playButton);add(pauseButton);add(stopButton);add(volumeSlider);playButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 实现播放音乐的逻辑}});pauseButton.addActionListener(new ActionListener() { @Overridepublic void actionPerformed(ActionEvent e) {// 实现暂停音乐的逻辑}});stopButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 实现停止音乐的逻辑}});volumeSlider.addChangeListener(new ChangeListener() { @Overridepublic void stateChanged(ChangeEvent e) {// 实现音量调节的逻辑}});}public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {new MusicPlayerGUI().setVisible(true);}});}}步骤3:音频处理和控制接下来,我们需要添加音频处理和控制的逻辑。
Java实现声音播放程序

Java实现声⾳播放程序package newpackage1;import java.applet.AudioClip;import javax.swing.*;import java.awt.*;import java.awt.event.*;import .*;// 声⾳播放程序public class AudioPlayDemo extends JFrame implements ActionListener, ItemListener {boolean looping = false; //是否循环播放String[] choics = { "chimes.wav", "start.wav" }; //声⾳⽂件名数组URL file1 = getClass().getResource(choics[0]); //声⾳⽂件1URL file2 = getClass().getResource(choics[1]); //声⾳⽂件2AudioClip sound1 = java.applet.Applet.newAudioClip(file1); //声⾳剪辑对象1AudioClip sound2 = java.applet.Applet.newAudioClip(file2); //声⾳剪辑对象2AudioClip chosenClip = sound1; //选择的声⾳剪辑对象JComboBox jcbFiles = new JComboBox(choics); //⽂件选择组合框JButton playButton = new JButton("播放"); //播放按钮JButton loopButton = new JButton("循环播放"); //循环播放按钮JButton stopButton = new JButton("停⽌"); //停⽌播放按钮JLabel status = new JLabel("选择播放⽂件"); //状态栏标签JPanel controlPanel = new JPanel(); //控制⾯板⽤于包容按钮Container container = getContentPane(); //获得窗⼝内容窗格public AudioPlayDemo() { //构造器super("声⾳播放程序"); //调⽤⽗类构造器设置窗⼝标题栏jcbFiles.setSelectedIndex(0); //设置组合框选择项jcbFiles.addItemListener(this); //为播放按钮添加项⽬监听器//为播放按钮、循环播放按钮、停⽌播放按钮添加动作监听器playButton.addActionListener(this);loopButton.addActionListener(this);stopButton.addActionListener(this);stopButton.setEnabled(false); //设置停⽌播放按钮不可⽤//把播放按钮、循环播放按钮、停⽌播放按钮加⼊控制⾯板controlPanel.add(playButton);controlPanel.add(loopButton);controlPanel.add(stopButton);//把⽂件选择组合框、控制⾯板、状态栏标签加⼊到窗⼝内容窗格container.add(jcbFiles, BorderLayout.NORTH);container.add(controlPanel, BorderLayout.CENTER);container.add(status, BorderLayout.SOUTH);setSize(300, 130); //设置窗⼝⼤⼩setVisible(true); //设置窗⼝可视setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗⼝时退出程序}//⽂件选择组合框事件处理public void itemStateChanged(ItemEvent e) {if (jcbFiles.getSelectedIndex() == 0) {chosenClip = sound1;} else {chosenClip = sound2;}}//按钮事件处理public void actionPerformed(ActionEvent event) {if (chosenClip == null) {status.setText("声⾳未载⼊");return; //如果AudioClip对象为空,则直接返回}Object source = event.getSource(); //获取⽤户洗涤激活的按钮//播放按钮事件处理if (source == playButton) {stopButton.setEnabled(true); //设置停⽌播放按钮可⽤loopButton.setEnabled(true); //设置循环播放按钮可⽤chosenClip.play(); //播放选择的声⾳剪辑对象⼀次status.setText("正在播放"); //设置状态栏信息}//循环播放按钮事件处理if (source == loopButton) {looping = true;chosenClip.loop(); //循环播放选择的声⾳剪辑对象loopButton.setEnabled(false); //设置循环播放按钮不可⽤stopButton.setEnabled(true); //设置停⽌播放按钮可⽤status.setText("正在循环播放"); //设置状态栏信息}//停⽌播放按钮事件处理if (source == stopButton) {if (looping) {looping = false;chosenClip.stop(); //停⽌循环播放选择的声⾳剪辑对象loopButton.setEnabled(true); //设置循环播放按钮可⽤} else {chosenClip.stop(); //停⽌播放选择的声⾳剪辑对象}stopButton.setEnabled(false); //设置循环播放按钮可⽤status.setText("停⽌播放"); //设置状态栏信息}}public static void main(String s[]) {new AudioPlayDemo(); //创建AudioPlayDemo对象}}以上就是Java 实现声⾳播放程序的详细内容,更多关于Java 声⾳播放的资料请关注其它相关⽂章!。
一个简单的音乐播放器的java代码

import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.*;import javax.swing.*;import javax.media.bean.playerbean.*;import java.io.IOException;import javax.swing.JOptionPane;import java.awt.*;public class lyt extends JFrame implements Runnable { public MediaPlayer soumd1;private JButton playSound, stopsound, tjian,loopSound; private JMenuItem jmiOpen,jmiSave,jmiExit,jmiAbout; public JPanel jp1, jp2, jp3, jp4;public JList jl;private JButton last, next, stop;public Vector vector, mingcheng;boolean fo = false, geshi = false;JLabel jl1, jl2, sj1, sj2;JTextField jt1, jt2;int a = 0, b = 0, you = 1, mm = 0;public lyt() {super("200842018java音乐播放器");soumd1 = new MediaPlayer();Container c = getContentPane();c.setLayout(new FlowLayout());mingcheng = new Vector();jp1 = new JPanel();c.add(jp1);JMenuBar mb=new JMenuBar();setJMenuBar(mb);JMenu JMenu("文件");mb.add();JMenu helpMenu=new JMenu("帮助");mb.add(helpMenu);(jmiOpen=new JMenuItem("打开"));(jmiSave=new JMenuItem("播放"));helpMenu.add(jmiAbout=new JMenuItem("关于"));JPanel jp2 = new JPanel();jp2.setLayout(new FlowLayout());jp2.add(last = new JButton("后退"));jp2.add(playSound = new JButton("播放"));jp2.add(tjian = new JButton("添加"));jp2.add(next = new JButton("前进"));jp2.add(stopsound = new JButton("停止"));jp2.add(loopSound= new JButton("循环"));getContentPane().add(jp2, BorderLayout.SOUTH);jp2 = new JPanel();jp2.add(playSound);jp2.add(stopsound);c.add(jp2);jp4 = new JPanel();sj1 = new JLabel();sj2 = new JLabel();jp4.add(sj1);jp4.add(sj2);c.add(jp4);vector = new Vector();jl = new JList(mingcheng);jl.setVisibleRowCount(4);jl.setFixedCellHeight(30);jl.setFixedCellWidth(265);jl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) ;c.add(new JScrollPane(jl));jp3 = new JPanel();jp3.add(tjian);c.add(jp3);try {String s = "d:\\music.txt";ObjectInputStream input = new ObjectInputStream( new (s));lujin a1 = (lujin) input.readObject();mingcheng = a1.b;vector = a1.a;jl.setListData(mingcheng);}catch (Exception e) {System.out.println("D盘没有保存音乐文件");}jmiOpen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) {J = new J();.set(J);(new File("."));.set(newjavax.swing.() {public boolean accept() {String name = ().toLowerCase();return name.endsWith(".mp3")|| ();}public String getDescription() {return "音乐文件(*.mp3)";}});if ((lyt.this) ==J) {String =().getAbsolutePath();vector.add();StringBuffer buffer = daoxu();mingcheng.add(buffer);}}});tjian.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent event) {J = new J();.set(J);(newFile("."));.set(newjavax.swing.() {public boolean accept() {String name =().toLowerCase();return name.endsWith(".mp3")|| ();}public String getDescription() {return "音乐文件(*.mp3)";}});if ((lyt.this) ==J) {String =().getAbsolutePath();vector.add();StringBuffer buffer = daoxu();mingcheng.add(buffer);}}});jmiSave.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if (jl.getSelectedIndex() >= 0) {String yy = (String)vector.get(jl.getSelectedIndex());= new );if (ff.exists()) {if (yy.matches("[\\S\\s]*.mp3") || yy.matches("[\\S\\s]*.mp3")) {if (soumd1 != null) {a = 0;b = 0;you = 0;soumd1.stop();}soumd1.setMediaLocation("file:/" + yy);fo = true;soumd1.start();geshi = true;try {Thread.sleep(500);}catch (InterruptedException eee) {}}elseJOptionPane.showMessageDialog(null,"无法播放");}elseJOptionPane.showMessageDialog(null,"此歌曲已经存在");}elseJOptionPane.showMessageDialog(null, "请选择音乐文件");}});loopSound.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if (jl.getSelectedIndex() >= 0) {String yy = (String) vector.get(jl.getSelectedIndex());= new );if (ff.exists()) {if (yy.matches("[\\S\\s]*.mp3")|| yy.matches("[\\S\\s]*.MP3")) {if (soumd1 != null) {a = 0;b = 0;you = 0;soumd1.stop();}soumd1.setMediaLocation("file:/" + yy);fo = true;soumd1.start();geshi=true;try {Thread.sleep(500);} catch (InterruptedException we) {}} elseJOptionPane.showMessageDialog(null,"不支持此格式,无法播放");} elseJOptionPane.showMessageDialog(null,"此歌曲文件已经存在");}elseJOptionPane.showMessageDialog(null, "请选择音乐文件");}});playSound.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if (jl.getSelectedIndex() >= 0) {String yy = (String)vector.get(jl.getSelectedIndex());= new );if (ff.exists()) {if (yy.matches("[\\S\\s]*.mp3") ||yy.matches("[\\S\\s]*.mp3")) {if (soumd1 != null) {a = 0;b = 0;you = 0;soumd1.stop();}soumd1.setMediaLocation("file:/" + yy);fo = true;soumd1.start();geshi = true;try {Thread.sleep(500);}catch (InterruptedException eee) {}}elseJOptionPane.showMessageDialog(null,"无法播放");}elseJOptionPane.showMessageDialog(null,"此歌曲已经存在");}elseJOptionPane.showMessageDialog(null, "请选择音乐文件");}});stopsound.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {a = 0;b = 0;you = 0;mm = 0;geshi = false;fo = false;sj1.setText(null);sj2.setText(null);if (jl.getSelectedIndex() >= 0)soumd1.stop();}});jl.addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent event) {if (event.getClickCount() == 2) {if (jl.getSelectedIndex() >= 0) {String yy = (String)vector.get(jl.getSelectedIndex());= new );if (ff.exists()) {if (yy.matches("[\\S\\s]*.mp3") ||yy.matches("[\\S\\s]*.mp3")) {if (soumd1 != null) {a = 0;b = 0;you = 0;soumd1.stop();}soumd1.setMediaLocation("file:/" + yy);fo = true;soumd1.start();geshi = true;try {Thread.sleep(500);}catch (InterruptedException e) {}}elseJOptionPane.showMessageDialog(null,"无法播放");}elseJOptionPane.showMessageDialog(null,"此歌曲已经存在");}}if (event.isMetaDown()) {if (jl.getSelectedIndex() >= 0) {int a = jl.getSelectedIndex();jt1.setText(mingcheng.get(jl.getSelectedIndex()) + "");jt2.setText(vector.get(jl.getSelectedIndex()) + "");}}}});addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {String s = "d:\\music.txt";mmm(vector, mingcheng, s);System.exit(0);}});setSize(370, 270);setVisible(true);}public void run() {while (true) {Date now = new Date();try {Thread.sleep(1000);}catch (InterruptedException e) {}if (geshi) {you = (int) soumd1.getMediaTime().getSeconds();mm = you % 60;if (you != 0)if (you % 60 == 0) {b++;}sj1.setText(b + ":" + mm);}}}public StringBuffer daoxu(String ) {String mc = "";for (int i = (); i >= 1; i--) {if ((i - 1) == '\\')break;mc += (i - 1);}StringBuffer buffer = new StringBuffer(mc);StringBuffer mm = buffer.reverse();return mm;}public void mmm(Vector vector, Vector mingcheng, String lujin) {lujin a = new lujin(vector, mingcheng);try {ObjectOutputStream output = new ObjectOutputStream(new (lujin));output.writeObject(a);output.flush();output.close();}catch (Exception e) {}}public static void main(String agrs[]) {lyt s = new lyt();Thread t1 = new Thread(s);t1.start();s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }class lujinimplements Serializable {Vector a = new Vector();Vector b = new Vector();public lujin(Vector vector, Vector mingcheng) {a = vector;b = mingcheng;}}}。
java 实现音乐播放器的简单实例

java 实现音乐播放器的简单实例这篇文章主要介绍了java 实现音乐播放器的简单实例的相关资料,希望通过本文能帮助到大家,实现这样的功能,需要的朋友可以参考下:java 实现音乐播放器的简单实例实现效果图:代码如下:package cn.hncu.games;import java.applet.Applet;import java.applet.AudioClip;import java.awt.Color;import java.awt.Font;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.io.File;import .URL;import javax.swing.DefaultListModel;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JList;import javax.swing.ListModel;import javax.swing.event.ListSelectionEvent;import javax.swing.event.ListSelectionListener;public class MusicPlayer extends JFrame{//显示(歌曲名称)播放状态的标签JLabel songNameLabel = null;//四个播放功能键按钮JButton btnLast = null; //上一曲JButton btnPlay = null; //播放/停止JButton btnNext = null; //下一曲JButton btnLoop = null; //循环//歌曲列表JList songsList = null;AudioClip songs[] = null;AudioClip currentSong = null;int index=0; //当前歌曲在JList中的位置(序号)//歌曲文件名数组---StringString[]strSongNames={ "song1.wav","song2.wav","song3.wav","song4.wav","song5 .wav","song6.wav" };final String DIR="songs\\";//播放音乐的线程Thread playerThread=null;boolean isPlayOrStop = true;//true代表播放状态boolean isLoop = false; //是否为循环状态public MusicPlayer() {super("音乐播放器");setBounds(300, 50, 310, 500);setDefaultCloseOperation(EXIT_ON_CLOSE);setLayout(null);//hello();//显示(歌曲名称)播放状态的标签songNameLabel = new JLabel();Font songNameFont = new Font("黑体",Font.ITALIC,18); songNameLabel.setFont(songNameFont);songNameLabel.setText("我的音乐播放器");songNameLabel.setBounds(10, 10, 300, 40);getContentPane().add(songNameLabel);//四个播放功能键按钮btnLast = new JButton();btnPlay = new JButton();btnNext = new JButton();btnLoop = new JButton();//位置大小btnLast.setBounds(10, 70, 50, 40);btnPlay.setBounds(70, 70, 50, 40);btnNext.setBounds(130, 70, 50, 40);btnLoop.setBounds(190, 70, 50, 40);//设置图片btnLast.setIcon( new ImageIcon("images2/1.png"));btnPlay.setIcon( new ImageIcon("images2/2.png"));btnNext.setIcon( new ImageIcon("images2/3.png"));btnLoop.setIcon( new ImageIcon("images2/4.png"));//添加到框架getContentPane().add(btnLast);getContentPane().add(btnPlay);getContentPane().add(btnNext);getContentPane().add(btnLoop);//添加监听MyMouseListener mml = new MyMouseListener();btnLast.addMouseListener(mml);btnPlay.addMouseListener(mml);btnNext.addMouseListener(mml);btnLoop.addMouseListener(mml);//歌曲列表的标题JLabel listLabel = new JLabel("播放列表");listLabel.setBounds(10, 120, 100, 30);Font listLabelFont = new Font("黑体",Font.BOLD,16);listLabel.setFont(listLabelFont);getContentPane().add(listLabel);//歌曲列表/*songsList = new JList();songsList.setBounds(10, 150, 250, 300);songsList.setBackground(Color.CYAN);//把所有歌曲名逐个添加到List中//songsList.setListData(strSongNames);for(int i=0;i<strSongNames.length;i++){DefaultListModel dm = (DefaultListModel)songsList.getModel(); dm.add(i,strSongNames[i]);}getContentPane().add(songsList);*/DefaultListModel lm = new DefaultListModel();songsList = new JList(lm);songsList.setBounds(10, 150, 250, 300);songsList.setBackground(Color.CYAN);//把所有歌曲名逐个添加到List中//songsList.setListData(strSongNames);songs = new AudioClip[strSongNames.length];for(int i=0;i<strSongNames.length;i++){lm.add(i,strSongNames[i]);songs[i] = loadSound(strSongNames[i]);}getContentPane().add(songsList);//lm.remove(3);//对JList控件的监听技术实现songsList.addListSelectionListener(new ListSelectionListener() { @Overridepublic void valueChanged(ListSelectionEvent e) {currentSong.stop();index = songsList.getSelectedIndex();isPlayOrStop = true;playerThread = new Thread( new MusicRun() );playerThread.start();}});//单开一个线程,专用于播放音乐playerThread = new Thread( new MusicRun() );playerThread.start();setVisible(true);}private AudioClip loadSound(String fileName) {try {URL url = new URL("file:songs\\"+fileName);AudioClip au = Applet.newAudioClip(url);return au;} catch (Exception e) {e.printStackTrace();}return null;}//讲解音乐播放的基本技术private void hello() {try {File f = new File("songs\\song1.wav");URL url = f.toURI().toURL();//URL url = new URL("file:songs\\song1.wav"); AudioClip au = Applet.newAudioClip(url);au.play();//au.loop();//au.stop();} catch (Exception e) {e.printStackTrace();}}private class MyMouseListener extends MouseAdapter{ @Overridepublic void mouseClicked(MouseEvent e) {JButton btn = (JButton) e.getSource();currentSong.stop();if(btn==btnPlay){isPlayOrStop = !isPlayOrStop;}else if(btn==btnLast){index--;if(index<0){index = strSongNames.length-1;}//isPlayOrStop=true;}else if(btn==btnNext){index++;index = index%strSongNames.length;}else if(btn==btnLoop){isLoop = !isLoop;}if(isPlayOrStop){//播放playerThread = new Thread( new MusicRun() );playerThread.start();}else{//停止songsList.setSelectedIndex(index);songNameLabel.setText("停止播放:"+strSongNames[index]); btnPlay.setIcon( new ImageIcon("images2/2.png"));}}}private class MusicRun implements Runnable{@Overridepublic void run() {currentSong = songs[index];if(isLoop){currentSong.loop();songNameLabel.setText("循环播放:"+strSongNames[index]); }if (isPlayOrStop) {currentSong.play();}//在播放列表中选定当前歌曲songsList.setSelectedIndex(index);//把播放按钮的图标切换成“停止”btnPlay.setIcon( new ImageIcon("images2/5.png"));if(!isLoop){songNameLabel.setText("正在播放:"+strSongNames[index]); }}}public static void main(String[] args) {new MusicPlayer();}}。
基于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的音乐播放器的设计摘要:在信息,技术高速发展的今天,多媒体技术也越来越受到人们的重视。
java 播放声音代码

import java.applet.*;import java.awt.*;import java.awt.event.*;import .*;public class Sound extends Appletimplements ActionListener {String onceFile = "file:/e:/myjava/eg0910/src/1.aif";String loopFile = "file:/e:/myjava/eg0910/src/1.mid";AudioClip onceClip;AudioClip loopClip;Button playOnce;Button stopOnce;Button startLoop;Button stopLoop;boolean looping = false;boolean playing = false;public void init() {try{onceClip= getAudioClip(new URL(onceFile));loopClip = getAudioClip(new URL(loopFile));}catch(MalformedURLException e){}playOnce = new Button("Play aif");stopOnce = new Button("Stop aif");stopOnce.setEnabled(false);playOnce.addActionListener(this);add(playOnce);stopOnce.addActionListener(this) ;add(stopOnce);startLoop = new Button("Loop midi");stopLoop = new Button("Stop Loop");stopLoop.setEnabled(false);startLoop.addActionListener(this);add(startLoop);stopLoop.addActionListener(this);add(stopLoop);}public void stop() {if (playing) {onceClip.stop(); //暂停播放}if (looping) {loopClip.stop(); //暂停循环播放}}public void start() {if (playing){onceClip.play(); //重新开始播放}if (looping) {loopClip.loop(); //重新开始循环播放}}public void actionPerformed(ActionEvent event) {Object source = event.getSource();//响应play Button事件if (source == playOnce) {if (onceClip != null) {playing = true;// Thread t = new Thread(new t1());// t.start();//播放音乐文件onceClip.loop();//play按钮变灰,stop按钮可用stopOnce.setEnabled(true);playOnce.setEnabled(false);showStatus("Playing sound " + onceFile + ".");} else {showStatus("Sound " + onceFile + " not loaded yet.");}return;}//响应stop Button事件if (source == stopOnce) {if (playing) {playing = false;//暂停播放onceClip.stop();//play按钮可用,stop按钮变灰playOnce.setEnabled(true);stopOnce.setEnabled(false);}showStatus("Stopped playing sound " + onceFile + ".");return;}//响应loop Button事件if (source == startLoop) {if (loopClip != null) {looping = true;//开始声音的循环播放loopClip.loop();//loop按钮可用,stop loop按钮变灰stopLoop.setEnabled(true);startLoop.setEnabled(false);showStatus("Playing sound " + loopFile + " continuously.");} else {showStatus("Sound " + loopFile + " not loaded yet.");}return;}//响应stop loop Button事件if (source == stopLoop) {if (looping) {looping = false;//停止声音的循环播放loopClip.stop();//loop按钮变灰,stop loop按钮可用startLoop.setEnabled(true);stopLoop.setEnabled(false);}showStatus("Stopped playing sound " + loopFile + ".");return;}}}如有侵权请联系告知删除,感谢你们的配合!。
java 播放音频

12.2.1 播放音频4.程序模板按模板要求,将【代码1】~【代码4】替换为Java程序代码。
PlayAudioClip.javaimport java.applet.*;import java.awt.*;import java.awt.event.*;public class PlayAudioClip extends Applet implements ActionListener,Runnable,ItemListener{AudioClip clip;Choice choice;TextField text;Thread thread;String item=null;Button button_play,button_loop,button_stop;public void init(){choice=new Choice();thread=new Thread(this);int N=Integer.parseInt(getParameter("总数"));for(int i=1;i<=N;i++){choice.add(getParameter(String.valueOf(i)));}button_play=new Button("开始播放");button_loop=new Button("循环播放");button_stop=new Button("停止播放");text=new TextField(12);button_play.addActionListener(this);button_stop.addActionListener(this);button_loop.addActionListener(this);choice.addItemListener(this);add(choice);add(button_play);add(button_loop);add(button_stop);add(text);button_play.setEnabled(false);button_loop.setEnabled(false);}public void itemStateChanged(ItemEvent e){item=choice.getSelectedItem();int index=item.indexOf(":");item=item.substring(index+1).trim();if(!(thread.isAlive())){thread=new Thread(this);}try {thread.start();}catch(Exception exp){text.setText("正在下载音频文件");}}public void stop(){【代码1】// clip停止播放}public void actionPerformed(ActionEvent e){if(e.getSource()==button_play){【代码2】// clip开始播放,但不循环播放}else if(e.getSource()==button_loop){【代码3】// clip开始播放,并且循环播放}else if(e.getSource()==button_stop){【代码4】// clip停止播放button_play.setEnabled(false);button_loop.setEnabled(false);}}public void run(){clip=getAudioClip(getCodeBase(),item);text.setText("请稍等...");if(clip!=null){button_play.setEnabled(true);button_loop.setEnabled(true);text.setText("您可以播放了");}}}12.2.2 绘制五角星4.程序模板按模板要求,将【代码1】替换为Java程序代码。
java播放音频的方法

java播放音频的方法java播放音频的方法Java写一个视频播放器,在“Java通过java.applet.AudioClip接口播放简短的音频片断”演示了如何用Java API 来播放音频剪辑片断,如果使用上例中的程序来播放较大的声音文件(当然格式必须支持的),程序不会响应,根本不能得到声音。
这是由于java.applet.AudioClip 对象不能容纳大量的音频数据。
大家知道java 播放音频吗?下面我们就给大家详细介绍一下吧!Applet能通过使用java.applet包中的AudioClip接口播放音频。
AudioClip 接口定义了三个方法:public void play(): 从一开始播放音频片段一次。
public void loop(): 循环播放音频片段public void stop(): 停止播放音频片段为了得到AudioClip对象,你必须调用Applet类的getAudioClip()方法。
无论URL指向的是否是一个真实的音频文件,该方法都会立即返回结果。
直到要播放音频文件时,该文件才会下载下来。
如下实例演示了播放音频的所有步骤:import java.applet.*;import java.awt.*;import java.*;public classAudioDemo extends Applet{ private AudioClip clip; private AppletContext context; public void init() { context = this.getAppletContext();String audioURL = this.getParameter(“audio”); if(audioURL == null) { audioURL = “default.au”; } try { URL url = new URL(this.getDocumentBase(), audioURL); clip = context.getAudioClip(url);}catch(MalformedURLException e) { e.printStackTrace();。
java播放声音的方法

课程设计用的方法import java.applet.AudioClip;import java.io.*;import java.applet.Applet;import java.awt.Frame;import .MalformedURLException;import .URL;public class Music extends Frame{public static StringimagePath=System.getProperty("user.dir")+"/Music/";public Music(){t ry {URL cb;//File f = new File(imagePath+"mario.midi");//File f = new File(imagePath+"1000.ogg");File f = new File(imagePath+"失败音效.wav");//File f = new File("d:\\铃声.mp3");cb = f.toURL();AudioClip aau;aau = Applet.newAudioClip(cb);aau.play();//循环播放 aau.play() 单曲 aau.stop()停止播放//aau.loop();} catch (MalformedURLException e) {e.printStackTrace();}}public static void main(String args[]) {n ew Music();}}因为最近在研究java的语音聊天问题,所以刚刚好写了几个,给你三个播放的方法,分为三个类,建议采用第二或第三个:package org.bling.music;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import sun.audio.AudioPlayer;public class MusicTest2 {private InputStream inputStream = null;private String file = "./intel.wav";public MusicTest2(){}public void play() throws IOException{inputStream = new FileInputStream(new File(file)); AudioPlayer.player.start(inputStream);}public static void main(String[] args) {try {new MusicTest2().play();} catch (IOException e) {e.printStackTrace();}}}---------------------------------------------------------------- package org.bling.music;import java.io.File;import java.io.IOException;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSystem;import javax.sound.sampled.DataLine;import javax.sound.sampled.LineUnavailableException;import javax.sound.sampled.SourceDataLine;import javax.sound.sampled.UnsupportedAudioFileException;public class MusicTest {private AudioFormat audioFormat = null;private SourceDataLine sourceDataLine = null;private dataLine_info = null;private String file = "./intel.wav";private AudioInputStream audioInputStream = null;public MusicTest() throws LineUnavailableException, UnsupportedAudioFileException, IOException{audioInputStream = AudioSystem.getAudioInputStream(new File(file)); audioFormat = audioInputStream.getFormat();dataLine_info = new (SourceDataLine.class,audioFormat); sourceDataLine = (SourceDataLine)AudioSystem.getLine(dataLine_info); }public void play() throws IOException, LineUnavailableException{byte[] b = new byte[1024];int len = 0;sourceDataLine.open(audioFormat, 1024);sourceDataLine.start();while ((len = audioInputStream.read(b)) > 0){sourceDataLine.write(b, 0, len);}audioInputStream.close();sourceDataLine.drain();sourceDataLine.close();}public static void main(String[] args) {try {new MusicTest().play();} catch (IOException e) {e.printStackTrace();} catch (LineUnavailableException e) {e.printStackTrace();} catch (UnsupportedAudioFileException e) {e.printStackTrace();}}}-----------------------------------------------------------------package org.bling.music;import java.io.File;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSystem;import javax.sound.sampled.DataLine;import javax.sound.sampled.SourceDataLine;public class PlayTest {/*** @param args*/public static void main(String[] args) {try {AudioInputStream ais = AudioSystem.getAudioInputStream(newFile("intel.wav"));// 获得音频输入流AudioFormat baseFormat = ais.getFormat();// 指定声音流中特定数据安排System.out.println("baseFormat="+baseFormat); info = new (SourceDataLine.class,baseFormat); System.out.println("info="+info);SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);// 从混频器获得源数据行System.out.println("line="+line);line.open(baseFormat);// 打开具有指定格式的行,这样可使行获得所有所需的系统资源并变得可操作。
JAVA Applet多媒体播放程序设计

JAVA Applet多媒体播放程序设计
刘黎明;党东耀
【期刊名称】《计算机应用》
【年(卷),期】2000(000)0S1
【摘要】:Java媒体框架是面向JavaApplication和JavaApplet的集成媒体数据类型的应用程序接口(API) ,利用Java媒体框架开发嵌入HTML的JavaApplet,以播放多种音频、视频格式文件 (如MPEG -1,MPEG -
2 ,QuickTime ,AVI ,WAV ,AU ,andMIDI等 ) ,进行基于校园网的多媒体教学。
【总页数】2页(P)
【作者】刘黎明;党东耀
【作者单位】南阳理工学院;南阳电视台
【正文语种】中文
【中图分类】TP311
【相关文献】
1.Java与Java Applet和JavaScript间的混编方法 [J], 侯青;李磊
2.用Java Applet制作多媒体课件 [J], 李聪明
3.探讨Java、Java Applet与Java Script间方法与变量的互访 [J], 潘娅;王欣;景玲;李军
4.运用Java Applet制作多媒体网页的方法和实例 [J], 傅献祯
5.Applet与Javascript的对话——让你的Javascript代码和Java Applet融洽地合作 [J], 陶国强; 罗小虎
因版权原因,仅展示原文概要,查看原文内容请购买。
Java音频播放器详细设计说明书

JUST音频播放器详细设计说明书1、导言本文档以《JUST音频播放器概要设计说明书》作为基准,对智能试题库的功能实现细节进行进一步的扩充。
旨在具体介绍系统每一模块的实现设计以及模块间的接口实现设计,以便于后期系统的实现、测试、维护以及版本升级等。
本文档用于软件设计阶段的详细设计,它依据的基线是《JUST音频播放器概要设计说明书》,它的下游是源程序清单及单元测试计划,并为单元测试报告提供测试依据。
术语定义总体结构:软件系统的总体逻辑结构。
本系统采用面向对象的设计方法设计系统。
概念数据模型:关系数据库的逻辑设计模型,主要表现为E-R图。
物理数据模型:关系数据库的物理设计模型。
1.4参考资料【1】《JUST音频播放器需求规格说明书》。
【2】《软件工程实践教程》,赵池龙等编著,电子工业出版社,2007年1月。
【3】《UML参考手册》,(美)兰博等编著,机械工业出版社,2001年1月。
【1】《JUST音频播放器需求规格说明书》。
【2】《JUST音频播放器概要设计说明书》。
【3】《JUST音频播放器详细设计说明书》。
【4】源程序清单列表。
1.6版本更新记录如表1-9所示。
表1-10 版本更新记录2、系统设计与实现总体设计根据《JUST音频播放器需求规格说明书》和《JUST音频播放器概要设计说明书》,并且播放器是通过媒体控制界面来实现所有功能,因此我们使用边界类,控制类和实体类来实现设计该系统;并利用日志文件和配置文件来保存播放器的信息。
2音频处理器子系统播放器的基本控制类这里使用了一个Java开源社区的项目的jlgui一个音频处理API,它的类结构是2播放器基本控制子系统边界控制类2.1.3播放列表管理子系统边界控制类播放器主控子系统加载播放器界面所涉及的类3播放器动态建模播放器的状态图播放文件时序图播放歌曲的活动图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1课题需求分析在Java2平台出现前,Java语言只能处理电话音质的声音,以单声道8KHz的采样频率存储为u-lawAU文件。
Java2平台增加了AIFF、WAV以及三种MIDI文件类型的支持。
所支持的三种MIDI文件格式为MIDI文件类型0、MIDI文件类型1以及RMFo2 课程解决方案本程序有三个文件:是主文件,中的AppletSoundLoader类继承Thrwad负责为声音文件获得AudioClip对象并把它加到AppletSoundList中去;中定义的AppletSoundList 继承自Hashtable,提供getClip (String)和putClip(AudioClip,String)方法,分别从哈希表中取得AudioClip对象和放置AudioClip对象。
其结构是AppletSoundList中用AppletSoundLoader来装载制定URL的声音文件,AppletSoundLoader 负责为声音文件产生AudioClip对象并添加到AppletSoundList中。
在SoundApplet 中则只是利用AppletSoundList 类。
3 课题实现主要的声音文件类型如下:AU (扩展名为AU或SND):适用于短的声音文件,为Solaris和下一代机器的通用文件格式,也是Java平台的标准音频格式。
AU类型文件使用的三种音频格式为:8位u-law类型(通常采用频率为8KHz), 8位线性类型以及16位线性类型。
WAV (扩展名为WAV):由Microsoft和IBM共同开发,对WAV的支持已经被加进Windows95并且被延伸到Windows98。
WAV文件能存储各种格式包括u-law、a-law和PCM (线性)数据。
它们儿乎能被所有支持声音的Windows应用程序播放。
AIFF (扩展名为AIF或IEF)音频互换文件格式是为Macintosh计算机和Silicon Graphics (SGI)计算机所共用的标准音频文件格式。
AIFF和AIFF-C儿乎是相同的,除了后者支持例如u-law 和IMA ADPCM类型的压缩。
MIDI (扩展名为MID)乐器数字接口MIDI是为音乐制造业所认可的标准,主要用于控制诸如合成器声卡之类的设备。
Java声音引擎支持两种MIDI文件类型:MIDI类型0文件-包含仅仅一个序列,所有相关的乐器部分被包含在同一个逻辑“磁道”上。
MIDI类型1文件-包含多重的“磁道”使得不同的乐器被逻辑地分开,从而使对声音的操作和重组更加容易。
RMF (扩展名为RMF)混合音乐格式是山Beatnik设计出来的混合文件类型,通过交互设定将MIDI和音频采样封装在一起。
RMF好比是一个所有音乐相关文件的容器。
RMF也包含对有关版权的详细文件说明的支持。
RMF文件可以包含多个由不同艺术家创作的存储为MIDI类型或音频采样类型的作品,每个都关联着相关的版权信息。
Java中用于播放声音的AudioClip接口提供下列机能:播放、循环、停止。
恢复和播放声音最简单的方法是通过Applet类的play ()方法。
调用play ()方法有如下两种方式:play ()带有一个参数,一个URL对象,装载并演奏储存在URL处的声音片段。
Play ()带有两个参数,基本URL和文件夹路径名,装载并演奏声音文件。
第一参数经常是对getCodeBase()或DocumentBase ()的调用。
play () 一旦被调用立刻开始恢复和播放声音。
如果声音文件不能被查找,将不会有出错信息,仅仅是沉默。
启动和停止声音文件,或循环播放,必须用applet的getAudioClip方法把它装载进入AudioClip对象,类似上面play ()方法的参数,getAudioClip方法要用一个或两个参数,当作播放的指示。
第一个或唯一的一个参数是URL参数,用来指示声音文件的位置,第二参数是文件夹路径指针。
代码如下:importimportimport class SoundApplet extends J Applet implements ActionListener,ItemListener { AppletSoundList soundList;String auFile = M sound\\H;String aiffFile = n sound\\flute+hrn+H;String midiFile = "soundW";String rnifFile = H sound\V;String wavFile = "soundW";String chosenFile;AudioClip onceClip, loopClip;JComboBox formats;JButton playButton, loopButton, stopButton; boolean looping = false;public void init() {String [] fileTypes = {auFile,aiffFile,midiFile, rnifFile, wavFile);formats = new JComboBox(fileTypes);(0);Loopdd(controlPanel);startLoadingSounds();}public void iteniStateChanged(ItemEvent e) {chosenFile = (String)();(chosenFile);}void startLoadingSounds() {onceCIip = (chosenFile);0;(true);showStatus(H Playing sound n + chosenFile + H.H);if (onceCIip == null) {showStatus(H Sound ” + chosenFile + n not loaded yet.n);return;)if (loopClip == null) { showStatus(H Sound H + chosenFile + H not loaded yet.”);} return;}■return;}}}•importimport AppletSoundLoader extends Thread {J Applet applet;AppletSoundList soundList;URL baseURL;String relativeURL:public AppletSoundLoader(JApplet applet,AppletSoundList soundList,URL baseURL,String relativeURL) {=applet;=soundList;=baseURL:=relativeURL:setPriority(MIN_PRIORITY); start();}public void run() {AudioClip audioClip = (baseURL. relativeURL);(audioClip, relativeURL);}}■importimport and holds a bunch of audio files whose locations are specified class AppletSoundList extends { J Applet applet;URL baseURL;public AppIetSoundList(JApplet applet. URL baseURL) { super(5); 〃初始化哈希表的容疑为5 =applet;=baseURL:}public void startLoading(String relativeURL) { new AppletSoundLoader(applet, this,baseURL, relativeURL):}//通过相对URL从哈希表中获得AudioClip public AudioClip getClip(String relativeURL) { return (AudioClip)get(relativeURL);}//将AudioClip对象放进哈希表,键值为relativeURL public void putClip(AudioClip clip. String relativeURL) { put(relativeURL. clip);}}4课题运行及调试运行结果入下图所示:按下“Loop”时,显示如下图,自动循环播放文件。
图界面图按下"Stop",音乐播放暂停,显示如下图:图暂停播放图5小结山于编程经验的不足和知识水平有限,存在的问题比较多,播放器的功能太简单, 可进行的操作太少,一些功能在实现起来也不太理想。
这些都有待进一步改善。
在本项U开发的过程中,我学习了很多有关的知识。
一些以前没有学得很杂实的课程的内容,山于需要在实践中运用,刚开始我也感到很头痛。
但回过头再去看有关的教科书,经过一段时间的钻研,对与这些知识点的相关的背景,学习起来也越来越有兴趣。
另外我还充分体会了从事软件开发工作需要特别严谨认真的态度和作风,一点都马虎不得。
每一个细微的细节都必须十分的注意,如果不认真思考决策,就会出现或大或小的错误,如果早期的错误隐藏下来,对后面的工作影响就会很大,甚至有时要推倒很多前面做的工作重来。
山于我的知识浅薄,经验不足及阅历颇浅,因此,在该播放器的设计方面还有很多不足,比如功能过少,界面不够醒LI等问题,我会在学习过程中,根据设计的具体要求不断的修改,完善,争取使该播放器慢慢趋向完美。