⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simplesoundsbehavior.java

📁 JAVA编程百例书中各章节的所有例子的源代码,包括套接字编程
💻 JAVA
字号:
package ch06.section09;

import javax.media.j3d.*;
import javax.vecmath.*;
import java.net.URL;
import java.util.Enumeration;

// 定义一个用于播放声音的类
public class SimpleSoundsBehavior
    extends Behavior {
  WakeupOnElapsedTime wt;
  WakeupOnBehaviorPost wp;
  BackgroundSound sound1 = new BackgroundSound();
  PointSound sound2 = new PointSound();
  PointSound sound3 = new PointSound();
  static int WAKEUP_SOUND = 0;
  int soundIndex = 0;
  URL URLName1;
  URL URLName2;
  URL URLName3;
  BoundingSphere bounds;

  // 覆盖父类的 initialize 方法
  public void initialize() {
    MediaContainer sample1 = new MediaContainer();
    MediaContainer sample2 = new MediaContainer();
    MediaContainer sample3 = new MediaContainer();
    sample1.setCapability(MediaContainer.ALLOW_URL_WRITE);
    sample1.setCapability(MediaContainer.ALLOW_URL_READ);
    sample1.setURLObject(URLName1);
    sample1.setCacheEnable(false);
    sound1.setLoop(0);
    sound1.setContinuousEnable(false);
    sound1.setReleaseEnable(false);
    sound1.setSoundData(sample1);
    sound1.setInitialGain(0.7f);
    sample2.setCapability(MediaContainer.ALLOW_URL_WRITE);
    sample2.setCapability(MediaContainer.ALLOW_URL_READ);
    sample2.setURLObject(URLName2);
    sound2.setLoop(Sound.INFINITE_LOOPS);
    sound2.setContinuousEnable(false);
    sound2.setReleaseEnable(false);
    sound2.setSoundData(sample2);
    sound2.setInitialGain(2.0f);
    Point3f sound2Pos = new Point3f( -30.0f, 0.0f, 0.0f);
    sound2.setPosition(sound2Pos);
    sample3.setCapability(MediaContainer.ALLOW_URL_WRITE);
    sample3.setCapability(MediaContainer.ALLOW_URL_READ);
    sample3.setURLObject(URLName3);
    sound3.setContinuousEnable(false);
    sound3.setReleaseEnable(false);
    sound3.setSoundData(sample3);
    sound3.setInitialGain(4.0f);
    Point3f sound3Pos = new Point3f(30.0f, 0.0f, 0.0f);
    sound3.setPosition(sound3Pos);

    wt = new WakeupOnElapsedTime(2000);
    WakeupOnElapsedTime wp = new WakeupOnElapsedTime(5000);
    wakeupOn(wp);
  }

  // 覆盖父类的 processStimulus 方法以控制声音的播放
  public void processStimulus(Enumeration criteria) {

    switch (soundIndex) {
      // Active
      case 0:

        // 播放第一种声音
        sound1.setEnable(true);
        wakeupOn(wt);
        break;
      case 1:

        // 播放第二种声音
        sound2.setEnable(true);
        wakeupOn(wt);
        break;
      case 2:
      case 4:
      case 6:
      case 8:
      case 10:

        // 播放第三种声音
        sound3.setEnable(true);
        wakeupOn(wt);
        break;
      case 3:
      case 5:
      case 7:
      case 9:

        // 停止的第三种声音的播放
        sound3.setEnable(false);
        wakeupOn(wt);
        break;

      case 11:

        // 停止第二种声音的播放
        sound2.setEnable(false);
        wakeupOn(wt);
        break;
      case 12:

        // 停止第一种声音的播放
        sound1.setEnable(false);
        wt = new WakeupOnElapsedTime(400000);
        wakeupOn(wt);
        break;

      default:
        break;
    }
    soundIndex++;
  }

  //
  // 类构造器
  // 参数: 声音节点
  //       声音文件名
  //       声音的有效范围
  //
  public SimpleSoundsBehavior(BackgroundSound sound1,
                              PointSound sound2,
                              PointSound sound3,
                              URL urlName1,
                              URL urlName2,
                              URL urlName3,
                              BoundingSphere soundBounds) {
    this.sound1 = sound1;
    this.sound2 = sound2;
    this.sound3 = sound3;
    this.URLName1 = urlName1;
    this.URLName2 = urlName2;
    this.URLName3 = urlName3;
    this.bounds = (BoundingSphere) soundBounds.clone();
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -