LWJGL
May 22, 2012, 15:19:59 *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
News: LWJGL 2.8.3 released!
 
   Home   Help Search Login Register  



Pages: [1]
  Print  
Author Topic: [solved] lwjgl-2.6 sample lesson2; looking for the source code ;)  (Read 887 times)
Cottonwood
Regular nerd
**
Posts: 50



WWW
« on: December 12, 2010, 13:59:56 »

I tried to build the source code for the lesson 2 by updating the source from lesson 1 using the comments in between the code snippets of Lesson2. Including the method kbhit() from the download this leaded to the following code:
Code:
import java.io.IOException;
import java.io.FileNotFoundException;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.util.Scanner;
 
import org.lwjgl.BufferUtils;
import org.lwjgl.LWJGLException;
import org.lwjgl.openal.AL;
import org.lwjgl.openal.AL10;
import org.lwjgl.util.WaveData;
import org.lwjgl.Sys;
 
public class Lesson2 {
  /** Buffers hold sound data. */
  IntBuffer buffer = BufferUtils.createIntBuffer(1);
 
  /** Sources are points emitting sound. */
  IntBuffer source = BufferUtils.createIntBuffer(1);
 
  /** Position of the source sound. */
  FloatBuffer sourcePos = (FloatBuffer)BufferUtils.createFloatBuffer(3).put(new float[] { 0.0f, 0.0f, 0.0f }).rewind();
 
  /** Velocity of the source sound. */
  FloatBuffer sourceVel = (FloatBuffer)BufferUtils.createFloatBuffer(3).put(new float[] { 0.0f, 0.0f, 0.1f }).rewind();
 
  /** Position of the listener. */
  FloatBuffer listenerPos = (FloatBuffer)BufferUtils.createFloatBuffer(3).put(new float[] { 0.0f, 0.0f, 0.0f }).rewind();
 
  /** Velocity of the listener. */
  FloatBuffer listenerVel = (FloatBuffer)BufferUtils.createFloatBuffer(3).put(new float[] { 0.0f, 0.0f, 0.0f }).rewind();
 
  /** Orientation of the listener. (first 3 elements are "at", second 3 are "up") */
  FloatBuffer listenerOri = (FloatBuffer)BufferUtils.createFloatBuffer(6).put(new float[] { 0.0f, 0.0f, -1.0f,  0.0f, 1.0f, 0.0f }).rewind();
 
  /**
  * boolean LoadALData()
  *
  *  This function will load our sample data from the disk using the Alut
  *  utility and send the data into OpenAL as a buffer. A source is then
  *  also created to play that buffer.
  */
  int loadALData() {
    // Load wav data into a buffer.
    AL10.alGenBuffers(buffer);
 
    if(AL10.alGetError() != AL10.AL_NO_ERROR)
      return AL10.AL_FALSE;
 
    //Loads the wave file from your file system
    /*java.io.FileInputStream fin = null;
    try {
      fin = new java.io.FileInputStream("Footsteps.wav");
    } catch (java.io.FileNotFoundException ex) {
      ex.printStackTrace();
      return AL10.AL_FALSE;
    }
    WaveData waveFile = WaveData.create(fin);
    try {
      fin.close();
    } catch (java.io.IOException ex) {
    }*/
 
    //Loads the wave file from this class's package in your classpath
    WaveData waveFile = WaveData.create("Footsteps.wav");
 
    AL10.alBufferData(buffer.get(0), waveFile.format, waveFile.data, waveFile.samplerate);
    waveFile.dispose();
 
    // Bind the buffer with the source.
    AL10.alGenSources(source);
 
    if (AL10.alGetError() != AL10.AL_NO_ERROR)
      return AL10.AL_FALSE;
 
    AL10.alSourcei(source.get(0), AL10.AL_BUFFER,   buffer.get(0) );
    AL10.alSourcef(source.get(0), AL10.AL_PITCH,    1.0f          );
    AL10.alSourcef(source.get(0), AL10.AL_GAIN,     1.0f          );
    AL10.alSource (source.get(0), AL10.AL_POSITION, sourcePos     );
    AL10.alSource (source.get(0), AL10.AL_VELOCITY, sourceVel     );
    AL10.alSourcei(source.get(0), AL10.AL_LOOPING,  AL10.AL_TRUE  );
 
    // Do another error check and return.
    if (AL10.alGetError() == AL10.AL_NO_ERROR)
      return AL10.AL_TRUE;
 
    return AL10.AL_FALSE;
  }
 
  /**
   * void setListenerValues()
   *
   *  We already defined certain values for the Listener, but we need
   *  to tell OpenAL to use that data. This function does just that.
   */
  void setListenerValues() {
    AL10.alListener(AL10.AL_POSITION,    listenerPos);
    AL10.alListener(AL10.AL_VELOCITY,    listenerVel);
    AL10.alListener(AL10.AL_ORIENTATION, listenerOri);
  }
 
  /**
   * void killALData()
   *
   *  We have allocated memory for our buffers and sources which needs
   *  to be returned to the system. This function frees that memory.
   */
  void killALData() {
    AL10.alDeleteSources(source);
    AL10.alDeleteBuffers(buffer);
  }
 
  public static void main(String[] args) {
    new Lesson2().execute();
  }

  /**
   *  Check for keyboard hit
   */  
  private boolean kbhit() {
    try {
      return (System.in.available() != 0);
    } catch (IOException ioe) {
    }
    return false;
  }  

  public void execute() {
    // Initialize OpenAL and clear the error bit.
    try{
      AL.create();
    } catch (LWJGLException le) {
      le.printStackTrace();
      return;
    }
    AL10.alGetError();
 
    // Load the wav data.
    if(loadALData() == AL10.AL_FALSE) {
      System.out.println("Error loading data.");
      return;
    }
 
    setListenerValues();
 
    // Loop.
    long time = Sys.getTime();
    long elapse = 0;

    while (!kbhit()) {
     elapse += Sys.getTime() - time;
     time += elapse;

     if (elapse > 5000) {
      elapse = 0;

      sourcePos.put(0, sourcePos.get(0) + sourceVel.get(0));
      sourcePos.put(1, sourcePos.get(1) + sourceVel.get(1));
      sourcePos.put(2, sourcePos.get(2) + sourceVel.get(2));

      AL10.alSource(source.get(0), AL10.AL_POSITION, sourcePos);
      };
    }
    killALData();
  }
}

When the program runs only the core temperature increases. But there are no footsteps.

What's wrong?

//Edit: I could fix the "temperature problem" with a sleep(100):
Code:
     AL10.alSource(source.get(0), AL10.AL_POSITION, sourcePos);
      };
      try{
          Thread.sleep(100);
      }
      catch(InterruptedException e){
          System.out.println("Sleep Interrupted");
      }
    }
    killALData();

But the missing sound problem remains.
Logged

Regards. Cottonwood.
Cottonwood
Regular nerd
**
Posts: 50



WWW
« Reply #1 on: December 13, 2010, 14:35:05 »

If I'd taken the last code snippet from the downloaded zip the program would have worked earlier. Now it does.
Here's the working code.
Code:
import java.io.IOException;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
 
import org.lwjgl.BufferUtils;
import org.lwjgl.LWJGLException;
import org.lwjgl.openal.AL;
import org.lwjgl.openal.AL10;
import org.lwjgl.util.WaveData;
import org.lwjgl.Sys;
 
public class Lesson2 {
    /** Buffers hold sound data. */
    IntBuffer buffer = BufferUtils.createIntBuffer(1);
 
    /** Sources are points emitting sound. */
    IntBuffer source = BufferUtils.createIntBuffer(1);
 
    /** Position of the source sound. */
    FloatBuffer sourcePos = (FloatBuffer)BufferUtils.createFloatBuffer(3).put(new float[] { 0.0f, 0.0f, 0.0f }).rewind();
 
    /** Velocity of the source sound. */
    FloatBuffer sourceVel = (FloatBuffer)BufferUtils.createFloatBuffer(3).put(new float[] { 0.0f, 0.0f, 0.1f }).rewind();
 
    /** Position of the listener. */
    FloatBuffer listenerPos = (FloatBuffer)BufferUtils.createFloatBuffer(3).put(new float[] { 0.0f, 0.0f, 0.0f }).rewind();
 
    /** Velocity of the listener. */
    FloatBuffer listenerVel = (FloatBuffer)BufferUtils.createFloatBuffer(3).put(new float[] { 0.0f, 0.0f, 0.0f }).rewind();
 
    /** Orientation of the listener. (first 3 elements are "at", second 3 are "up") */
    FloatBuffer listenerOri = (FloatBuffer)BufferUtils.createFloatBuffer(6).put(new float[] { 0.0f, 0.0f, -1.0f,    0.0f, 1.0f, 0.0f }).rewind();
 
    /**
    * boolean LoadALData()
    *
    *    This function will load our sample data from the disk using the Alut
    *    utility and send the data into OpenAL as a buffer. A source is then
    *    also created to play that buffer.
    */
    int loadALData() {
        // Load wav data into a buffer.
        AL10.alGenBuffers(buffer);
 
        if(AL10.alGetError() != AL10.AL_NO_ERROR)
            return AL10.AL_FALSE;
/*
        //Loads the wave file from your file system
        java.io.FileInputStream fin = null;
        try {
            fin = new java.io.FileInputStream("Footsteps.wav");
        } catch (java.io.FileNotFoundException ex) {
            System.out.println("Datei nicht gefunden.");
            ex.printStackTrace();
            return AL10.AL_FALSE;
        }
    System.out.println("Datei geöffnet.");
        WaveData waveFile = WaveData.create(fin);
        try {
            fin.close();
        } catch (java.io.IOException ex) {
        }
*/
        //Loads the wave file from this class's package in your classpath
        WaveData waveFile = WaveData.create("Footsteps.wav");
 
        AL10.alBufferData(buffer.get(0), waveFile.format, waveFile.data, waveFile.samplerate);
        waveFile.dispose();
 
        // Bind the buffer with the source.
        AL10.alGenSources(source);
 
        if (AL10.alGetError() != AL10.AL_NO_ERROR)
            return AL10.AL_FALSE;
 
        AL10.alSourcei(source.get(0), AL10.AL_BUFFER,     buffer.get(0) );
        AL10.alSourcef(source.get(0), AL10.AL_PITCH,        1.0f                    );
        AL10.alSourcef(source.get(0), AL10.AL_GAIN,         1.0f                    );
        AL10.alSource (source.get(0), AL10.AL_POSITION, sourcePos         );
        AL10.alSource (source.get(0), AL10.AL_VELOCITY, sourceVel         );
        AL10.alSourcei(source.get(0), AL10.AL_LOOPING,    AL10.AL_TRUE    );
 
        // Do another error check and return.
        if (AL10.alGetError() == AL10.AL_NO_ERROR)
            return AL10.AL_TRUE;
 
        return AL10.AL_FALSE;
    }
 
    /**
     * void setListenerValues()
     *
     *    We already defined certain values for the Listener, but we need
     *    to tell OpenAL to use that data. This function does just that.
     */
    void setListenerValues() {
        AL10.alListener(AL10.AL_POSITION,        listenerPos);
        AL10.alListener(AL10.AL_VELOCITY,        listenerVel);
        AL10.alListener(AL10.AL_ORIENTATION, listenerOri);
    }
 
    /**
     * void killALData()
     *
     *    We have allocated memory for our buffers and sources which needs
     *    to be returned to the system. This function frees that memory.
     */
    void killALData() {
        AL10.alDeleteSources(source);
        AL10.alDeleteBuffers(buffer);
    }
 
    public static void main(String[] args) {
        new Lesson2().execute();
    }

    public void execute() {

        // Initialize OpenAL and clear the error bit.
        try{
            AL.create();
        } catch (LWJGLException le) {
            le.printStackTrace();
            return;
        }

        AL10.alGetError();
 
        // Load the wav data.
        if(loadALData() == AL10.AL_FALSE) {
            System.out.println("Error loading data.");
            return;
        }

        setListenerValues();

        AL10.alSourcePlay(source.get(0));

        // Loop.
        long time = Sys.getTime();
        long elapse = 0;

        System.out.println("Press ENTER to exit");

        while (!kbhit()) {
            elapse += Sys.getTime() - time;
            time += elapse;

            if (elapse > 5000) {
                elapse = 0;

                sourcePos.put(0, sourcePos.get(0) + sourceVel.get(0));
                sourcePos.put(1, sourcePos.get(1) + sourceVel.get(1));
                sourcePos.put(2, sourcePos.get(2) + sourceVel.get(2));

                AL10.alSource(source.get(0), AL10.AL_POSITION, sourcePos);
            };
            try{
                    Thread.sleep(100);
            }
            catch(InterruptedException e){
                    System.out.println("Sleep Interrupted");
            }
        }
        killALData();
        AL.destroy();
    }
    /**
     *    Check for keyboard hit
     */   
    private boolean kbhit() {
        try {
            return (System.in.available() != 0);
        } catch (IOException ioe) {
        }
        return false;
    }
}
Logged

Regards. Cottonwood.
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines
SMFAds for Free Forums
Valid XHTML 1.0! Valid CSS!