Applet Sound


/* From http://java.sun.com/docs/books/tutorial/index.html */
/*
<html>
<body>

    <applet code=SoundExample.class width=450 height=50>
    </applet>

</body>
</html>
*/
/*
 * 1.1 version.


import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;

public class SoundExample extends Applet implements ActionListener {
  SoundList soundList;

  String onceFile = "bark.au";

  String loopFile = "train.au";

  AudioClip onceClip;

  AudioClip loopClip;

  Button playOnce;

  Button startLoop;

  Button stopLoop;

  Button reload;

  boolean looping = false;

  public void init() {
    playOnce = new Button("Bark!");
    playOnce.addActionListener(this);
    add(playOnce);

    startLoop = new Button("Start sound loop");
    stopLoop = new Button("Stop sound loop");
    stopLoop.setEnabled(false);
    startLoop.addActionListener(this);
    add(startLoop);
    stopLoop.addActionListener(this);
    add(stopLoop);

    reload = new Button("Reload sounds");
    reload.addActionListener(this);
    add(reload);

    startLoadingSounds();
  }

  void startLoadingSounds() {
    //Start asynchronous sound loading.
    soundList = new SoundList(this, getCodeBase());
    soundList.startLoading(loopFile);
    soundList.startLoading(onceFile);
  }

  public void stop() {
    onceClip.stop()//Cut short the one-time sound.
    if (looping) {
      loopClip.stop()//Stop the sound loop.
    }
  }

  public void start() {
    if (looping) {
      loopClip.loop()//Restart the sound loop.
    }
  }

  public void actionPerformed(ActionEvent event) {
    //PLAY BUTTON
    Object source = event.getSource();
    if (source == playOnce) {
      if (onceClip == null) {
        //Try to get the AudioClip.
        onceClip = soundList.getClip(onceFile);
      }

      if (onceClip != null) { //If the sound is loaded:
        onceClip.play()//Play it once.
        showStatus("Playing sound " + onceFile + ".");
      else {
        showStatus("Sound " + onceFile + " not loaded yet.");
      }
      return;
    }

    //START LOOP BUTTON
    if (source == startLoop) {
      if (loopClip == null) {
        //Try to get the AudioClip.
        loopClip = soundList.getClip(loopFile);
      }

      if (loopClip != null) { //If the sound is loaded:
        looping = true;
        loopClip.loop()//Start the sound loop.
        stopLoop.setEnabled(true)//Enable stop button.
        startLoop.setEnabled(false)//Disable start button.
        showStatus("Playing sound " + loopFile + " continuously.");
      else {
        showStatus("Sound " + loopFile + " not loaded yet.");
      }
      return;
    }

    //STOP LOOP BUTTON
    if (source == stopLoop) {
      if (looping) {
        looping = false;
        loopClip.stop()//Stop the sound loop.
        startLoop.setEnabled(true)//Enable start button.
        stopLoop.setEnabled(false)//Disable stop button.
      }
      showStatus("Stopped playing sound " + loopFile + ".");
      return;
    }

    //RELOAD BUTTON
    if (source == reload) {
      if (looping) { //Stop the sound loop.
        looping = false;
        loopClip.stop();
        startLoop.setEnabled(true)//Enable start button.
        stopLoop.setEnabled(false)//Disable stop button.
      }
      loopClip = null//Reset AudioClip to null.
      onceClip = null//Reset AudioClip to null.
      startLoadingSounds();
      showStatus("Reloading all sounds.");
      return;
    }
  }
}
/*
 * Code is the same in both 1.0 and 1.1.
 */

//Loads and holds a bunch of audio files whose locations are specified
//relative to a fixed base URL.

class SoundList extends java.util.Hashtable {
  Applet applet;

  URL baseURL;

  public SoundList(Applet applet, URL baseURL) {
    super(5)//Initialize Hashtable with capacity of 5 entries.
    this.applet = applet;
    this.baseURL = baseURL;
  }

  public void startLoading(String relativeURL) {
    new SoundLoader(applet, this, baseURL, relativeURL);
  }

  public AudioClip getClip(String relativeURL) {
    return (AudioClipget(relativeURL);
  }

  public void putClip(AudioClip clip, String relativeURL) {
    put(relativeURL, clip);
  }
}
/*
 * Code is the same in both 1.0 and 1.1.
 */

class SoundLoader extends Thread {
  Applet applet;

  SoundList soundList;

  URL baseURL;

  String relativeURL;

  public SoundLoader(Applet applet, SoundList soundList, URL baseURL,
      String relativeURL) {
    this.applet = applet;
    this.soundList = soundList;
    this.baseURL = baseURL;
    this.relativeURL = relativeURL;
    setPriority(MIN_PRIORITY);
    start();
  }

  public void run() {
    AudioClip audioClip = applet.getAudioClip(baseURL, relativeURL);

    //AudioClips load too fast for me!
    //Simulate slow loading by adding a delay of up to 10 seconds.
    try {
      sleep((int) (Math.random() 10000));
    catch (InterruptedException e) {
    }

    soundList.putClip(audioClip, relativeURL);
  }
}

 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值