TestAudioDeviceDisconnect.java 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package jme3test.audio;
  2. import com.jme3.app.SimpleApplication;
  3. import com.jme3.audio.AudioData;
  4. import com.jme3.audio.AudioNode;
  5. import com.jme3.input.KeyInput;
  6. import com.jme3.input.controls.ActionListener;
  7. import com.jme3.input.controls.KeyTrigger;
  8. import com.jme3.input.controls.Trigger;
  9. /**
  10. * This test demonstrates that destroying and recreating the OpenAL Context
  11. * upon device disconnection is not an optimal solution.
  12. *
  13. * As shown, AudioNode instances playing in a loop cease to play after a device disconnection
  14. * and would require explicit restarting.
  15. *
  16. * This test serves solely to highlight this issue,
  17. * which should be addressed with a more robust solution within
  18. * the ALAudioRenderer class in a dedicated future pull request on Git.
  19. */
  20. public class TestAudioDeviceDisconnect extends SimpleApplication implements ActionListener {
  21. public static void main(String[] args) {
  22. TestAudioDeviceDisconnect test = new TestAudioDeviceDisconnect();
  23. test.start();
  24. }
  25. private AudioNode audioSource;
  26. @Override
  27. public void simpleInitApp() {
  28. audioSource = new AudioNode(assetManager,
  29. "Sound/Environment/Ocean Waves.ogg", AudioData.DataType.Buffer);
  30. audioSource.setName("Waves");
  31. audioSource.setLooping(true);
  32. rootNode.attachChild(audioSource);
  33. audioSource.play();
  34. registerInputMappings();
  35. }
  36. @Override
  37. public void onAction(String name, boolean isPressed, float tpf) {
  38. if (!isPressed) return;
  39. if (name.equals("play")) {
  40. // re-play active sounds
  41. audioSource.play();
  42. }
  43. }
  44. private void registerInputMappings() {
  45. addMapping("play", new KeyTrigger(KeyInput.KEY_SPACE));
  46. }
  47. private void addMapping(String mappingName, Trigger... triggers) {
  48. inputManager.addMapping(mappingName, triggers);
  49. inputManager.addListener(this, mappingName);
  50. }
  51. }