| 
							- /*
 - opensl_io.c:
 - Android OpenSL input/output module header
 - Copyright (c) 2012, Victor Lazzarini
 - 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 the <organization> 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 <COPYRIGHT HOLDER> 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.
 - */
 - 
 - #ifndef OPENSL_IO
 - #define OPENSL_IO
 - 
 - #include <SLES/OpenSLES.h>
 - #include <SLES/OpenSLES_Android.h>
 - #include <pthread.h>
 - #include <stdlib.h>
 - 
 - typedef struct threadLock_{
 -   pthread_mutex_t m;
 -   pthread_cond_t  c;
 -   unsigned char   s;
 - } threadLock;
 - 
 - #ifdef __cplusplus
 - extern "C" {
 - #endif
 - 
 - typedef struct opensl_stream {
 -   
 -   // engine interfaces
 -   SLObjectItf engineObject;
 -   SLEngineItf engineEngine;
 - 
 -   // output mix interfaces
 -   SLObjectItf outputMixObject;
 - 
 -   // buffer queue player interfaces
 -   SLObjectItf bqPlayerObject;
 -   SLPlayItf bqPlayerPlay;
 -   SLAndroidSimpleBufferQueueItf bqPlayerBufferQueue;
 -   SLEffectSendItf bqPlayerEffectSend;
 - 
 -   // recorder interfaces
 -   SLObjectItf recorderObject;
 -   SLRecordItf recorderRecord;
 -   SLAndroidSimpleBufferQueueItf recorderBufferQueue;
 - 
 -   // buffer indexes
 -   int currentInputIndex;
 -   int currentOutputIndex;
 - 
 -   // current buffer half (0, 1)
 -   int currentOutputBuffer;
 -   int currentInputBuffer;
 -   
 -   // buffers
 -   short *outputBuffer[2];
 -   short *inputBuffer[2];
 - 
 -   // size of buffers
 -   int outBufSamples;
 -   int inBufSamples;
 - 
 -   // locks
 -   void*  inlock;
 -   void*  outlock;
 - 
 -   double time;
 -   int inchannels;
 -   int outchannels;
 -   int   sr;
 - 
 - } OPENSL_STREAM;
 - 
 -   /*
 -   Open the audio device with a given sampling rate (sr), input and output channels and IO buffer size
 -   in frames. Returns a handle to the OpenSL stream
 -   */
 -   OPENSL_STREAM* android_OpenAudioDevice(int sr, int inchannels, int outchannels, int bufferframes);
 -   /* 
 -   Close the audio device 
 -   */
 -   void android_CloseAudioDevice(OPENSL_STREAM *p);
 -   /* 
 -   Read a buffer from the OpenSL stream *p, of size samples. Returns the number of samples read.
 -   */
 -   int android_AudioIn(OPENSL_STREAM *p, float *buffer,int size);
 -   /*
 -   Write a buffer to the OpenSL stream *p, of size samples. Returns the number of samples written.
 -   */
 -   int android_AudioOut(OPENSL_STREAM *p, float *buffer,int size);
 -   /*
 -   Get the current IO block time in seconds
 -   */
 -   double android_GetTimestamp(OPENSL_STREAM *p);
 -   
 - #ifdef __cplusplus
 - };
 - #endif
 - 
 - #endif // #ifndef OPENSL_IO
 
 
  |