AudioMaster.java 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package eu.tankernn.gameEngine.audio;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import org.lwjgl.LWJGLException;
  5. import org.lwjgl.openal.AL;
  6. import org.lwjgl.openal.AL10;
  7. import org.lwjgl.util.WaveData;
  8. import org.lwjgl.util.vector.Vector3f;
  9. public class AudioMaster {
  10. private static final String SOUND_PATH = "sound/";
  11. private Map<String, Integer> buffers = new HashMap<>();
  12. public AudioMaster() {
  13. try {
  14. AL.create();
  15. } catch (LWJGLException e) {
  16. e.printStackTrace();
  17. }
  18. }
  19. public void setListenerData(float x, float y, float z) {
  20. AL10.alListener3f(AL10.AL_POSITION, x, y, z);
  21. AL10.alListener3f(AL10.AL_VELOCITY, 0, 0, 0);
  22. }
  23. public int loadSound(String file) {
  24. if (buffers.containsKey(file))
  25. return buffers.get(file);
  26. int buffer = AL10.alGenBuffers();
  27. buffers.put(file, buffer);
  28. WaveData waveFile = WaveData.create(SOUND_PATH + file);
  29. AL10.alBufferData(buffer, waveFile.format, waveFile.data, waveFile.samplerate);
  30. waveFile.dispose();
  31. return buffer;
  32. }
  33. public void finalize() {
  34. for (int buffer: buffers.values()) {
  35. AL10.alDeleteBuffers(buffer);
  36. }
  37. AL.destroy();
  38. }
  39. public void setListenerPosition(Vector3f position) {
  40. setListenerData(position.x, position.y, position.z);
  41. }
  42. }