Package org.lwjgl.test.openal

Source Code of org.lwjgl.test.openal.ALCCaptureTest

/*
* Copyright (c) 2002-2008 LWJGL Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
*   notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
*   notice, this list of conditions and the following disclaimer in the
*   documentation and/or other materials provided with the distribution.
*
* * Neither the name of 'LWJGL' nor the names of
*   its contributors may be used to endorse or promote products derived
*   from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.lwjgl.test.openal;

import java.nio.ByteBuffer;
import java.nio.IntBuffer;

import org.lwjgl.BufferUtils;
import org.lwjgl.openal.AL;
import org.lwjgl.openal.AL10;
import org.lwjgl.openal.ALC10;
import org.lwjgl.openal.ALC11;
import org.lwjgl.openal.ALCdevice;
import org.lwjgl.openal.OpenALException;

/**
*
* This is a test for the ALC part of OpenAL
*
* @author Brian Matzon <brian@matzon.dk>
* @version $Revision: 2286 $
* $Id: ALCTest.java 2286 2006-03-23 19:32:21Z matzon $
*/
public class ALCCaptureTest extends BasicTest {

  /**
   * Creates an instance of ALCTest
   */
  public ALCCaptureTest() {
    super();
  }

  /**
   * Runs the actual test, using supplied arguments
   */
  protected void execute(String[] args) {
    int lastError = ALC10.ALC_NO_ERROR;
    IntBuffer sampleCount = BufferUtils.createIntBuffer(1);
   
    int state = AL10.AL_PLAYING;
    int FMT = AL10.AL_FORMAT_MONO16;
    int FMTSIZE  = 16/8;
    int FREQ = 44100;
    int TIME = 5;
    int SAMPS = (FREQ * TIME);
    ByteBuffer buf = BufferUtils.createByteBuffer(SAMPS * FMTSIZE);   

    // check that capture is available
    if(!ALC10.alcIsExtensionPresent(AL.getDevice(), "ALC_EXT_CAPTURE")) {
      throw new OpenALException("ALC_EXT_CAPTURE extension not available");
    }
   
    // get list of devices
    String[] captureDevices = ALC10.alcGetString(null, ALC11.ALC_CAPTURE_DEVICE_SPECIFIER).split("\0");
    System.out.println("Available Capture Devices: ");
    for(int i=0; i<captureDevices.length; i++) {
      System.out.println(i + ": " + captureDevices[i]);
    }
   
    String defaultRecorder = ALC10.alcGetString(AL.getDevice(), ALC11.ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER);
    System.out.println("Default capture device: " + defaultRecorder);
   
    ALCdevice device = ALC11.alcCaptureOpenDevice(null, FREQ, FMT, SAMPS);

    if(device != null) {
      // record some sound
      // =====================================
      System.out.print("Recording using " + ALC10.alcGetString(device, ALC11.ALC_CAPTURE_DEVICE_SPECIFIER) + "...");
      ALC11.alcCaptureStart(device);
      while (sampleCount.get(0) < SAMPS) {
        pause(1000);
        ALC10.alcGetInteger(device, ALC11.ALC_CAPTURE_SAMPLES, sampleCount);
      }
      System.out.println("done");
      ALC11.alcCaptureStop(device);

      // capure the samples
      ALC11.alcCaptureSamples(device, buf, SAMPS);
      ALC11.alcCaptureCloseDevice(device);
      // -------------------------------------
     
      // play back recording
      // ===================
          IntBuffer buffers = BufferUtils.createIntBuffer(1);
          IntBuffer sources = BufferUtils.createIntBuffer(1);       
         
          buffers.position(0).limit(1);
          AL10.alGenBuffers(buffers);

          sources.position(0).limit(1);
          AL10.alGenSources(sources);

          System.out.print("Playing...");

        AL10.alBufferData(buffers.get(0), FMT, buf, FREQ);
        AL10.alSourcei(sources.get(0), AL10.AL_BUFFER, buffers.get(0));
        AL10.alSourcei(sources.get(0), AL10.AL_LOOPING, AL10.AL_FALSE);
        AL10.alSourcePlay(sources.get(0));

        while (state == AL10.AL_PLAYING)
        {
            pause(100);
            state = AL10.alGetSourcei(sources.get(0), AL10.AL_SOURCE_STATE);
        }

        System.out.println("done");

        AL10.alDeleteSources(sources);
        AL10.alDeleteBuffers(buffers);
    }   

    alExit();
  }

  /**
   * main entry point
   *
   * @param args String array containing arguments
   */
  public static void main(String[] args) {
    ALCCaptureTest alcTest = new ALCCaptureTest();
    alcTest.execute(args);
    System.exit(0);
  }
}
TOP

Related Classes of org.lwjgl.test.openal.ALCCaptureTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.