java如何播放声音

告诉我哪个类的哪个方法关联文件,哪个方法播放,哪个方法停止播放就可以了。例如要播放F://1.mp3怎么做?... 告诉我哪个类的哪个方法关联文件,哪个方法播放,哪个方法停止播放就可以了。例如要播放F://1.mp3怎么做? 展开
 我来答
韧劲9
2015-06-03 · TA获得超过9224个赞
知道小有建树答主
回答量:1638
采纳率:92%
帮助的人:357万
展开全部
   对声音媒体的直接支持可以说是Java的一大特色,尤其是在动画中配上声音效果,就可以使人在视觉上和听觉上均得到美的享受,那才叫过瘾。Java中播放声音文件与显示图像文件一样方便,同样只需要先将声音文件装载进来,然后播放就行了。

   Java目前支持的声音文件只有一种格式,那就是SUN公司的AU格式(.AU文件),也称为u-law格式。由于AU格式的声音仅有8KHz的采样频率且不支持立体声效果,所以音质不算太好。唯一的好处就是AU声音文件的尺寸比其它格式小,有利于网上传输。一般,我们较熟悉的大都是WAV格式的声音文件,因此必须先将它们转换为AU格式(可以选用Goldwave软件来进行这种格式转换)。

   声音文件准备好以后,就可以考虑将它装载进来并播放。在Applet类中提供的play( )方法可以将声音文件的装载与播放一并完成,其调用格式如下:

   void play(URL url)

   void play(URL url, String name)

   可见,play( )方法的调用格式与getImage( )方法是完全一样的,也采用URL来定位声音文件。例如,某声音文件audio.au与applet文件存放在同一目录下,可以这样写:

   play(getCodeBase( ),"audio.au");

   一旦play( )方法装载了该声音文件,就立即播放。如果找不到指定URL下的声音文件,play( )方法不返回出错信息,只是听不到想听的声音而已。

   由于play( )方法只能将声音播放一遍,若想循环播放某声音作为背景音乐,就需要用到功能更强大的AudioClip类,它能更有效地管理声音的播放操作。因为它被定义在java.applet程序包中,所以使用该类的话,不要忘了在程序头部加上:

   import java.applet.AudioClip;

   为了得到AudioClip对象,我们可以调用Applet类中的getAudioClip( )方法。它能装载指定URL的声音文件,并返回一个AudioClip对象,其调用格式如下:

   AudioClip getAudioClip(URL url)

   AudioClip getAudioClip(URL url, String name)

   得到AudioClip对象以后,就可以调用AudioClip类中所提供的各种方法来操作其中的声音数据,这些方法如表4-4所示。

   如果getAudioClip( )方法没有找到所指定的声音文件,就会返回null值。所以,在调用表4-4中所列的方法前,应该先检查一下得到的AudioClip对象不是null,因为在null对象上调用上述方法将导致出错。

   如果需要的话,我们还可以在applet中同时装载几个声音文件来一起播放,到时候,这些声音将混合在一起,就象二重奏一样。另外还有一点要说明的是,如果我们使用AudioClip对象的loop( )方法来重复播放背景音乐时,千万不要忘记在适当的时候调用AudioClip对象的stop( )方法来结束放音,否则的话,即使用户离开这一Web页面,该声音也不会停止,这无疑将会惹恼用户。因此,一般我们都在applet的stop( )方法中添上停止播放的代码。

   例如,下面这段程序将播放两段声音,一段是连续播放的背景音乐,另一段是讲话录音。

   import java.applet.AudioClip;

   public class Audios extends java.applet.Applet{

   AudioClip bgmusic,speak;

   public void init(){

   bgmusic=getAudioClip(getDocumentBase(),"space.au");

   speak=getAudioClip(getDocumentBase(),"intro.au");

   }

   public void start(){

   if(bgmusic!=null)

   bgmusic.loop();

   if(speak!=null)

   speak.play();

   }

   public void stop(){

   if(bgmusic!=null)

   bgmusic.stop(); //关闭背景音乐,切记。

   }

   }
package com.hongyuan.test;

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 {

public static final String MUSIC_FILE = "相逢一笑.wav";

public static void main(String[] args) throws
LineUnavailableException,
UnsupportedAudioFileException, IOException {

// 获取音频输入流
AudioInputStream audioInputStream =
AudioSystem
.getAudioInputStream(new File(MUSIC_FILE));
//
获取音频编码对象
AudioFormat audioFormat = audioInputStream.getFormat();

// 设置数据输入
DataLine.Info dataLineInfo = new
DataLine.Info(SourceDataLine.class,
audioFormat,
AudioSystem.NOT_SPECIFIED);
SourceDataLine sourceDataLine =
(SourceDataLine)
AudioSystem
.getLine(dataLineInfo);
sourceDataLine.open(audioFormat);
sourceDataLine.start();

/*
* 从输入流中读取数据发送到混音器
*/
int count;
byte tempBuffer[]
= new byte[1024];
while ((count = audioInputStream.read(tempBuffer, 0,
tempBuffer.length)) != -1) {
if (count > 0)
{
sourceDataLine.write(tempBuffer, 0, count);
}
}

//
清空数据缓冲,并关闭输入
sourceDataLine.drain();
sourceDataLine.close();
}

}
liushaclw
2014-02-16 · TA获得超过155个赞
知道小有建树答主
回答量:108
采纳率:0%
帮助的人:98.8万
展开全部
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import sun.audio.AudioData;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
import sun.audio.ContinuousAudioDataStream;

public class MusicPlay {
private AudioStream as; // 单次播放声音用
ContinuousAudioDataStream cas;// 循环播放声音

// 构造函数
public MusicPlay(URL url) {
try {
// 打开一个声音文件流作为输入
as = new AudioStream(url.openStream());
} catch(FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

// 一次播放 开始
public void start() {
if(as == null) {
System.out.println("AudioStream object is not created!");
return;
} else {
AudioPlayer.player.start(as);
}
}

// 一次播放 停止
public void stop() {
if(as == null) {
System.out.println("AudioStream object is not created!");
return;
} else {
AudioPlayer.player.stop(as);
}
}

// 循环播放 开始
public void continuousStart() {
// Create AudioData source.
AudioData data = null;
try {
data = as.getData();
} catch(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

// Create ContinuousAudioDataStream.
cas = new ContinuousAudioDataStream(data);

// Play audio.
AudioPlayer.player.start(cas);
}

// 循环播放 停止
public void continuousStop() {
if(cas != null) {
AudioPlayer.player.stop(cas);
}
}

}

用个例子,这样能看懂吧

更多追问追答
追问
由于对必需的库 C:\Program Files (x86)\Java\jre7\lib\rt.jar 具有一定限制,因此无法访问类型 AudioStream

这个怎么解?
还有,那个url要怎么填?填了一个new URL("F://1.mp3");却抛异常了
追答
你的jre有问题呀,环境变量没配?
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d01d6db
2015-05-18 · TA获得超过7250个赞
知道小有建树答主
回答量:1875
采纳率:44%
帮助的人:413万
展开全部
下面给你播放音乐的代码

try {
        FileInputStream fileau = new FileInputStream("Start.wav");
        AudioStream as = new AudioStream(fileau);
        AudioPlayer.player.start(as);
              } 
           catch (IOException ie) 
              { }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式