当前位置: 代码迷 >> Java相关 >> 求教加载音乐问题
  详细解决方案

求教加载音乐问题

热度:416   发布时间:2007-03-15 22:41:00.0
求教加载音乐问题

import javax.swing.*;
import java.applet.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
public class LoadAudioAndPlay extends JApplet{
AudioClip sound1,sound2,currentsound;
JButton playsound,loopsound,stopsound;
JComboBox choosesound;
URL url1,url2;
String name[]={"Welcome","hi"};
public void init(){
Container c=getContentPane();
c.setLayout(new FlowLayout());
choosesound=new JComboBox(name);
try{
url1=new URL("file:/e:/program/16/"); /*请大家指点一下这里应该怎么做才能得到音乐文件*/
url2=new URL("file:/e:/program/16/y.wav");
sound1=getAudioClip(url1,"w.wav");
sound2=getAudioClip(url2);

}catch(Exception e){}

currentsound=sound1;
//currentsound.play();

choosesound.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){
currentsound.stop();
currentsound=choosesound.getSelectedIndex()==0 ?
sound1 : sound2;
}
});
c.add(choosesound);
playsound=new JButton("Paly");
c.add(playsound);
loopsound=new JButton("Loop");
c.add(loopsound);
stopsound=new JButton("Stop");
c.add(stopsound);
ButtonActionHandler handler=new ButtonActionHandler();
playsound.addActionListener(handler);
loopsound.addActionListener(handler);
stopsound.addActionListener(handler);

}
private class ButtonActionHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource()==playsound)
currentsound.play();
if(e.getSource()==loopsound)
currentsound.loop();
if(e.getSource()==stopsound)
currentsound.stop();
}
}
public static void main(String[] args){
LoadAudioAndPlay m=new LoadAudioAndPlay();
JFrame app=new JFrame("AudioAndPlay Test");
m.init();
m.start();
app.getContentPane().add(m);
app.setBounds(100,100,400,100);
app.setVisible(true);
}
}
我用过Applet.newAudioClip(URL)但是只能得到一个音乐文件 我要同时用几个这样的语句时 只有第一个音乐能打开 请大家指点一下错误。 谢谢!万分感激!!!

搜索更多相关的解决方案: 加载  import  音乐  java  awt  

----------------解决方案--------------------------------------------------------

有一个很好的方法,你不必要得到它的绝对路径,你只要把你的音频文件放到你的类目录里面去,然后用
getClass().getResource("xx.wav")的方法得到xx.wav的URL,然后就可以用这个URL去构造一个AudioClip了

并且这个好处就是,你的音频文件可以随便着类文件到处走了


----------------解决方案--------------------------------------------------------
想问一版主一个问题,java的音频播放可以播.mp3的格式吗?如果不可以那怎么办呢?
----------------解决方案--------------------------------------------------------
以下是引用千里冰封在2007-3-16 8:56:28的发言:

有一个很好的方法,你不必要得到它的绝对路径,你只要把你的音频文件放到你的类目录里面去,然后用
getClass().getResource("xx.wav")的方法得到xx.wav的URL,然后就可以用这个URL去构造一个AudioClip了

并且这个好处就是,你的音频文件可以随便着类文件到处走了

斑竹您说的我有点没明白我想问的问题是getAudioClip()在这里怎么得不到音乐资源,还有我用过Applet.newAudioClip()这个静态方法得到资源,但是如果我要得到两首音乐的资源,第二首怎么也得不到
如Applet.newAudioClip(url1);Applet.newAudioClip(url2);在播放第二个的时候就回出现异常,请大家辛苦一下,指点一下,后告诉我个别的方法。谢谢!!!万分感激!!!

----------------解决方案--------------------------------------------------------

以下是引用winsun在2007-3-16 12:28:57的发言:
想问一版主一个问题,java的音频播放可以播.mp3的格式吗?如果不可以那怎么办呢?

标准的JDK是不能播MP3格式的,你可以下载java media framework(JMF),也叫JAVA媒体框架,然后再下载一个MP3的插件,就可以播放MP3了


----------------解决方案--------------------------------------------------------

以下是引用zhanglinkai在2007-3-16 12:56:33的发言:

斑竹您说的我有点没明白我想问的问题是getAudioClip()在这里怎么得不到音乐资源,还有我用过Applet.newAudioClip()这个静态方法得到资源,但是如果我要得到两首音乐的资源,第二首怎么也得不到
如Applet.newAudioClip(url1);Applet.newAudioClip(url2);在播放第二个的时候就回出现异常,请大家辛苦一下,指点一下,后告诉我个别的方法。谢谢!!!万分感激!!!

不会的,怎么会那样呢?

你用我的方法得到了URL之后,就可以利用Applet.newAudioClip(url);
来得到AudioClip的引用,得到了以后,你就可以播放和停止了,

播放第二个不会出现异常的,你那边是什么异常呢?
还有,你的代码也帖上来看看,


----------------解决方案--------------------------------------------------------
把代码贴上来啊
----------------解决方案--------------------------------------------------------

[CODE]import javax.swing.*;
import java.applet.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
public class LoadAudioAndPlay extends JApplet{
AudioClip sound1,sound2,currentsound;
JButton playsound,loopsound,stopsound;
JComboBox choosesound;
URL url1,url2;
String name[]={"Welcome","hi"};
public void init(){
Container c=getContentPane();
c.setLayout(new FlowLayout());
choosesound=new JComboBox(name);
try{
/*这里只能播放sound2,播放sound1什么都不会发生如果把sound1=Applet.newAudioClip()防在上面
sound1旧能播放 就是不能同时播放*/

sound2=Applet.newAudioClip(getClass().getResource("y.wav"));
sound1=Applet.newAudioClip(getClass().getResource("w.wav"));
}catch(Exception e){}
currentsound=sound1;
sound2.play();//这个能播放如果变成sound1.play()就不行,把上面的顺序换以下就能播放sound1
//sound2就不行了
choosesound.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){
currentsound.stop();
currentsound=choosesound.getSelectedIndex()==0 ?
sound1 : sound2;
}
});
c.add(choosesound);
playsound=new JButton("Paly");
c.add(playsound);
loopsound=new JButton("Loop");
c.add(loopsound);
stopsound=new JButton("Stop");
c.add(stopsound);
ButtonActionHandler handler=new ButtonActionHandler();
playsound.addActionListener(handler);
loopsound.addActionListener(handler);
stopsound.addActionListener(handler);
}
private class ButtonActionHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource()==playsound)
currentsound.play();
if(e.getSource()==loopsound)
currentsound.loop();
if(e.getSource()==stopsound)
currentsound.stop();
}
}
public static void main(String[] args){
LoadAudioAndPlay m=new LoadAudioAndPlay();
JFrame app=new JFrame("AudioAndPlay Test");
m.init();
m.start();
app.getContentPane().add(m);
app.setBounds(100,100,400,100);
app.setVisible(true);
}
}[/CODE]
对不起 昨天说错了 没有异常 是什么都不发生 就是不能播放两个音乐文件 谁在上面就能播放谁,下面的就不能放 而且没任何反映,由于上网不是很方便 现在才贴出来 希望斑竹和大家帮帮我 谢谢大家! 感谢斑竹的回答!

[此贴子已经被作者于2007-3-17 14:08:06编辑过]


----------------解决方案--------------------------------------------------------
大家怎么不理我了,求大家帮忙看看,试验一下看我哪错了,帮帮我这只菜鸟,我很着急啊,找不到错误。
----------------解决方案--------------------------------------------------------
这可能就和你的电脑有关了,我这里同样的代码是完全可以运行的,并且可以两个音乐同时播放

我记得有些声卡是不支持 同时播放音乐的
----------------解决方案--------------------------------------------------------
  相关解决方案