当前位置:编程学习 > JAVA >>

java怎么播放本地音乐

java怎么播放本地音乐????????????????? --------------------编程问答--------------------   用swing吗? --------------------编程问答-------------------- 不用swing,我的要求就是一段程序可以读取我的音乐文件就可以了 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 看你是什么格式的音乐? --------------------编程问答-------------------- 这个可没那么容易,得有相应的解码器才行 --------------------编程问答-------------------- lz说的是不是用java程序调用播放器然后播放音乐? --------------------编程问答-------------------- swting里面有的,百度一下就可以找到了 --------------------编程问答--------------------
public void play(String Filename) 
  { 
  try{ 
  // 用输入流打开一音频文件 
  InputStream in = new FileInputStream(Filename);//FIlename 是你加载的声音文件如(“game.wav”) 
  // 从输入流中创建一个AudioStream对象 
  AudioStream as = new AudioStream(in); 
  AudioPlayer.player.start(as);//用静态成员player.start播放音乐 
  //AudioPlayer.player.stop(as);//关闭音乐播放 
  //如果要实现循环播放,则用下面的三句取代上面的“AudioPlayer.player.start(as);”这句 
  /*AudioData data = as.getData(); 
  ContinuousAudioDataStream gg= new ContinuousAudioDataStream (data); 
  AudioPlayer.player.start(gg);// Play audio. 
  */ 
  //如果要用一个 URL 做为声音流的源(source),则用下面的代码所示替换输入流来创建声音流: 
  /*AudioStream as = new AudioStream (url.openStream()); 
  */ 
  } catch(FileNotFoundException e){ 
  System.out.print("FileNotFoundException "); 
  } catch(IOException e){ 
  System.out.print("有错误!"); 
  } 
  }
--------------------编程问答-------------------- 在javax.swing.sound里面找吧,java本身只能支持mid格式的,其他的格式要自己写插件扩展哦。最近我也在尝试着这个问题呢! --------------------编程问答--------------------
引用 10 楼 pintn 的回复:
在javax.swing.sound里面找吧,java本身只能支持mid格式的,其他的格式要自己写插件扩展哦。最近我也在尝试着这个问题呢!


--------------------编程问答-------------------- JSound类play方法 --------------------编程问答-------------------- 这就要问高手了 ! --------------------编程问答-------------------- 这个主要用在哪个方面啊? --------------------编程问答-------------------- 顶
引用 9 楼 silence_smile 的回复:
Java code
public void play(String Filename) 
  { 
  try{ 
  // 用输入流打开一音频文件 
  InputStream in = new FileInputStream(Filename);//FIlename 是你加载的声音文件如(“game.wav”) 
  // 从输入流中创建一个AudioStream对象 
  Au……
--------------------编程问答-------------------- 如何你指定了MP3默认的播放类型。
那么通过runtime直接在程序中打开就行了。

String file="c:\\歌曲名.mp3";
     Runtime.getRuntime().exec("cmd /c start "   +   file.replaceAll(" ", "\" \""));
--------------------编程问答-------------------- JDK支持的格式很少,用JMF吧 --------------------编程问答-------------------- 建议使用jmf(java media framwork),这样就能播放mp3等众多格式的音乐了;去sun官网下一个jmf,安装好后,把jmf.jar包引入便可使用,给出例zi代码:使用方法:构造函数中传入文件路径名即可,播放、暂停、继续、停止等功能均已实现。

 /*************************************************
  * Subclass: MusicPlay
  *************************************************/
 public class MusicPlay implements Runnable {
  private Time zeroTime = new Time(0);
  private Player player;
  private boolean isloop = false;

  /*************************************************
   * Function: MusicPlay Description: constructor, load the music file and
   * get ready for play Called By: MultiMedia()
   *************************************************/
  // 实例化各个参数 filename 为文件名,可为绝对路径
  public MusicPlay(String filename) {
   File file = new File(filename);
   try {
    player = Manager.createRealizedPlayer(file.toURI().toURL());
    player.addControllerListener(new ControllListener());
   } catch (NoPlayerException e) {
    e.printStackTrace();
   } catch (CannotRealizeException e) {
    e.printStackTrace();
   } catch (MalformedURLException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }

  /*************************************************
   * Function: isRunning Description: test if this music is playing Called
   * By:
   *************************************************/
  public boolean isRunning() {
   return player.getState() == Player.Started;
  }

  /*************************************************
   * Function: play Description: play the music for once Called By:
   * resumeAll()
   *************************************************/
  // 只播放一次
  public void play() {
   if (!turnOff)
    player.start();
  }

  /*************************************************
   * Function: replay Description: replay the music Called By: musics that
   * will be played many times will invoke this methed
   *************************************************/
  // 再播放一次
  public void replay() {
   if (turnOff)
    return;

   if (player.getState() == Controller.Prefetched)
    player.setMediaTime(zeroTime);
   player.start();
  }

  /*************************************************
   * Function: stop Description: stop this music Called By: stopAll() of
   * upper class,suspendAll() of upper
   * class,BackroundForMenuPanel,GameOverPanel
   *************************************************/
  public void stop() {
   player.stop();
  }

  /*************************************************
   * Function: close Description: dispose the music Called By: closeAll()
   * of super class
   *************************************************/
  public void close() {
   player.stop();
   player.close();
  }

  /*************************************************
   * Function: loop Description: make the music played repetitiously
   * Called By: music that will repetitious play
   *************************************************/
  // 循环播放
  public void loop() {
   if (turnOff)
    return;

   isloop = true;
   player.prefetch();
   replay();
  }

  /*************************************************
   * Function: run Description: trig this music Called By: Override method
   *************************************************/
  @Override
  public void run() {
   loop();
  }

  /*************************************************
   * Subclass: ControllListener Description: listener for playing and
   * implement playing repetitiously
   *************************************************/
  // 通过对播放进度的监听,实现循环播放
  private class ControllListener implements ControllerListener {

   public void controllerUpdate(ControllerEvent e) {
    if (e instanceof EndOfMediaEvent) {
     if (isloop) {
      player.setMediaTime(new Time(0));
      player.start();
     }
    }
   }
  }

 }  --------------------编程问答--------------------
yong jmf xing bu --------------------编程问答-------------------- JMF   java media  framework    --------------------编程问答-------------------- 目前的版本是  JMF2.1  你需要将其安装  然后 将lib目录下的文件引入工程


package com;


import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;

import javax.media.CannotRealizeException;
import javax.media.Controller;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.Time;

/*******************************************************************************
 * Subclass: MusicPlay
 ******************************************************************************/
public class MusicPlay implements Runnable {
private Time zeroTime = new Time(0);
private Player player;
private boolean turnOff = false;
private boolean isloop = false;

/***************************************************************************
 * Function: MusicPlay Description: constructor, load the music file and get
 * ready for play Called By: MultiMedia()
 **************************************************************************/
// 实例化各个参数 filename 为文件名,可为绝对路径
public MusicPlay(String filename) {
File file = new File(filename);
try {
player = Manager.createRealizedPlayer(file.toURI().toURL());
player.addControllerListener(new ControllListener());
} catch (NoPlayerException e) {
e.printStackTrace();
} catch (CannotRealizeException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

/***************************************************************************
 * Function: isRunning Description: test if this music is playing Called By:
 **************************************************************************/
public boolean isRunning() {
return player.getState() == Player.Started;
}

/***************************************************************************
 * Function: play Description: play the music for once Called By:
 * resumeAll()
 **************************************************************************/
// 只播放一次
public void play() {
if (!turnOff)
player.start();
}

/***************************************************************************
 * Function: replay Description: replay the music Called By: musics that
 * will be played many times will invoke this methed
 **************************************************************************/
// 再播放一次
public void replay() {
if (turnOff)
return;

if (player.getState() == Controller.Prefetched)
player.setMediaTime(zeroTime);
player.start();
}

/***************************************************************************
 * Function: stop Description: stop this music Called By: stopAll() of upper
 * class,suspendAll() of upper class,BackroundForMenuPanel,GameOverPanel
 **************************************************************************/
public void stop() {
player.stop();
}

/***************************************************************************
 * Function: close Description: dispose the music Called By: closeAll() of
 * super class
 **************************************************************************/
public void close() {
player.stop();
player.close();
}

/***************************************************************************
 * Function: loop Description: make the music played repetitiously Called
 * By: music that will repetitious play
 **************************************************************************/
// 循环播放
public void loop() {
if (turnOff)
return;

isloop = true;
player.prefetch();
replay();
}

/***************************************************************************
 * Function: run Description: trig this music Called By: Override method
 **************************************************************************/

public void run() {
loop();
}

/***************************************************************************
 * Subclass: ControllListener Description: listener for playing and
 * implement playing repetitiously
 **************************************************************************/
// 通过对播放进度的监听,实现循环播放
private class ControllListener implements ControllerListener {

public void controllerUpdate(ControllerEvent e) {
if (e instanceof EndOfMediaEvent) {
if (isloop) {
player.setMediaTime(new Time(0));
player.start();
}
}
}
}
public static void main(String[] args) {
MusicPlay mp = new MusicPlay("w.mp3");
mp.play();

}

}

--------------------编程问答-------------------- 为了支持MP3的播放,我们必须添加MP3的SPI支持库。首先需要下载MP3的支持库。

官方网站:http://www.javazoom.net/。

下载页面:http://www.javazoom.net/mp3spi/sources.html。

下载地址:http://www.javazoom.net/mp3spi/sources/mp3spi1.9.4.zip。

下载文件:mp3spi1.9.4.zip。

将mp3spi1.9.4.zip中的3个JAR文件jl1.0.jar 、mp3spi1.9.4.jar 、tritonus_share.jar添加到当前项目中即可。

下面我们来实现一个MP3音乐播放器,实现的功能是:选择"文件"→"打开"命令弹出文件选择对话框,将选择目录的所有MP3和WAV文件加入到播放列表中,双击播放列表中的音乐文件实现音乐的播放和切换。

要实现该程序,首先需要提供了一个主程序窗口,该窗口提供了各种界面组件和操作事件的控制,并包含一个音乐播放的子线程,子线程由主线程控制。因此有以下两个类。

音乐播放器主程序MusicPlayer.java。

播放线程PlayThread.java。

(1)音乐播放器主程序MusicPlayer.java

该类继承自Frame类,首先需要为该类添加文件播放的5个变量:

String filepath;     //播放文件目录String filename;     //播放文件名称AudioInputStream audioInputStream;  //文件流AudioFormat audioFormat;   //文件格式SourceDataLine sourceDataLine;  //输出设备
 

并添加一个录音标志开关,控制录音的开始与停止:

boolean isStop = true;    //控制播放线程boolean hasStop = true;    //播放线程状态 

同时添加几个显示界面组件:

List list;      //文件列表Label labelfilepath;    //播放目录显示标签Label labelfilename;    //播放文件显示标签 

在该程序的构造函数中,需要分别创建主窗体、菜单栏、文件列表组件、信息显示面板。并为菜单栏注册单击事件,为文件列表组件注册鼠标事件,为窗体注册关闭事件。

在菜单栏中选择"打开"选项时,执行打开函数open(),用以打开文件选择对话框,将选择目录的MP3和WAV文件添加到列表组件中。

文件列表组件在被鼠标双击时,取得被选择的文件名,并取得被选择的文件名,然后调用播放函数play()进行播放。

窗口关闭事件发生时调用System.exit(0)退出程序。

play()函数中在播放录音时,调用的是内部播放线程PlayThread.java来进行播放。该函数中首先会设置音乐的停止标志isStop=true,子线程在发现该变量为true时就会停止当前音乐的播放;由于从接收到停止指令到停止音乐的播放会需要一段时间,所以需要在play()中根据hasStop来执行一段时间的暂停,当子线程结束后该变量就会为true,此时play()函数就会继续执行,读取音乐文件,并进行MP3文件的编码,创建新的子线程对象进行播放。

该主程序完整的代码如下:

音乐播放器主程序MusicPlayer.java


package com.test.audio;import java.io.File;import java.awt.BorderLayout;import java.awt.FileDialog;import java.awt.Frame;import java.awt.GridLayout;import java.awt.Label;import java.awt.List;import java.awt.Menu;import java.awt.MenuBar;import java.awt.MenuItem;import java.awt.MenuShortcut;import java.awt.Panel;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;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 MusicPlayer extends Frame {boolean isStop = true;   //控制播放线程boolean hasStop = true;   //播放线程状态    String filepath;    //播放文件目录String filename;    //播放文件名称AudioInputStream audioInputStream; //文件流AudioFormat audioFormat;  //文件格式SourceDataLine sourceDataLine;  //输出设备    List list;//文件列表Label labelfilepath;   //播放目录显示标签Label labelfilename;  //播放文件显示标签    public MusicPlayer() {//设置窗体属性setLayout(new BorderLayout());setTitle("MP3音乐播放器");setSize(350, 370);        //建立菜单栏MenuBar menubar = new MenuBar();Menu menufile = new Menu("文件");MenuItem menuopen = new MenuItem("打开", new MenuShortcut(KeyEvent.VK_O));menufile.add(menuopen);menufile.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {open();}});menubar.add(menufile);setMenuBar(menubar);        //文件列表list = new List(10);list.addMouseListener(new MouseAdapter() {public void mouseClicked(MouseEvent e) {//双击时处理if (e.getClickCount() == 2) {//播放选中的文件filename = list.getSelectedItem();play();}}});add(list, "Center");        //信息显示Panel panel = new Panel(new GridLayout(2, 1));labelfilepath = new Label("播放目录:");labelfilename = new Label("播放文件:");panel.add(labelfilepath);panel.add(labelfilename);add(panel, "North");        //注册窗体关闭事件addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});setVisible(true);}    //打开private void open() {FileDialog dialog = new FileDialog(this, "Open", 0);dialog.setVisible(true);filepath = dialog.getDirectory();if (filepath != null) {labelfilepath.setText("播放目录:" + filepath);            //显示文件列表list.removeAll();File filedir = new File(filepath);File[] filelist = filedir.listFiles();for (File file : filelist) {String filename = file.getName().toLowerCase();if (filename.endsWith(".mp3") || filename.endsWith(".wav")) {list.add(filename);}}}}    //播放private void play() {try {isStop = true;//停止播放线程//等待播放线程停止System.out.print("开始播放:" + filename);while (!hasStop) {System.out.print(".");try {Thread.sleep(10);} catch (Exception e) {}}System.out.println("");File file = new File(filepath + filename);labelfilename.setText("播放文件:" + filename);            //取得文件输入流audioInputStream = AudioSystem.getAudioInputStream(file);audioFormat = audioInputStream.getFormat();//转换MP3文件编码if (audioFormat.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,audioFormat.getSampleRate(), 16, audioFormat.getChannels(), audioFormat.getChannels() * 2,audioFormat.getSampleRate(), false);audioInputStream = AudioSystem.getAudioInputStream(audioFormat,audioInputStream);}            //打开输出设备DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, audioFormat,AudioSystem.NOT_SPECIFIED);sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);sourceDataLine.open(audioFormat);sourceDataLine.start();            //创建独立线程进行播放isStop = false;Thread playThread = new Thread(new PlayThread());playThread.start();} catch (Exception e) {e.printStackTrace();}}    public static void main(String args[]) {new MusicPlayer();}}

在该主程序中添加一个入口主函数main()来启动该主程序即可。
2)播放线程PlayThread.java

在主程序的播放函数play()中,调用了播放线程进行播放。该线程与录音机中的播放线程相似,不同的是它需要根据isStop指令来检查是否应该终止当前的播放线程。另外,该线程在播放结束后,还应该设置hasStop=true,告诉play()函数该线程已经停止了,可以继续下一首音乐的播放了。

该程序的代码如下:

播放线程PlayThread.java


class PlayThread extends Thread {byte tempBuffer[] = new byte[320];    public void run() {try {int cnt;hasStop = false;//读取数据到缓存数据while ((cnt = audioInputStream.read(tempBuffer, 0,tempBuffer.length)) != -1) {if (isStop)break;if (cnt > 0) {//写入缓存数据sourceDataLine.write(tempBuffer, 0, cnt);}}//Block等待临时数据被输出为空sourceDataLine.drain();sourceDataLine.close();hasStop = true;} catch (Exception e) {e.printStackTrace();System.exit(0);}}}

(3)运行MP3音乐播放器

完成以上代码后,即可运行主程序MusicPlayer,就会显示。 --------------------编程问答-------------------- 这个楼主不给分,不厚道 --------------------编程问答-------------------- Java Media --------------------编程问答-------------------- JMF好 --------------------编程问答-------------------- --------------------编程问答-------------------- 哪个是对的???楼主怎么不给分啊 --------------------编程问答-------------------- http://download.csdn.net/detail/chinaluopiao/3560841  

这个资源实现了播放,不过资源挺贵的,不知道你有木有那么多积分!! --------------------编程问答--------------------
引用 21 楼  的回复:
目前的版本是  JMF2.1  你需要将其安装  然后 将lib目录下的文件引入工程
Java code


package com;


import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;

import javax.media.CannotRealizeExcept……


格式好优美挖。。。 --------------------编程问答--------------------
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,