1package jme3test.helloworld;
2
3import com.jme3.app.SimpleApplication;
4import com.jme3.audio.AudioNode;
5import com.jme3.input.controls.ActionListener;
6import com.jme3.input.controls.MouseButtonTrigger;
7import com.jme3.material.Material;
8import com.jme3.math.ColorRGBA;
9import com.jme3.math.Vector3f;
10import com.jme3.scene.Geometry;
11import com.jme3.scene.shape.Box;
12
13/** Sample 11 - playing 3D audio. */
14public class HelloAudio extends SimpleApplication {
15
16  private AudioNode audio_gun;
17  private AudioNode audio_nature;
18  private Geometry player;
19
20  public static void main(String[] args) {
21    HelloAudio app = new HelloAudio();
22    app.start();
23  }
24
25  @Override
26  public void simpleInitApp() {
27    flyCam.setMoveSpeed(40);
28
29    /** just a blue box floating in space */
30    Box box1 = new Box(Vector3f.ZERO, 1, 1, 1);
31    player = new Geometry("Player", box1);
32    Material mat1 = new Material(assetManager,
33            "Common/MatDefs/Misc/Unshaded.j3md");
34    mat1.setColor("Color", ColorRGBA.Blue);
35    player.setMaterial(mat1);
36    rootNode.attachChild(player);
37
38    /** custom init methods, see below */
39    initKeys();
40    initAudio();
41  }
42
43  /** We create two audio nodes. */
44  private void initAudio() {
45    /* gun shot sound is to be triggered by a mouse click. */
46    audio_gun = new AudioNode(assetManager, "Sound/Effects/Gun.wav", false);
47    audio_gun.setLooping(false);
48    audio_gun.setVolume(2);
49    rootNode.attachChild(audio_gun);
50
51    /* nature sound - keeps playing in a loop. */
52    audio_nature = new AudioNode(assetManager, "Sound/Environment/Nature.ogg", true);
53    audio_nature.setLooping(true);  // activate continuous playing
54    audio_nature.setPositional(true);
55    audio_nature.setLocalTranslation(Vector3f.ZERO.clone());
56    audio_nature.setVolume(3);
57    rootNode.attachChild(audio_nature);
58    audio_nature.play(); // play continuously!
59  }
60
61  /** Declaring "Shoot" action, mapping it to a trigger (mouse click). */
62  private void initKeys() {
63    inputManager.addMapping("Shoot", new MouseButtonTrigger(0));
64    inputManager.addListener(actionListener, "Shoot");
65  }
66
67  /** Defining the "Shoot" action: Play a gun sound. */
68  private ActionListener actionListener = new ActionListener() {
69    @Override
70    public void onAction(String name, boolean keyPressed, float tpf) {
71      if (name.equals("Shoot") && !keyPressed) {
72        audio_gun.playInstance(); // play each instance once!
73      }
74    }
75  };
76
77  /** Move the listener with the a camera - for 3D audio. */
78  @Override
79  public void simpleUpdate(float tpf) {
80    listener.setLocation(cam.getLocation());
81    listener.setRotation(cam.getRotation());
82  }
83
84}
85