Package org.newdawn.slick.tests

Source Code of org.newdawn.slick.tests.SoundTest

package org.newdawn.slick.tests;

import java.io.IOException;

import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.Music;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.Sound;
import org.newdawn.slick.openal.Audio;
import org.newdawn.slick.openal.AudioLoader;
import org.newdawn.slick.openal.SoundStore;
import org.newdawn.slick.util.ResourceLoader;

/**
* A test for the sound system of the library
*
* @author kevin
* @author aaron
*/
public class SoundTest extends BasicGame {
  /** the GameContainer instance for this game/testcase */
  private GameContainer myContainer;
  /** The sound to be played */
  private Sound sound;
  /** The sound to be played */
  private Sound charlie;
  /** The sound to be played */
  private Sound burp;
  /** The music to be played */
  private Music music;
  /** first music that can be played */
  private Music musica;
  /** second music that can be played */
  private Music musicb;
  /** The sound to be played */
  private Audio engine;
  /** The Volume of the playing music */
  private int volume = 10;
 
  /** The IDs of the sources used for each engine noise */
  private int[] engines = new int[3];
 
  /**
   * Create a new test for sounds
   */
  public SoundTest() {
    super("Sound And Music Test");
  }
 
  /**
   * @see org.newdawn.slick.BasicGame#init(org.newdawn.slick.GameContainer)
   */
  public void init(GameContainer container) throws SlickException {
    SoundStore.get().setMaxSources(32);
   
    myContainer = container;
    sound = new Sound("testdata/restart.ogg");
    charlie = new Sound("testdata/cbrown01.wav");
    try {
      engine = AudioLoader.getAudio("WAV", ResourceLoader.getResourceAsStream("testdata/engine.wav"));
    } catch (IOException e) {
      throw new SlickException("Failed to load engine", e);
    }
    music = musica = new Music("testdata/SMB-X.XM");
    //music = musica = new Music("testdata/theme.ogg", true);
    musicb = new Music("testdata/kirby.ogg", true);
    burp = new Sound("testdata/burp.aif");
   
    music.play();
  }

  /**
   * @see org.newdawn.slick.BasicGame#render(org.newdawn.slick.GameContainer, org.newdawn.slick.Graphics)
   */
  public void render(GameContainer container, Graphics g) {
    g.setColor(Color.white);
    g.drawString("The OGG loop is now streaming from the file, woot.",100,60);
    g.drawString("Press space for sound effect (OGG)",100,100);
    g.drawString("Press P to pause/resume music (XM)",100,130);
    g.drawString("Press E to pause/resume engine sound (WAV)",100,190);
    g.drawString("Press enter for charlie (WAV)",100,160);
    g.drawString("Press C to change music",100,210);
    g.drawString("Press B to burp (AIF)",100,240);
    g.drawString("Press + or - to change global volume of music", 100, 270);
    g.drawString("Press Y or X to change individual volume of music", 100, 300);
    g.drawString("Press N or M to change global volume of sound fx", 100, 330);
    g.setColor(Color.blue);
    g.drawString("Global Sound Volume Level: " + container.getSoundVolume(), 150, 390);
    g.drawString("Global Music Volume Level: " + container.getMusicVolume(), 150, 420);
    g.drawString("Current Music Volume Level: " + music.getVolume(), 150, 450);
  }

  /**
   * @see org.newdawn.slick.BasicGame#update(org.newdawn.slick.GameContainer, int)
   */
  public void update(GameContainer container, int delta) {
  }

  /**
   * @see org.newdawn.slick.BasicGame#keyPressed(int, char)
   */
  public void keyPressed(int key, char c) {
    if (key == Input.KEY_ESCAPE) {
      System.exit(0);
    }
    if (key == Input.KEY_SPACE) {
      sound.play();
    }
    if (key == Input.KEY_B) {
      burp.play();
    }
    if (key == Input.KEY_A) {
      sound.playAt(-1, 0, 0);
    }
    if (key == Input.KEY_L) {
      sound.playAt(1, 0, 0);
    }
    if (key == Input.KEY_RETURN) {
      charlie.play(1.0f,1.0f);
    }
    if (key == Input.KEY_P) {
      if (music.playing()) {
        music.pause();
      } else {
        music.resume();
      }
    }
    if (key == Input.KEY_C) {
      music.stop();
      if (music == musica) {
        music = musicb;
      } else {
        music = musica;
      }
     
      music.loop();
    }
    for (int i=0;i<3;i++) {
      if (key == Input.KEY_1+i) {
        if (engines[i] != 0) {
          System.out.println("Stop "+i);
          SoundStore.get().stopSoundEffect(engines[i]);
          engines[i] = 0;
        } else {
          System.out.println("Start "+i);
          engines[i] = engine.playAsSoundEffect(1, 1, true);
        }
      }
    }
   
    if (c == '+') {
      volume += 1;
      setVolume();
    }
   
    if (c == '-') {
      volume -= 1;
      setVolume();
    }
   
    if (key == Input.KEY_Y) {
      int vol = (int) (music.getVolume() * 10);
      vol --;
      if (vol < 0) vol = 0;
      // set individual volume of music
      music.setVolume(vol/10.0f);
    }
    if (key == Input.KEY_X) {
      int vol = (int) (music.getVolume() * 10);
      vol ++;
      if (vol > 10) vol = 10;
      // set individual volume of music
      music.setVolume(vol/10.0f);
    }
    if (key == Input.KEY_N) {
      int vol = (int) (myContainer.getSoundVolume() * 10);
      vol --;
      if (vol < 0) vol = 0;
      // set global volume of sound fx
      myContainer.setSoundVolume(vol/10.0f);
    }
    if (key == Input.KEY_M) {
      int vol = (int) (myContainer.getSoundVolume() * 10);
      vol ++;
      if (vol > 10) vol = 10;
      // set global volume of sound fx
      myContainer.setSoundVolume(vol/10.0f);
    }

  }
 
  /**
   *  Convenience routine to set global volume of music
   */
  private void setVolume() {
    // Do bounds checking
    if(volume > 10) {
      volume = 10;
    } else if(volume < 0) {
      volume = 0;
    }
   
    myContainer.setMusicVolume(volume / 10.0f);
  }
 
  /**
   * Entry point to the sound test
   *
   * @param argv The arguments provided to the test
   */
  public static void main(String[] argv) {
    try {
      AppGameContainer container = new AppGameContainer(new SoundTest());
      container.setDisplayMode(800,600,false);
      container.start();
    } catch (SlickException e) {
      e.printStackTrace();
    }
  }
}
TOP

Related Classes of org.newdawn.slick.tests.SoundTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.