SoundManager, SoundBuffer Fixed, BufferUtils.java rename to BufferUtilsEngine.java to avoid conflict with org.lwjgl.BufferUtils

Le son fonctionne yay
This commit is contained in:
Antoine 2021-05-31 18:45:38 +02:00
parent 00a19177c7
commit bd587a5587
9 changed files with 59 additions and 40 deletions

View File

@ -9,7 +9,6 @@ public class JsonToJava {
JSONParser jsonP = new JSONParser();
try {
JSONObject jsonO = (JSONObject)jsonP.parse(new FileReader("src/configuration/config.json"));
String test = (String) jsonO.get("test");
System.out.println("Name :"+ test);
} catch (FileNotFoundException e) {

View File

@ -1,6 +1,7 @@
package engine;
import engine.input.Input;
//import engine.input.gamepadInput;
import engine.input.gamepadInput;
import engine.math.*;
import engine.object.*;
@ -173,12 +174,12 @@ public class Engine {
soundManager.setListener(soundListener);
// SoundBuffer jumpSoundBuffer = new SoundBuffer("sound/jump.ogg"); EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ff893802818, pid=1788, tid=4548
// SoundSource soundSource = new SoundSource(true, false);
// soundSource.setBuffer(jumpSoundBuffer.getBufferId());
//
// soundManager.addSoundSource("jump", soundSource);
// soundManager.playSoundSource("jump");
SoundBuffer jumpSoundBuffer = new SoundBuffer("sound/jump.ogg");
SoundSource soundSource = new SoundSource(true, false);
soundSource.setBuffer(jumpSoundBuffer.getBufferId());
soundManager.addSoundSource("jump", soundSource);
soundManager.playSoundSource("jump");
/*
Engine Init
@ -217,7 +218,7 @@ public class Engine {
// Game logic should fit here
if (present) { //sprite //bindings
gamepadInput.gamepadInput(zangief, speed, buttonA, buttonB, buttonX, buttonY);
gamepadInput.gamepadInput(zangief, speed, buttonA, buttonB, buttonX, buttonY);
System.out.println( " \n A :" + gamepadInput.buttonA_pressed +
" \n B :" + gamepadInput.buttonB_pressed +
@ -225,7 +226,7 @@ public class Engine {
" \n X :" + gamepadInput.buttonX_pressed);
}
Input.keyboardInput(zangief, speed);
// Input.keyboardInput(zangief, speed);
// input(smiley2, speed);
/*

View File

@ -1,6 +1,6 @@
package engine.graphics;
import engine.utils.BufferUtils;
import engine.utils.BufferUtilsEngine;
import org.lwjgl.opengl.GL11;
import java.awt.image.BufferedImage;
@ -49,7 +49,7 @@ public class Texture {
glBindTexture(GL_TEXTURE_2D, result);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
GL11.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, BufferUtils.createIntBuffer(data));
GL11.glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, BufferUtilsEngine.createIntBuffer(data));
glGenerateMipmap(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);
return result;

View File

@ -1,6 +1,6 @@
package engine.graphics;
import engine.utils.BufferUtils;
import engine.utils.BufferUtilsEngine;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.GL15.*;
@ -28,7 +28,7 @@ public class VertexArray {
EBO = glGenBuffers();
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, BufferUtils.createByteBuffer(indices), GL_STATIC_DRAW);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, BufferUtilsEngine.createByteBuffer(indices), GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
@ -37,7 +37,7 @@ public class VertexArray {
private void createVertexBufferObject(float[] vertices){
VBO = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, BufferUtils.createFloatBuffer(vertices), GL_STATIC_DRAW);
glBufferData(GL_ARRAY_BUFFER, BufferUtilsEngine.createFloatBuffer(vertices), GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
glEnableVertexAttribArray(0);
}
@ -45,7 +45,7 @@ public class VertexArray {
private void createColorBufferObject(float[] color){
CBO = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, CBO);
glBufferData(GL_ARRAY_BUFFER, BufferUtils.createFloatBuffer(color), GL_STATIC_DRAW);
glBufferData(GL_ARRAY_BUFFER, BufferUtilsEngine.createFloatBuffer(color), GL_STATIC_DRAW);
glVertexAttribPointer(1, 3, GL_FLOAT, false, 0, 0);
glEnableVertexAttribArray(1);
}
@ -53,19 +53,19 @@ public class VertexArray {
private void createTextureBufferObject(float[] texture){
TBO = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, TBO);
glBufferData(GL_ARRAY_BUFFER, BufferUtils.createFloatBuffer(texture), GL_STATIC_DRAW);
glBufferData(GL_ARRAY_BUFFER, BufferUtilsEngine.createFloatBuffer(texture), GL_STATIC_DRAW);
glVertexAttribPointer(2, 2, GL_FLOAT, false, 0, 0);
glEnableVertexAttribArray(2);
}
public void swapVertexBufferObject(float[] vertices){
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, BufferUtils.createFloatBuffer(vertices), GL_STATIC_DRAW);
glBufferData(GL_ARRAY_BUFFER, BufferUtilsEngine.createFloatBuffer(vertices), GL_STATIC_DRAW);
}
public void swapTextureBufferObject(float [] texture){
glBindBuffer(GL_ARRAY_BUFFER, TBO);
glBufferData(GL_ARRAY_BUFFER, BufferUtils.createFloatBuffer(texture), GL_STATIC_DRAW);
glBufferData(GL_ARRAY_BUFFER, BufferUtilsEngine.createFloatBuffer(texture), GL_STATIC_DRAW);
}
public void bind(){

View File

@ -15,7 +15,6 @@ import static org.lwjgl.opengl.GL11.*;
public class Input extends GLFWKeyCallback {
public static boolean[] keys = new boolean[65536];
public static boolean keyPressed = false;
@Override
public void invoke(long window, int key, int scancode, int action, int mods) {
@ -38,6 +37,9 @@ public class Input extends GLFWKeyCallback {
assert gamepadAxes != null;
assert gamepadButton != null;
String name = GLFW.glfwGetJoystickName(GLFW_JOYSTICK_1);
System.out.println("GamePad Name :" + name);
if (gamepadButton.get(0) ==1 ) { // appuie sur croix(PlayStation) A (Xbox)
@ -46,9 +48,9 @@ public class Input extends GLFWKeyCallback {
if ( (gamepadAxes.get(2) < -0.1 || gamepadAxes.get(2) > 0.1) ) { // de droite à gauche //joystick gauche
token.translate(new Vector3f (5 * speed * gamepadAxes.get(2), 0.0f, 0.0f));
if ( gamepadAxes.get(2) < -0.1 ){
token.setTextureWrap(121,0,57,80, ObjectGl.STICK_TOP);
token.setTextureWrap(121,0,57,80, ObjectGl.DEFAULT);
}else if (gamepadAxes.get(2) > 0.1) {
token.setTextureWrap(178,0,62,82, ObjectGl.STICK_TOP);
token.setTextureWrap(178,0,62,82, ObjectGl.DEFAULT);
}
}
@ -86,7 +88,7 @@ public class Input extends GLFWKeyCallback {
}
public static void keyboardInput(ObjectGl token, int speed) {
boolean keyPressed = false;
if (Input.isKeyDown(GLFW.GLFW_KEY_S)) {
token.setTextureWrap(161,260,56,59, ObjectGl.STICK_BOTTOM);
keyPressed = true;

View File

@ -1,6 +1,6 @@
package engine.math;
import engine.utils.BufferUtils;
import engine.utils.BufferUtilsEngine;
import java.nio.FloatBuffer;
@ -117,7 +117,7 @@ public class Matrix4f {
}
public FloatBuffer toFloatBuffer() {
return BufferUtils.createFloatBuffer(elements);
return BufferUtilsEngine.createFloatBuffer(elements);
}
}

View File

@ -5,6 +5,7 @@
package engine.sound;
import engine.utils.FileUtils;
import org.lwjgl.stb.STBVorbisInfo;
import org.lwjgl.system.MemoryStack;
import org.lwjgl.system.MemoryUtil;
@ -13,7 +14,6 @@ import java.nio.ByteBuffer;
import java.nio.IntBuffer;
import java.nio.ShortBuffer;
import static engine.utils.BufferUtils.StringToByteBuffer;
import static org.lwjgl.openal.AL10.*;
import static org.lwjgl.stb.STBVorbis.*;
import static org.lwjgl.system.MemoryUtil.NULL;
@ -56,19 +56,19 @@ public class SoundBuffer {
/**
* Source : https://github.com/lwjglgamedev/lwjglbook/blob/master/chapter28/src/main/java/org/lwjglb/engine/sound/SoundBuffer.java
* lis un fichier .ogg et le convertis en .pcm seul format lisible par openAl
* @param resource le fichier .ogg
* @param path chemin vers un fichier .ogg
* @param info STBVorbisInfo
* @return pcm
* @throws Exception MemoryStack.stackPush()
*/
private ShortBuffer readVorbis(String resource, STBVorbisInfo info) throws Exception {
private ShortBuffer readVorbis(String path, STBVorbisInfo info) throws Exception {
try (MemoryStack stack = MemoryStack.stackPush()) {
vorbis = StringToByteBuffer(resource);
this.vorbis = FileUtils.loadAsByteBuffer(path);
IntBuffer error = stack.mallocInt(1);
long decoder = stb_vorbis_open_memory(vorbis, error, null);
if (decoder == NULL) {
throw new RuntimeException("Failed to open Ogg Vorbis file. Error: " + error.get(0));
}
} //Failed to open Ogg Vorbis file. Error: 30 / 34
stb_vorbis_get_info(decoder, info);

View File

@ -1,13 +1,16 @@
package engine.utils;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.nio.channels.FileChannel;
public class BufferUtils {
public class BufferUtilsEngine {
private BufferUtils() {
private BufferUtilsEngine() {
}
@ -29,8 +32,4 @@ public class BufferUtils {
return result;
}
public static ByteBuffer StringToByteBuffer(String msg){
return ByteBuffer.wrap(msg.getBytes());
}
}

View File

@ -1,9 +1,13 @@
package engine.utils;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import org.lwjgl.BufferUtils;
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.SeekableByteChannel;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FileUtils {
@ -17,13 +21,27 @@ public class FileUtils {
BufferedReader reader = new BufferedReader(new FileReader(file));
String buffer = "";
while ((buffer = reader.readLine()) != null) {
result.append(buffer +"\n");
result.append(buffer).append("\n");
}
reader.close();
} catch (IOException e){
e.printStackTrace();
System.exit(1);
}
return result.toString();
}
public static ByteBuffer loadAsByteBuffer(String file) throws IOException{
ByteBuffer buffer;
Path path = Paths.get(file);
try (SeekableByteChannel fc = Files.newByteChannel(path)) {
buffer = BufferUtils.createByteBuffer((int) fc.size() + 1);
while (fc.read(buffer) != -1) ;
}
buffer.flip();
return buffer;
}
}