Java_applet_音频播放器

合集下载

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⾳乐播放器实现代码本⽂实例为⼤家分享了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实现⾳频⽂件播放功能本⽂实例为⼤家分享了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及Java web应用开发》实验报告设计题目: Java音乐播放器专业计算机信息管理班级 1班****2014年12月24 日import java*.media.ControllerEvent;import java*.media.ControllerListener;import java*.media.EndOfMediaEvent;import java*.media.PrefetchpleteEvent;import java*.media.RealizepleteEvent;import java*.media.*;import java*.swing.*;import java.awt.*;import java.awt.event.*;public class MediaPlayer e*tends JFrame implements ActionListener, ItemListener, ControllerListener {String title;Player player;boolean first = true, loop = false;ponent vc, cc;String currentDirectory=null;// 构造函数,其中包括了设置响应窗口事件的监听器。

MediaPlayer(String title) {super(title);/* 关闭按钮的实现。

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

java 播放声音

java 播放声音
as = new AudioStream(url.openStream());
} 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音乐播放器设计

java 游戏开发学习情境5音乐播放器设计
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来创建一个简单的音乐播放器。

我们将使用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实现声音播放程序

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 声⾳播放的资料请关注其它相关⽂章!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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等问题,我会在学习过程中,根据设计的具体要求不断的修改,完善,争取使该播放器慢慢趋向完美。

相关文档
最新文档