首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

java播发音频

2013-07-08 
java播放音频各位老大,帮小弟个忙,小弟想用java在页面上播放音频(wav/amr/MID)格式。小弟 用的是sun.audio

java播放音频
各位老大,帮小弟个忙,小弟想用java在页面上播放音频(wav/amr/MID)格式。
小弟 用的是sun.audio的API
代码如下:FileInputStream fileau = new FileInputStream(new File(canshu));   
try{
    AudioStream as=new AudioStream(fileau);       AudioPlayer.player.start(as);   
}catch(Exception e){
e.printStackTrace();
}
但是在执行到红色时报错:java.io.EOFException
        at java.io.DataInputStream.readInt(Unknown Source)
        at com.sun.media.sound.WaveFileReader.getFMT(Unknown Source)
        at com.sun.media.sound.WaveFileReader.getAudioInputStream(Unknown Source
)
        at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
        at sun.audio.AudioStream.<init>(Unknown Source)
        at org.apache.jsp.manager.mms.yinpin_jsp._jspService(yinpin_jsp.java:64)

        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper
.java:393)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:3
20)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
        at com.psb.filter.chinese.doFilter(chinese.java:19)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:230)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV


alve.java:175)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:104)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:261)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
ss(Http11Protocol.java:581)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:44
7)
        at java.lang.Thread.run(Unknown Source)
各位老大,帮着看下。
[解决办法]
给你找了一个,我已测试


package com.webapp.common.util;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.ControllerClosedEvent;
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.RealizeCompleteEvent;
import javax.media.Time;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
/**
 * 用Java的JMF实现一个媒体播放器,可以播放音频和视频
 */
public class JMFMediaPlayer extends JFrame implements ActionListener,


  ControllerListener, ItemListener {
 // JMF的播放器
 Player player;
 // 播放器的视频组件和控制组件
 Component vedioComponent; 
 Component controlComponent;
 // 标示是否是第一次打开播放器
 boolean first = true;
 // 标示是否需要循环
 boolean loop = false;
 // 文件当前目录
 String currentDirectory;
 // 构造方法
 public JMFMediaPlayer(String title) {
  super(title);
  addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent e){
    // 用户点击窗口系统菜单的关闭按钮
    // 调用dispose以执行windowClosed
    dispose();
   }
   public void windowClosed(WindowEvent e){
    if (player != null){
     // 关闭JMF播放器对象
     player.close();
    }
    System.exit(0);
   }
  });
  // 创建播放器的菜单
  JMenu fileMenu = new JMenu("文件");
  JMenuItem openMemuItem = new JMenuItem("打开");
  openMemuItem.addActionListener(this);
  fileMenu.add(openMemuItem);
  // 添加一个分割条
  fileMenu.addSeparator();
  // 创建一个复选框菜单项
  JCheckBoxMenuItem loopMenuItem = new JCheckBoxMenuItem("循环", false);
  loopMenuItem.addItemListener(this);
  fileMenu.add(loopMenuItem);
  fileMenu.addSeparator();
  JMenuItem exitMemuItem = new JMenuItem("退出");
  exitMemuItem.addActionListener(this);
  fileMenu.add(exitMemuItem);
  
  JMenuBar menuBar = new JMenuBar();
  menuBar.add(fileMenu);
  this.setJMenuBar(menuBar);
  this.setSize(200, 200);
  
  try {
   // 设置界面的外观,为系统外观
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
   SwingUtilities.updateComponentTreeUI(this);
  } catch (Exception e) {
   e.printStackTrace();
  }
  this.setVisible(true);
 }
 /**
  * 实现了ActionListener接口,处理组件的活动事件
  */
 public void actionPerformed(ActionEvent e) {
  if (e.getActionCommand().equals("退出")) {
   // 调用dispose以便执行windowClosed


   dispose();
   return;
  }
  FileDialog fileDialog = new FileDialog(this, "打开媒体文件", FileDialog.LOAD);
  fileDialog.setDirectory(currentDirectory);
  fileDialog.setVisible(true);
  // 如果用户放弃选择文件,则返回
  if (fileDialog.getFile() == null){
   return;
  }
  currentDirectory = fileDialog.getDirectory();
  if (player != null){
   // 关闭已经存在JMF播放器对象
   player.close();
  }
  try {
   // 创建一个打开选择文件的播放器
   player = Manager.createPlayer(new MediaLocator("file:"
     + fileDialog.getDirectory() + fileDialog.getFile()));
  } catch (java.io.IOException e2) {
   System.out.println(e2);
   return;
  } catch (NoPlayerException e2) {
   System.out.println("不能找到播放器.");
   return;
  }
  if (player == null) {
   System.out.println("无法创建播放器.");
   return;
  }
  first = false;
  this.setTitle(fileDialog.getFile());
  // 播放器的控制事件处理
  player.addControllerListener(this);
  // 预读文件内容
  player.prefetch();
 }
 /**
  * 实现ControllerListener接口的方法,处理播放器的控制事件
  */
 public void controllerUpdate(ControllerEvent e) {
  // 调用player.close()时ControllerClosedEvent事件出现。
  // 如果存在视觉部件,则该部件应该拆除(为一致起见,
  // 我们对控制面板部件也执行同样的操作)
  if (e instanceof ControllerClosedEvent) {
   if (vedioComponent != null) {
    this.getContentPane().remove(vedioComponent);
    this.vedioComponent = null;
   }
   if (controlComponent != null) {
    this.getContentPane().remove(controlComponent);
    this.controlComponent = null;
   }
   return;
  }
  // 如果是媒体文件到达尾部事件
  if (e instanceof EndOfMediaEvent) {
   if (loop) {
    // 如果允许循环,则重新开始播放
    player.setMediaTime(new Time(0));
    player.start();
   }


   return;
  }
  // 如果是播放器预读事件
  if (e instanceof PrefetchCompleteEvent) {
   // 启动播放器
   player.start();
   return;
  }
  // 如果是文件打开完全事件,则显示视频组件和控制器组件
  if (e instanceof RealizeCompleteEvent) {
   vedioComponent = player.getVisualComponent();
   if (vedioComponent != null){
    this.getContentPane().add(vedioComponent);
   }
   controlComponent = player.getControlPanelComponent();
   if (controlComponent != null){
    this.getContentPane().add(controlComponent, BorderLayout.SOUTH);
   }
   this.pack();
  }
 }
 
 // 处理“循环”复选框菜单项的点击事件
 public void itemStateChanged(ItemEvent e) {
  loop = !loop;
 }
 public static void main(String[] args){
  new JMFMediaPlayer("JMF媒体播放器");
 }
}


热点排行