package JavaFrameTest;import java.awt.*;
import java.applet.*;
import java.awt.event.*;/**
 * @author feifei
 *
 */
public class AudioDemo extends Applet implements ActionListener{
/**
 * 
 */
private static final long serialVersionUID = 7787516386587651803L;
AudioClip clip;
Button b_play,b_loop,b_stop;
public void init(){
clip=getAudioClip(getDocumentBase(),"40-梅花三弄(笛子).au");
b_play=new Button("Play");
b_play.addActionListener(this);
b_loop=new Button("Loop");
b_loop.addActionListener(this);
b_stop=new Button("Stop");
b_stop.addActionListener(this);

add(b_play);
add(b_loop);
add(b_stop);
}
public void stop(){
if(clip!=null)
clip.stop();
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==b_play)
clip.play();
else if(e.getSource()==b_loop)
clip.loop();
else if(e.getSource()==b_stop)
clip.stop();
}
}

解决方案 »

  1.   

    1.文件路径不对, getAudioClip 方法不管音频剪辑存在与否,此方法总是立即返回。不会报错
    2.文件格式不对,接口 AudioClip 可播放音频剪辑,不知道都包含哪几种文件.
    以下是在网上抄的例子,看看吧/**
     * 类说明:音乐的控制
     * ware audio files  audio/x-wav
     * au                audio/basic
     * mp3               audio/mpeg
     * midi              audio/midi
     * tone              audio/x-tone-sep
     * mpeg              video/mpeg
     * @author 作者: User
     * @version 创建时间:2011-3-22 下午10:02:59
     */import java.io.InputStream;import javax.microedition.media.Manager;
    import javax.microedition.media.MediaException;
    import javax.microedition.media.Player;
    import javax.microedition.media.control.VolumeControl;public class Music {
        private static Music instance;    private Player player;// 创建一个音乐播放器
        private VolumeControl volumeControl = null;// 声音控制
        private int volume = 50;// 音量的初始值
        private static final int MAX = 100;// 音量最大值
        private static final int MIN = 0;// 音量最小值
        private boolean isplay = false;//是否真正播放    private Music() {    }    // 采用单例模式 返回本类对象
        static Music getInstance() {
            if (instance == null) {
                instance = new Music();
            }
            return instance;
        }    // 播放音乐
        public void playMusic() {
            player = createPlayer("/city.mid", "audio/midi");// 创建音乐播放器
            volumeControl = (VolumeControl) player.getControl("VolumeControl");// 得到音乐控制器
            isplay = true;
            startPlayer(player);// 开始播放音乐
        }    // 停止音乐播放
        public void stopMusic() {
            try {
                if (player != null)
                    player.stop();
                player = null;
                isplay = false;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }    // 加大音量
        public void addVolume() {
            if (volumeControl != null) {
                volume += 10;
                if (volume > MAX)
                    volume = MAX;
                volumeControl.setLevel(volume);
            }
        }    public boolean isPlay() {
            return isplay;
        }    // 减小音量
        public void subVolume() {
            if (volumeControl != null) {
                volume -= 10;
                if (volume < MIN)
                    volume = MIN;
                volumeControl.setLevel(volume);
            }
        }
        
        // 设置音量
        public void setVolume(int volue) {
            if (volumeControl != null) {
                volumeControl.setLevel(volue);
            }
        }
        // 开始播放
        private void startPlayer(Player p) {
            if (p != null) {
                try {
                    p.stop();
                    p.setLoopCount(-1);
                    p.start();
                } catch (MediaException me) {
                    me.printStackTrace();
                }
            }
        }    // 创建音乐播放器
        private Player createPlayer(String filename, String format) {
            Player p = null;
            try {
                InputStream is = getClass().getResourceAsStream(filename);// 得到音乐文件输入流
                p = Manager.createPlayer(is, format);
                p.prefetch();
            } catch (Exception ioe) {
                ioe.printStackTrace();
            }
            return p;
        }
    }
      

  2.   

    请问是怎么不正确了?不是用getAudioClip(URL url,String name)来获得一个AudioClip对象,然后调用paly()方法播放这个对象吗?当然也可以直接使用play()方法播放,从而加载和播放一起完成,但是void play(URL url,String name)只会播放一遍
      

  3.   

    你没有设置重播当然就只执行一次了。applet默认了的。你要加入loop语句就可以循环了