Android: Add support for effects, filters, reverb, and environment to Android implementation of OpenAL Soft

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10609 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
iwg..om 12 years ago
parent 893bd93c60
commit 785d50f516
  1. BIN
      engine/lib/openal-soft/jME3-openal-soft-natives-android.jar
  2. BIN
      engine/lib/openal-soft/jarcontent/armeabi-v7a/libopenalsoftjme.so
  3. BIN
      engine/lib/openal-soft/jarcontent/armeabi/libopenalsoftjme.so
  4. BIN
      engine/lib/openal-soft/jarcontent/x86/libopenalsoftjme.so
  5. 670
      engine/src/android/com/jme3/audio/android/AL.java
  6. 310
      engine/src/android/com/jme3/audio/android/AndroidOpenALSoftAudioRenderer.java
  7. 1
      engine/src/openal-soft-native/android/Application.mk
  8. 150
      engine/src/openal-soft-native/android/com_jme3_audio_android_AndroidOpenALSoftAudioRenderer.cpp
  9. 112
      engine/src/openal-soft-native/android/com_jme3_audio_android_AndroidOpenALSoftAudioRenderer.h

@ -353,6 +353,676 @@ public class AL {
static final int AL_EXPONENT_DISTANCE = 0xD005;
static final int AL_EXPONENT_DISTANCE_CLAMPED = 0xD006;
/* ********** */
/* FROM efx.h */
/* ********** */
static final String ALC_EXT_EFX_NAME = "ALC_EXT_EFX";
static final int ALC_EFX_MAJOR_VERSION = 0x20001;
static final int ALC_EFX_MINOR_VERSION = 0x20002;
static final int ALC_MAX_AUXILIARY_SENDS = 0x20003;
///* Listener properties. */
//#define AL_METERS_PER_UNIT 0x20004
//
///* Source properties. */
static final int AL_DIRECT_FILTER = 0x20005;
static final int AL_AUXILIARY_SEND_FILTER = 0x20006;
//#define AL_AIR_ABSORPTION_FACTOR 0x20007
//#define AL_ROOM_ROLLOFF_FACTOR 0x20008
//#define AL_CONE_OUTER_GAINHF 0x20009
static final int AL_DIRECT_FILTER_GAINHF_AUTO = 0x2000A;
//#define AL_AUXILIARY_SEND_FILTER_GAIN_AUTO 0x2000B
//#define AL_AUXILIARY_SEND_FILTER_GAINHF_AUTO 0x2000C
//
//
///* Effect properties. */
//
///* Reverb effect parameters */
static final int AL_REVERB_DENSITY = 0x0001;
static final int AL_REVERB_DIFFUSION = 0x0002;
static final int AL_REVERB_GAIN = 0x0003;
static final int AL_REVERB_GAINHF = 0x0004;
static final int AL_REVERB_DECAY_TIME = 0x0005;
static final int AL_REVERB_DECAY_HFRATIO = 0x0006;
static final int AL_REVERB_REFLECTIONS_GAIN = 0x0007;
static final int AL_REVERB_REFLECTIONS_DELAY = 0x0008;
static final int AL_REVERB_LATE_REVERB_GAIN = 0x0009;
static final int AL_REVERB_LATE_REVERB_DELAY = 0x000A;
static final int AL_REVERB_AIR_ABSORPTION_GAINHF = 0x000B;
static final int AL_REVERB_ROOM_ROLLOFF_FACTOR = 0x000C;
static final int AL_REVERB_DECAY_HFLIMIT = 0x000D;
///* EAX Reverb effect parameters */
//#define AL_EAXREVERB_DENSITY 0x0001
//#define AL_EAXREVERB_DIFFUSION 0x0002
//#define AL_EAXREVERB_GAIN 0x0003
//#define AL_EAXREVERB_GAINHF 0x0004
//#define AL_EAXREVERB_GAINLF 0x0005
//#define AL_EAXREVERB_DECAY_TIME 0x0006
//#define AL_EAXREVERB_DECAY_HFRATIO 0x0007
//#define AL_EAXREVERB_DECAY_LFRATIO 0x0008
//#define AL_EAXREVERB_REFLECTIONS_GAIN 0x0009
//#define AL_EAXREVERB_REFLECTIONS_DELAY 0x000A
//#define AL_EAXREVERB_REFLECTIONS_PAN 0x000B
//#define AL_EAXREVERB_LATE_REVERB_GAIN 0x000C
//#define AL_EAXREVERB_LATE_REVERB_DELAY 0x000D
//#define AL_EAXREVERB_LATE_REVERB_PAN 0x000E
//#define AL_EAXREVERB_ECHO_TIME 0x000F
//#define AL_EAXREVERB_ECHO_DEPTH 0x0010
//#define AL_EAXREVERB_MODULATION_TIME 0x0011
//#define AL_EAXREVERB_MODULATION_DEPTH 0x0012
//#define AL_EAXREVERB_AIR_ABSORPTION_GAINHF 0x0013
//#define AL_EAXREVERB_HFREFERENCE 0x0014
//#define AL_EAXREVERB_LFREFERENCE 0x0015
//#define AL_EAXREVERB_ROOM_ROLLOFF_FACTOR 0x0016
//#define AL_EAXREVERB_DECAY_HFLIMIT 0x0017
//
///* Chorus effect parameters */
//#define AL_CHORUS_WAVEFORM 0x0001
//#define AL_CHORUS_PHASE 0x0002
//#define AL_CHORUS_RATE 0x0003
//#define AL_CHORUS_DEPTH 0x0004
//#define AL_CHORUS_FEEDBACK 0x0005
//#define AL_CHORUS_DELAY 0x0006
//
///* Distortion effect parameters */
//#define AL_DISTORTION_EDGE 0x0001
//#define AL_DISTORTION_GAIN 0x0002
//#define AL_DISTORTION_LOWPASS_CUTOFF 0x0003
//#define AL_DISTORTION_EQCENTER 0x0004
//#define AL_DISTORTION_EQBANDWIDTH 0x0005
//
///* Echo effect parameters */
//#define AL_ECHO_DELAY 0x0001
//#define AL_ECHO_LRDELAY 0x0002
//#define AL_ECHO_DAMPING 0x0003
//#define AL_ECHO_FEEDBACK 0x0004
//#define AL_ECHO_SPREAD 0x0005
//
///* Flanger effect parameters */
//#define AL_FLANGER_WAVEFORM 0x0001
//#define AL_FLANGER_PHASE 0x0002
//#define AL_FLANGER_RATE 0x0003
//#define AL_FLANGER_DEPTH 0x0004
//#define AL_FLANGER_FEEDBACK 0x0005
//#define AL_FLANGER_DELAY 0x0006
//
///* Frequency shifter effect parameters */
//#define AL_FREQUENCY_SHIFTER_FREQUENCY 0x0001
//#define AL_FREQUENCY_SHIFTER_LEFT_DIRECTION 0x0002
//#define AL_FREQUENCY_SHIFTER_RIGHT_DIRECTION 0x0003
//
///* Vocal morpher effect parameters */
//#define AL_VOCAL_MORPHER_PHONEMEA 0x0001
//#define AL_VOCAL_MORPHER_PHONEMEA_COARSE_TUNING 0x0002
//#define AL_VOCAL_MORPHER_PHONEMEB 0x0003
//#define AL_VOCAL_MORPHER_PHONEMEB_COARSE_TUNING 0x0004
//#define AL_VOCAL_MORPHER_WAVEFORM 0x0005
//#define AL_VOCAL_MORPHER_RATE 0x0006
//
///* Pitchshifter effect parameters */
//#define AL_PITCH_SHIFTER_COARSE_TUNE 0x0001
//#define AL_PITCH_SHIFTER_FINE_TUNE 0x0002
//
///* Ringmodulator effect parameters */
//#define AL_RING_MODULATOR_FREQUENCY 0x0001
//#define AL_RING_MODULATOR_HIGHPASS_CUTOFF 0x0002
//#define AL_RING_MODULATOR_WAVEFORM 0x0003
//
///* Autowah effect parameters */
//#define AL_AUTOWAH_ATTACK_TIME 0x0001
//#define AL_AUTOWAH_RELEASE_TIME 0x0002
//#define AL_AUTOWAH_RESONANCE 0x0003
//#define AL_AUTOWAH_PEAK_GAIN 0x0004
//
///* Compressor effect parameters */
//#define AL_COMPRESSOR_ONOFF 0x0001
//
///* Equalizer effect parameters */
//#define AL_EQUALIZER_LOW_GAIN 0x0001
//#define AL_EQUALIZER_LOW_CUTOFF 0x0002
//#define AL_EQUALIZER_MID1_GAIN 0x0003
//#define AL_EQUALIZER_MID1_CENTER 0x0004
//#define AL_EQUALIZER_MID1_WIDTH 0x0005
//#define AL_EQUALIZER_MID2_GAIN 0x0006
//#define AL_EQUALIZER_MID2_CENTER 0x0007
//#define AL_EQUALIZER_MID2_WIDTH 0x0008
//#define AL_EQUALIZER_HIGH_GAIN 0x0009
//#define AL_EQUALIZER_HIGH_CUTOFF 0x000A
//
///* Effect type */
//#define AL_EFFECT_FIRST_PARAMETER 0x0000
//#define AL_EFFECT_LAST_PARAMETER 0x8000
static final int AL_EFFECT_TYPE = 0x8001;
//
///* Effect types, used with the AL_EFFECT_TYPE property */
//#define AL_EFFECT_NULL 0x0000
static final int AL_EFFECT_REVERB = 0x0001;
//#define AL_EFFECT_CHORUS 0x0002
//#define AL_EFFECT_DISTORTION 0x0003
//#define AL_EFFECT_ECHO 0x0004
//#define AL_EFFECT_FLANGER 0x0005
//#define AL_EFFECT_FREQUENCY_SHIFTER 0x0006
//#define AL_EFFECT_VOCAL_MORPHER 0x0007
//#define AL_EFFECT_PITCH_SHIFTER 0x0008
//#define AL_EFFECT_RING_MODULATOR 0x0009
//#define AL_EFFECT_AUTOWAH 0x000A
//#define AL_EFFECT_COMPRESSOR 0x000B
//#define AL_EFFECT_EQUALIZER 0x000C
//#define AL_EFFECT_EAXREVERB 0x8000
//
///* Auxiliary Effect Slot properties. */
static final int AL_EFFECTSLOT_EFFECT = 0x0001;
//#define AL_EFFECTSLOT_GAIN 0x0002
//#define AL_EFFECTSLOT_AUXILIARY_SEND_AUTO 0x0003
//
///* NULL Auxiliary Slot ID to disable a source send. */
//#define AL_EFFECTSLOT_NULL 0x0000
//
//
///* Filter properties. */
//
///* Lowpass filter parameters */
static final int AL_LOWPASS_GAIN = 0x0001;
static final int AL_LOWPASS_GAINHF = 0x0002;
//
///* Highpass filter parameters */
//#define AL_HIGHPASS_GAIN 0x0001
//#define AL_HIGHPASS_GAINLF 0x0002
//
///* Bandpass filter parameters */
//#define AL_BANDPASS_GAIN 0x0001
//#define AL_BANDPASS_GAINLF 0x0002
//#define AL_BANDPASS_GAINHF 0x0003
//
///* Filter type */
//#define AL_FILTER_FIRST_PARAMETER 0x0000
//#define AL_FILTER_LAST_PARAMETER 0x8000
static final int AL_FILTER_TYPE = 0x8001;
//
///* Filter types, used with the AL_FILTER_TYPE property */
static final int AL_FILTER_NULL = 0x0000;
static final int AL_FILTER_LOWPASS = 0x0001;
static final int AL_FILTER_HIGHPASS = 0x0002;
//#define AL_FILTER_BANDPASS 0x0003
//
///* Filter ranges and defaults. */
//
///* Lowpass filter */
//#define AL_LOWPASS_MIN_GAIN (0.0f)
//#define AL_LOWPASS_MAX_GAIN (1.0f)
//#define AL_LOWPASS_DEFAULT_GAIN (1.0f)
//
//#define AL_LOWPASS_MIN_GAINHF (0.0f)
//#define AL_LOWPASS_MAX_GAINHF (1.0f)
//#define AL_LOWPASS_DEFAULT_GAINHF (1.0f)
//
///* Highpass filter */
//#define AL_HIGHPASS_MIN_GAIN (0.0f)
//#define AL_HIGHPASS_MAX_GAIN (1.0f)
//#define AL_HIGHPASS_DEFAULT_GAIN (1.0f)
//
//#define AL_HIGHPASS_MIN_GAINLF (0.0f)
//#define AL_HIGHPASS_MAX_GAINLF (1.0f)
//#define AL_HIGHPASS_DEFAULT_GAINLF (1.0f)
//
///* Bandpass filter */
//#define AL_BANDPASS_MIN_GAIN (0.0f)
//#define AL_BANDPASS_MAX_GAIN (1.0f)
//#define AL_BANDPASS_DEFAULT_GAIN (1.0f)
//
//#define AL_BANDPASS_MIN_GAINHF (0.0f)
//#define AL_BANDPASS_MAX_GAINHF (1.0f)
//#define AL_BANDPASS_DEFAULT_GAINHF (1.0f)
//
//#define AL_BANDPASS_MIN_GAINLF (0.0f)
//#define AL_BANDPASS_MAX_GAINLF (1.0f)
//#define AL_BANDPASS_DEFAULT_GAINLF (1.0f)
//
//
///* Effect parameter ranges and defaults. */
//
///* Standard reverb effect */
//#define AL_REVERB_MIN_DENSITY (0.0f)
//#define AL_REVERB_MAX_DENSITY (1.0f)
//#define AL_REVERB_DEFAULT_DENSITY (1.0f)
//
//#define AL_REVERB_MIN_DIFFUSION (0.0f)
//#define AL_REVERB_MAX_DIFFUSION (1.0f)
//#define AL_REVERB_DEFAULT_DIFFUSION (1.0f)
//
//#define AL_REVERB_MIN_GAIN (0.0f)
//#define AL_REVERB_MAX_GAIN (1.0f)
//#define AL_REVERB_DEFAULT_GAIN (0.32f)
//
//#define AL_REVERB_MIN_GAINHF (0.0f)
//#define AL_REVERB_MAX_GAINHF (1.0f)
//#define AL_REVERB_DEFAULT_GAINHF (0.89f)
//
//#define AL_REVERB_MIN_DECAY_TIME (0.1f)
//#define AL_REVERB_MAX_DECAY_TIME (20.0f)
//#define AL_REVERB_DEFAULT_DECAY_TIME (1.49f)
//
//#define AL_REVERB_MIN_DECAY_HFRATIO (0.1f)
//#define AL_REVERB_MAX_DECAY_HFRATIO (2.0f)
//#define AL_REVERB_DEFAULT_DECAY_HFRATIO (0.83f)
//
//#define AL_REVERB_MIN_REFLECTIONS_GAIN (0.0f)
//#define AL_REVERB_MAX_REFLECTIONS_GAIN (3.16f)
//#define AL_REVERB_DEFAULT_REFLECTIONS_GAIN (0.05f)
//
//#define AL_REVERB_MIN_REFLECTIONS_DELAY (0.0f)
//#define AL_REVERB_MAX_REFLECTIONS_DELAY (0.3f)
//#define AL_REVERB_DEFAULT_REFLECTIONS_DELAY (0.007f)
//
//#define AL_REVERB_MIN_LATE_REVERB_GAIN (0.0f)
//#define AL_REVERB_MAX_LATE_REVERB_GAIN (10.0f)
//#define AL_REVERB_DEFAULT_LATE_REVERB_GAIN (1.26f)
//
//#define AL_REVERB_MIN_LATE_REVERB_DELAY (0.0f)
//#define AL_REVERB_MAX_LATE_REVERB_DELAY (0.1f)
//#define AL_REVERB_DEFAULT_LATE_REVERB_DELAY (0.011f)
//
//#define AL_REVERB_MIN_AIR_ABSORPTION_GAINHF (0.892f)
//#define AL_REVERB_MAX_AIR_ABSORPTION_GAINHF (1.0f)
//#define AL_REVERB_DEFAULT_AIR_ABSORPTION_GAINHF (0.994f)
//
//#define AL_REVERB_MIN_ROOM_ROLLOFF_FACTOR (0.0f)
//#define AL_REVERB_MAX_ROOM_ROLLOFF_FACTOR (10.0f)
//#define AL_REVERB_DEFAULT_ROOM_ROLLOFF_FACTOR (0.0f)
//
//#define AL_REVERB_MIN_DECAY_HFLIMIT AL_FALSE
//#define AL_REVERB_MAX_DECAY_HFLIMIT AL_TRUE
//#define AL_REVERB_DEFAULT_DECAY_HFLIMIT AL_TRUE
//
///* EAX reverb effect */
//#define AL_EAXREVERB_MIN_DENSITY (0.0f)
//#define AL_EAXREVERB_MAX_DENSITY (1.0f)
//#define AL_EAXREVERB_DEFAULT_DENSITY (1.0f)
//
//#define AL_EAXREVERB_MIN_DIFFUSION (0.0f)
//#define AL_EAXREVERB_MAX_DIFFUSION (1.0f)
//#define AL_EAXREVERB_DEFAULT_DIFFUSION (1.0f)
//
//#define AL_EAXREVERB_MIN_GAIN (0.0f)
//#define AL_EAXREVERB_MAX_GAIN (1.0f)
//#define AL_EAXREVERB_DEFAULT_GAIN (0.32f)
//
//#define AL_EAXREVERB_MIN_GAINHF (0.0f)
//#define AL_EAXREVERB_MAX_GAINHF (1.0f)
//#define AL_EAXREVERB_DEFAULT_GAINHF (0.89f)
//
//#define AL_EAXREVERB_MIN_GAINLF (0.0f)
//#define AL_EAXREVERB_MAX_GAINLF (1.0f)
//#define AL_EAXREVERB_DEFAULT_GAINLF (1.0f)
//
//#define AL_EAXREVERB_MIN_DECAY_TIME (0.1f)
//#define AL_EAXREVERB_MAX_DECAY_TIME (20.0f)
//#define AL_EAXREVERB_DEFAULT_DECAY_TIME (1.49f)
//
//#define AL_EAXREVERB_MIN_DECAY_HFRATIO (0.1f)
//#define AL_EAXREVERB_MAX_DECAY_HFRATIO (2.0f)
//#define AL_EAXREVERB_DEFAULT_DECAY_HFRATIO (0.83f)
//
//#define AL_EAXREVERB_MIN_DECAY_LFRATIO (0.1f)
//#define AL_EAXREVERB_MAX_DECAY_LFRATIO (2.0f)
//#define AL_EAXREVERB_DEFAULT_DECAY_LFRATIO (1.0f)
//
//#define AL_EAXREVERB_MIN_REFLECTIONS_GAIN (0.0f)
//#define AL_EAXREVERB_MAX_REFLECTIONS_GAIN (3.16f)
//#define AL_EAXREVERB_DEFAULT_REFLECTIONS_GAIN (0.05f)
//
//#define AL_EAXREVERB_MIN_REFLECTIONS_DELAY (0.0f)
//#define AL_EAXREVERB_MAX_REFLECTIONS_DELAY (0.3f)
//#define AL_EAXREVERB_DEFAULT_REFLECTIONS_DELAY (0.007f)
//
//#define AL_EAXREVERB_DEFAULT_REFLECTIONS_PAN_XYZ (0.0f)
//
//#define AL_EAXREVERB_MIN_LATE_REVERB_GAIN (0.0f)
//#define AL_EAXREVERB_MAX_LATE_REVERB_GAIN (10.0f)
//#define AL_EAXREVERB_DEFAULT_LATE_REVERB_GAIN (1.26f)
//
//#define AL_EAXREVERB_MIN_LATE_REVERB_DELAY (0.0f)
//#define AL_EAXREVERB_MAX_LATE_REVERB_DELAY (0.1f)
//#define AL_EAXREVERB_DEFAULT_LATE_REVERB_DELAY (0.011f)
//
//#define AL_EAXREVERB_DEFAULT_LATE_REVERB_PAN_XYZ (0.0f)
//
//#define AL_EAXREVERB_MIN_ECHO_TIME (0.075f)
//#define AL_EAXREVERB_MAX_ECHO_TIME (0.25f)
//#define AL_EAXREVERB_DEFAULT_ECHO_TIME (0.25f)
//
//#define AL_EAXREVERB_MIN_ECHO_DEPTH (0.0f)
//#define AL_EAXREVERB_MAX_ECHO_DEPTH (1.0f)
//#define AL_EAXREVERB_DEFAULT_ECHO_DEPTH (0.0f)
//
//#define AL_EAXREVERB_MIN_MODULATION_TIME (0.04f)
//#define AL_EAXREVERB_MAX_MODULATION_TIME (4.0f)
//#define AL_EAXREVERB_DEFAULT_MODULATION_TIME (0.25f)
//
//#define AL_EAXREVERB_MIN_MODULATION_DEPTH (0.0f)
//#define AL_EAXREVERB_MAX_MODULATION_DEPTH (1.0f)
//#define AL_EAXREVERB_DEFAULT_MODULATION_DEPTH (0.0f)
//
//#define AL_EAXREVERB_MIN_AIR_ABSORPTION_GAINHF (0.892f)
//#define AL_EAXREVERB_MAX_AIR_ABSORPTION_GAINHF (1.0f)
//#define AL_EAXREVERB_DEFAULT_AIR_ABSORPTION_GAINHF (0.994f)
//
//#define AL_EAXREVERB_MIN_HFREFERENCE (1000.0f)
//#define AL_EAXREVERB_MAX_HFREFERENCE (20000.0f)
//#define AL_EAXREVERB_DEFAULT_HFREFERENCE (5000.0f)
//
//#define AL_EAXREVERB_MIN_LFREFERENCE (20.0f)
//#define AL_EAXREVERB_MAX_LFREFERENCE (1000.0f)
//#define AL_EAXREVERB_DEFAULT_LFREFERENCE (250.0f)
//
//#define AL_EAXREVERB_MIN_ROOM_ROLLOFF_FACTOR (0.0f)
//#define AL_EAXREVERB_MAX_ROOM_ROLLOFF_FACTOR (10.0f)
//#define AL_EAXREVERB_DEFAULT_ROOM_ROLLOFF_FACTOR (0.0f)
//
//#define AL_EAXREVERB_MIN_DECAY_HFLIMIT AL_FALSE
//#define AL_EAXREVERB_MAX_DECAY_HFLIMIT AL_TRUE
//#define AL_EAXREVERB_DEFAULT_DECAY_HFLIMIT AL_TRUE
//
///* Chorus effect */
//#define AL_CHORUS_WAVEFORM_SINUSOID (0)
//#define AL_CHORUS_WAVEFORM_TRIANGLE (1)
//
//#define AL_CHORUS_MIN_WAVEFORM (0)
//#define AL_CHORUS_MAX_WAVEFORM (1)
//#define AL_CHORUS_DEFAULT_WAVEFORM (1)
//
//#define AL_CHORUS_MIN_PHASE (-180)
//#define AL_CHORUS_MAX_PHASE (180)
//#define AL_CHORUS_DEFAULT_PHASE (90)
//
//#define AL_CHORUS_MIN_RATE (0.0f)
//#define AL_CHORUS_MAX_RATE (10.0f)
//#define AL_CHORUS_DEFAULT_RATE (1.1f)
//
//#define AL_CHORUS_MIN_DEPTH (0.0f)
//#define AL_CHORUS_MAX_DEPTH (1.0f)
//#define AL_CHORUS_DEFAULT_DEPTH (0.1f)
//
//#define AL_CHORUS_MIN_FEEDBACK (-1.0f)
//#define AL_CHORUS_MAX_FEEDBACK (1.0f)
//#define AL_CHORUS_DEFAULT_FEEDBACK (0.25f)
//
//#define AL_CHORUS_MIN_DELAY (0.0f)
//#define AL_CHORUS_MAX_DELAY (0.016f)
//#define AL_CHORUS_DEFAULT_DELAY (0.016f)
//
///* Distortion effect */
//#define AL_DISTORTION_MIN_EDGE (0.0f)
//#define AL_DISTORTION_MAX_EDGE (1.0f)
//#define AL_DISTORTION_DEFAULT_EDGE (0.2f)
//
//#define AL_DISTORTION_MIN_GAIN (0.01f)
//#define AL_DISTORTION_MAX_GAIN (1.0f)
//#define AL_DISTORTION_DEFAULT_GAIN (0.05f)
//
//#define AL_DISTORTION_MIN_LOWPASS_CUTOFF (80.0f)
//#define AL_DISTORTION_MAX_LOWPASS_CUTOFF (24000.0f)
//#define AL_DISTORTION_DEFAULT_LOWPASS_CUTOFF (8000.0f)
//
//#define AL_DISTORTION_MIN_EQCENTER (80.0f)
//#define AL_DISTORTION_MAX_EQCENTER (24000.0f)
//#define AL_DISTORTION_DEFAULT_EQCENTER (3600.0f)
//
//#define AL_DISTORTION_MIN_EQBANDWIDTH (80.0f)
//#define AL_DISTORTION_MAX_EQBANDWIDTH (24000.0f)
//#define AL_DISTORTION_DEFAULT_EQBANDWIDTH (3600.0f)
//
///* Echo effect */
//#define AL_ECHO_MIN_DELAY (0.0f)
//#define AL_ECHO_MAX_DELAY (0.207f)
//#define AL_ECHO_DEFAULT_DELAY (0.1f)
//
//#define AL_ECHO_MIN_LRDELAY (0.0f)
//#define AL_ECHO_MAX_LRDELAY (0.404f)
//#define AL_ECHO_DEFAULT_LRDELAY (0.1f)
//
//#define AL_ECHO_MIN_DAMPING (0.0f)
//#define AL_ECHO_MAX_DAMPING (0.99f)
//#define AL_ECHO_DEFAULT_DAMPING (0.5f)
//
//#define AL_ECHO_MIN_FEEDBACK (0.0f)
//#define AL_ECHO_MAX_FEEDBACK (1.0f)
//#define AL_ECHO_DEFAULT_FEEDBACK (0.5f)
//
//#define AL_ECHO_MIN_SPREAD (-1.0f)
//#define AL_ECHO_MAX_SPREAD (1.0f)
//#define AL_ECHO_DEFAULT_SPREAD (-1.0f)
//
///* Flanger effect */
//#define AL_FLANGER_WAVEFORM_SINUSOID (0)
//#define AL_FLANGER_WAVEFORM_TRIANGLE (1)
//
//#define AL_FLANGER_MIN_WAVEFORM (0)
//#define AL_FLANGER_MAX_WAVEFORM (1)
//#define AL_FLANGER_DEFAULT_WAVEFORM (1)
//
//#define AL_FLANGER_MIN_PHASE (-180)
//#define AL_FLANGER_MAX_PHASE (180)
//#define AL_FLANGER_DEFAULT_PHASE (0)
//
//#define AL_FLANGER_MIN_RATE (0.0f)
//#define AL_FLANGER_MAX_RATE (10.0f)
//#define AL_FLANGER_DEFAULT_RATE (0.27f)
//
//#define AL_FLANGER_MIN_DEPTH (0.0f)
//#define AL_FLANGER_MAX_DEPTH (1.0f)
//#define AL_FLANGER_DEFAULT_DEPTH (1.0f)
//
//#define AL_FLANGER_MIN_FEEDBACK (-1.0f)
//#define AL_FLANGER_MAX_FEEDBACK (1.0f)
//#define AL_FLANGER_DEFAULT_FEEDBACK (-0.5f)
//
//#define AL_FLANGER_MIN_DELAY (0.0f)
//#define AL_FLANGER_MAX_DELAY (0.004f)
//#define AL_FLANGER_DEFAULT_DELAY (0.002f)
//
///* Frequency shifter effect */
//#define AL_FREQUENCY_SHIFTER_MIN_FREQUENCY (0.0f)
//#define AL_FREQUENCY_SHIFTER_MAX_FREQUENCY (24000.0f)
//#define AL_FREQUENCY_SHIFTER_DEFAULT_FREQUENCY (0.0f)
//
//#define AL_FREQUENCY_SHIFTER_MIN_LEFT_DIRECTION (0)
//#define AL_FREQUENCY_SHIFTER_MAX_LEFT_DIRECTION (2)
//#define AL_FREQUENCY_SHIFTER_DEFAULT_LEFT_DIRECTION (0)
//
//#define AL_FREQUENCY_SHIFTER_DIRECTION_DOWN (0)
//#define AL_FREQUENCY_SHIFTER_DIRECTION_UP (1)
//#define AL_FREQUENCY_SHIFTER_DIRECTION_OFF (2)
//
//#define AL_FREQUENCY_SHIFTER_MIN_RIGHT_DIRECTION (0)
//#define AL_FREQUENCY_SHIFTER_MAX_RIGHT_DIRECTION (2)
//#define AL_FREQUENCY_SHIFTER_DEFAULT_RIGHT_DIRECTION (0)
//
///* Vocal morpher effect */
//#define AL_VOCAL_MORPHER_MIN_PHONEMEA (0)
//#define AL_VOCAL_MORPHER_MAX_PHONEMEA (29)
//#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEA (0)
//
//#define AL_VOCAL_MORPHER_MIN_PHONEMEA_COARSE_TUNING (-24)
//#define AL_VOCAL_MORPHER_MAX_PHONEMEA_COARSE_TUNING (24)
//#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEA_COARSE_TUNING (0)
//
//#define AL_VOCAL_MORPHER_MIN_PHONEMEB (0)
//#define AL_VOCAL_MORPHER_MAX_PHONEMEB (29)
//#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEB (10)
//
//#define AL_VOCAL_MORPHER_MIN_PHONEMEB_COARSE_TUNING (-24)
//#define AL_VOCAL_MORPHER_MAX_PHONEMEB_COARSE_TUNING (24)
//#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEB_COARSE_TUNING (0)
//
//#define AL_VOCAL_MORPHER_PHONEME_A (0)
//#define AL_VOCAL_MORPHER_PHONEME_E (1)
//#define AL_VOCAL_MORPHER_PHONEME_I (2)
//#define AL_VOCAL_MORPHER_PHONEME_O (3)
//#define AL_VOCAL_MORPHER_PHONEME_U (4)
//#define AL_VOCAL_MORPHER_PHONEME_AA (5)
//#define AL_VOCAL_MORPHER_PHONEME_AE (6)
//#define AL_VOCAL_MORPHER_PHONEME_AH (7)
//#define AL_VOCAL_MORPHER_PHONEME_AO (8)
//#define AL_VOCAL_MORPHER_PHONEME_EH (9)
//#define AL_VOCAL_MORPHER_PHONEME_ER (10)
//#define AL_VOCAL_MORPHER_PHONEME_IH (11)
//#define AL_VOCAL_MORPHER_PHONEME_IY (12)
//#define AL_VOCAL_MORPHER_PHONEME_UH (13)
//#define AL_VOCAL_MORPHER_PHONEME_UW (14)
//#define AL_VOCAL_MORPHER_PHONEME_B (15)
//#define AL_VOCAL_MORPHER_PHONEME_D (16)
//#define AL_VOCAL_MORPHER_PHONEME_F (17)
//#define AL_VOCAL_MORPHER_PHONEME_G (18)
//#define AL_VOCAL_MORPHER_PHONEME_J (19)
//#define AL_VOCAL_MORPHER_PHONEME_K (20)
//#define AL_VOCAL_MORPHER_PHONEME_L (21)
//#define AL_VOCAL_MORPHER_PHONEME_M (22)
//#define AL_VOCAL_MORPHER_PHONEME_N (23)
//#define AL_VOCAL_MORPHER_PHONEME_P (24)
//#define AL_VOCAL_MORPHER_PHONEME_R (25)
//#define AL_VOCAL_MORPHER_PHONEME_S (26)
//#define AL_VOCAL_MORPHER_PHONEME_T (27)
//#define AL_VOCAL_MORPHER_PHONEME_V (28)
//#define AL_VOCAL_MORPHER_PHONEME_Z (29)
//
//#define AL_VOCAL_MORPHER_WAVEFORM_SINUSOID (0)
//#define AL_VOCAL_MORPHER_WAVEFORM_TRIANGLE (1)
//#define AL_VOCAL_MORPHER_WAVEFORM_SAWTOOTH (2)
//
//#define AL_VOCAL_MORPHER_MIN_WAVEFORM (0)
//#define AL_VOCAL_MORPHER_MAX_WAVEFORM (2)
//#define AL_VOCAL_MORPHER_DEFAULT_WAVEFORM (0)
//
//#define AL_VOCAL_MORPHER_MIN_RATE (0.0f)
//#define AL_VOCAL_MORPHER_MAX_RATE (10.0f)
//#define AL_VOCAL_MORPHER_DEFAULT_RATE (1.41f)
//
///* Pitch shifter effect */
//#define AL_PITCH_SHIFTER_MIN_COARSE_TUNE (-12)
//#define AL_PITCH_SHIFTER_MAX_COARSE_TUNE (12)
//#define AL_PITCH_SHIFTER_DEFAULT_COARSE_TUNE (12)
//
//#define AL_PITCH_SHIFTER_MIN_FINE_TUNE (-50)
//#define AL_PITCH_SHIFTER_MAX_FINE_TUNE (50)
//#define AL_PITCH_SHIFTER_DEFAULT_FINE_TUNE (0)
//
///* Ring modulator effect */
//#define AL_RING_MODULATOR_MIN_FREQUENCY (0.0f)
//#define AL_RING_MODULATOR_MAX_FREQUENCY (8000.0f)
//#define AL_RING_MODULATOR_DEFAULT_FREQUENCY (440.0f)
//
//#define AL_RING_MODULATOR_MIN_HIGHPASS_CUTOFF (0.0f)
//#define AL_RING_MODULATOR_MAX_HIGHPASS_CUTOFF (24000.0f)
//#define AL_RING_MODULATOR_DEFAULT_HIGHPASS_CUTOFF (800.0f)
//
//#define AL_RING_MODULATOR_SINUSOID (0)
//#define AL_RING_MODULATOR_SAWTOOTH (1)
//#define AL_RING_MODULATOR_SQUARE (2)
//
//#define AL_RING_MODULATOR_MIN_WAVEFORM (0)
//#define AL_RING_MODULATOR_MAX_WAVEFORM (2)
//#define AL_RING_MODULATOR_DEFAULT_WAVEFORM (0)
//
///* Autowah effect */
//#define AL_AUTOWAH_MIN_ATTACK_TIME (0.0001f)
//#define AL_AUTOWAH_MAX_ATTACK_TIME (1.0f)
//#define AL_AUTOWAH_DEFAULT_ATTACK_TIME (0.06f)
//
//#define AL_AUTOWAH_MIN_RELEASE_TIME (0.0001f)
//#define AL_AUTOWAH_MAX_RELEASE_TIME (1.0f)
//#define AL_AUTOWAH_DEFAULT_RELEASE_TIME (0.06f)
//
//#define AL_AUTOWAH_MIN_RESONANCE (2.0f)
//#define AL_AUTOWAH_MAX_RESONANCE (1000.0f)
//#define AL_AUTOWAH_DEFAULT_RESONANCE (1000.0f)
//
//#define AL_AUTOWAH_MIN_PEAK_GAIN (0.00003f)
//#define AL_AUTOWAH_MAX_PEAK_GAIN (31621.0f)
//#define AL_AUTOWAH_DEFAULT_PEAK_GAIN (11.22f)
//
///* Compressor effect */
//#define AL_COMPRESSOR_MIN_ONOFF (0)
//#define AL_COMPRESSOR_MAX_ONOFF (1)
//#define AL_COMPRESSOR_DEFAULT_ONOFF (1)
//
///* Equalizer effect */
//#define AL_EQUALIZER_MIN_LOW_GAIN (0.126f)
//#define AL_EQUALIZER_MAX_LOW_GAIN (7.943f)
//#define AL_EQUALIZER_DEFAULT_LOW_GAIN (1.0f)
//
//#define AL_EQUALIZER_MIN_LOW_CUTOFF (50.0f)
//#define AL_EQUALIZER_MAX_LOW_CUTOFF (800.0f)
//#define AL_EQUALIZER_DEFAULT_LOW_CUTOFF (200.0f)
//
//#define AL_EQUALIZER_MIN_MID1_GAIN (0.126f)
//#define AL_EQUALIZER_MAX_MID1_GAIN (7.943f)
//#define AL_EQUALIZER_DEFAULT_MID1_GAIN (1.0f)
//
//#define AL_EQUALIZER_MIN_MID1_CENTER (200.0f)
//#define AL_EQUALIZER_MAX_MID1_CENTER (3000.0f)
//#define AL_EQUALIZER_DEFAULT_MID1_CENTER (500.0f)
//
//#define AL_EQUALIZER_MIN_MID1_WIDTH (0.01f)
//#define AL_EQUALIZER_MAX_MID1_WIDTH (1.0f)
//#define AL_EQUALIZER_DEFAULT_MID1_WIDTH (1.0f)
//
//#define AL_EQUALIZER_MIN_MID2_GAIN (0.126f)
//#define AL_EQUALIZER_MAX_MID2_GAIN (7.943f)
//#define AL_EQUALIZER_DEFAULT_MID2_GAIN (1.0f)
//
//#define AL_EQUALIZER_MIN_MID2_CENTER (1000.0f)
//#define AL_EQUALIZER_MAX_MID2_CENTER (8000.0f)
//#define AL_EQUALIZER_DEFAULT_MID2_CENTER (3000.0f)
//
//#define AL_EQUALIZER_MIN_MID2_WIDTH (0.01f)
//#define AL_EQUALIZER_MAX_MID2_WIDTH (1.0f)
//#define AL_EQUALIZER_DEFAULT_MID2_WIDTH (1.0f)
//
//#define AL_EQUALIZER_MIN_HIGH_GAIN (0.126f)
//#define AL_EQUALIZER_MAX_HIGH_GAIN (7.943f)
//#define AL_EQUALIZER_DEFAULT_HIGH_GAIN (1.0f)
//
//#define AL_EQUALIZER_MIN_HIGH_CUTOFF (4000.0f)
//#define AL_EQUALIZER_MAX_HIGH_CUTOFF (16000.0f)
//#define AL_EQUALIZER_DEFAULT_HIGH_CUTOFF (6000.0f)
//
//
///* Source parameter value ranges and defaults. */
//#define AL_MIN_AIR_ABSORPTION_FACTOR (0.0f)
//#define AL_MAX_AIR_ABSORPTION_FACTOR (10.0f)
//#define AL_DEFAULT_AIR_ABSORPTION_FACTOR (0.0f)
//
//#define AL_MIN_ROOM_ROLLOFF_FACTOR (0.0f)
//#define AL_MAX_ROOM_ROLLOFF_FACTOR (10.0f)
//#define AL_DEFAULT_ROOM_ROLLOFF_FACTOR (0.0f)
//
//#define AL_MIN_CONE_OUTER_GAINHF (0.0f)
//#define AL_MAX_CONE_OUTER_GAINHF (1.0f)
//#define AL_DEFAULT_CONE_OUTER_GAINHF (1.0f)
//
//#define AL_MIN_DIRECT_FILTER_GAINHF_AUTO AL_FALSE
//#define AL_MAX_DIRECT_FILTER_GAINHF_AUTO AL_TRUE
//#define AL_DEFAULT_DIRECT_FILTER_GAINHF_AUTO AL_TRUE
//
//#define AL_MIN_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_FALSE
//#define AL_MAX_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_TRUE
//#define AL_DEFAULT_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_TRUE
//
//#define AL_MIN_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_FALSE
//#define AL_MAX_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_TRUE
//#define AL_DEFAULT_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_TRUE
//
//
///* Listener parameter value ranges and defaults. */
//#define AL_MIN_METERS_PER_UNIT FLT_MIN
//#define AL_MAX_METERS_PER_UNIT FLT_MAX
//#define AL_DEFAULT_METERS_PER_UNIT (1.0f)
public static String GetALErrorMsg(int errorCode) {
String errorText;

@ -169,12 +169,9 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
// Find maximum # of sources supported by this implementation
ArrayList<Integer> channelList = new ArrayList<Integer>();
for (int i = 0; i < MAX_NUM_CHANNELS; i++) {
// logger.log(Level.INFO, "Generating Source for index: {0}", i);
int chan = alGenSources();
// logger.log(Level.INFO, "chan: {0}", chan);
//if (alGetError() != 0) {
if (checkError(false) != 0) {
// logger.log(Level.INFO, "alGetError detected an error");
break;
} else {
channelList.add(chan);
@ -191,36 +188,47 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
logger.log(Level.INFO, "AudioRenderer supports {0} channels", channels.length);
// supportEfx = ALC10.alcIsExtensionPresent(device, "ALC_EXT_EFX");
// if (supportEfx) {
// ib.position(0).limit(1);
//supportEfx = alcIsExtensionPresent(device, "ALC_EXT_EFX");
supportEfx = alcIsExtensionPresent(AL.ALC_EXT_EFX_NAME);
logger.log(Level.INFO, "{0} found: {1}",
new Object[]{AL.ALC_EXT_EFX_NAME, supportEfx});
if (supportEfx) {
ib.position(0).limit(1);
//ALC10.alcGetInteger(device, EFX10.ALC_EFX_MAJOR_VERSION, ib);
// int major = ib.get(0);
// ib.position(0).limit(1);
alcGetInteger(AL.ALC_EFX_MAJOR_VERSION, ib, 1);
int major = ib.get(0);
ib.position(0).limit(1);
//ALC10.alcGetInteger(device, EFX10.ALC_EFX_MINOR_VERSION, ib);
// int minor = ib.get(0);
// logger.log(Level.INFO, "Audio effect extension version: {0}.{1}", new Object[]{major, minor});
//
alcGetInteger(AL.ALC_EFX_MINOR_VERSION, ib, 1);
int minor = ib.get(0);
logger.log(Level.INFO, "Audio effect extension version: {0}.{1}", new Object[]{major, minor});
//ALC10.alcGetInteger(device, EFX10.ALC_MAX_AUXILIARY_SENDS, ib);
// auxSends = ib.get(0);
// logger.log(Level.INFO, "Audio max auxilary sends: {0}", auxSends);
//
// // create slot
// ib.position(0).limit(1);
alcGetInteger(AL.ALC_MAX_AUXILIARY_SENDS, ib, 1);
auxSends = ib.get(0);
logger.log(Level.INFO, "Audio max auxilary sends: {0}", auxSends);
// create slot
ib.position(0).limit(1);
//EFX10.alGenAuxiliaryEffectSlots(ib);
// reverbFxSlot = ib.get(0);
//
// // create effect
// ib.position(0).limit(1);
alGenAuxiliaryEffectSlots(1, ib);
reverbFxSlot = ib.get(0);
// create effect
ib.position(0).limit(1);
//EFX10.alGenEffects(ib);
// reverbFx = ib.get(0);
alGenEffects(1, ib);
reverbFx = ib.get(0);
//EFX10.alEffecti(reverbFx, EFX10.AL_EFFECT_TYPE, EFX10.AL_EFFECT_REVERB);
//
// // attach reverb effect to effect slot
alEffecti(reverbFx, AL.AL_EFFECT_TYPE, AL.AL_EFFECT_REVERB);
// attach reverb effect to effect slot
//EFX10.alAuxiliaryEffectSloti(reverbFxSlot, EFX10.AL_EFFECTSLOT_EFFECT, reverbFx);
// } else {
// logger.log(Level.WARNING, "OpenAL EFX not available! Audio effects won't work.");
// }
alAuxiliaryEffectSloti(reverbFxSlot, AL.AL_EFFECTSLOT_EFFECT, reverbFx);
} else {
logger.log(Level.WARNING, "OpenAL EFX not available! Audio effects won't work.");
}
}
public void cleanupInThread() {
@ -251,22 +259,23 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
// delete audio buffers and filters
objManager.deleteAllObjects(this);
// if (supportEfx) {
// ib.position(0).limit(1);
// ib.put(0, reverbFx);
if (supportEfx) {
ib.position(0).limit(1);
ib.put(0, reverbFx);
//EFX10.alDeleteEffects(ib);
//
// // If this is not allocated, why is it deleted?
// // Commented out to fix native crash in OpenAL.
// ib.position(0).limit(1);
// ib.put(0, reverbFxSlot);
alDeleteEffects(1, ib);
// If this is not allocated, why is it deleted?
// Commented out to fix native crash in OpenAL.
ib.position(0).limit(1);
ib.put(0, reverbFxSlot);
//EFX10.alDeleteAuxiliaryEffectSlots(ib);
// }
//
alDeleteAuxiliaryEffectSlots(1, ib);
}
//AL.destroy();
logger.log(Level.INFO, "Destroying OpenAL Soft Renderer");
alDestroy();
// checkError(true);
}
public void cleanup() {
@ -279,27 +288,31 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
}
private void updateFilter(Filter f) {
// int id = f.getId();
// if (id == -1) {
// ib.position(0).limit(1);
int id = f.getId();
if (id == -1) {
ib.position(0).limit(1);
//EFX10.alGenFilters(ib);
// id = ib.get(0);
// f.setId(id);
//
// objManager.registerForCleanup(f);
// }
//
// if (f instanceof LowPassFilter) {
// LowPassFilter lpf = (LowPassFilter) f;
alGenFilters(1, ib);
id = ib.get(0);
f.setId(id);
objManager.registerForCleanup(f);
}
if (f instanceof LowPassFilter) {
LowPassFilter lpf = (LowPassFilter) f;
//EFX10.alFilteri(id, EFX10.AL_FILTER_TYPE, EFX10.AL_FILTER_LOWPASS);
alFilteri(id, AL.AL_FILTER_TYPE, AL.AL_FILTER_LOWPASS);
//EFX10.alFilterf(id, EFX10.AL_LOWPASS_GAIN, lpf.getVolume());
alFilterf(id, AL.AL_LOWPASS_GAIN, lpf.getVolume());
//EFX10.alFilterf(id, EFX10.AL_LOWPASS_GAINHF, lpf.getHighFreqVolume());
// } else {
// throw new UnsupportedOperationException("Filter type unsupported: "
// + f.getClass().getName());
// }
//
// f.clearUpdateNeeded();
alFilterf(id, AL.AL_LOWPASS_GAINHF, lpf.getHighFreqVolume());
} else {
throw new UnsupportedOperationException("Filter type unsupported: "
+ f.getClass().getName());
}
f.clearUpdateNeeded();
}
public void updateSourceParam(AudioSource src, AudioParam param) {
@ -375,15 +388,16 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
return;
}
// int filter = EFX10.AL_FILTER_NULL;
// if (src.getReverbFilter() != null) {
// Filter f = src.getReverbFilter();
// if (f.isUpdateNeeded()) {
// updateFilter(f);
// }
// filter = f.getId();
// }
int filter = AL.AL_FILTER_NULL;
if (src.getReverbFilter() != null) {
Filter f = src.getReverbFilter();
if (f.isUpdateNeeded()) {
updateFilter(f);
}
filter = f.getId();
}
//AL11.alSource3i(id, EFX10.AL_AUXILIARY_SEND_FILTER, reverbFxSlot, 0, filter);
alSource3i(id, AL.AL_AUXILIARY_SEND_FILTER, reverbFxSlot, 0, filter);
break;
case ReverbEnabled:
if (!supportEfx || !src.isPositional()) {
@ -394,6 +408,7 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
updateSourceParam(src, AudioParam.ReverbFilter);
} else {
//AL11.alSource3i(id, EFX10.AL_AUXILIARY_SEND_FILTER, 0, 0, EFX10.AL_FILTER_NULL);
alSource3i(id, AL.AL_AUXILIARY_SEND_FILTER, 0, 0, AL.AL_FILTER_NULL);
}
break;
case IsPositional:
@ -411,6 +426,7 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
// Disable reverb
//AL11.alSource3i(id, EFX10.AL_AUXILIARY_SEND_FILTER, 0, 0, EFX10.AL_FILTER_NULL);
alSource3i(id, AL.AL_AUXILIARY_SEND_FILTER, 0, 0, AL.AL_FILTER_NULL);
} else {
//alSourcei(id, AL_SOURCE_RELATIVE, AL_FALSE);
alSourcei(id, AL.AL_SOURCE_RELATIVE, AL.AL_FALSE);
@ -470,23 +486,25 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
checkError(true);
}
break;
// case DryFilter:
// if (!supportEfx) {
// return;
// }
//
// if (src.getDryFilter() != null) {
// Filter f = src.getDryFilter();
// if (f.isUpdateNeeded()) {
// updateFilter(f);
//
// // NOTE: must re-attach filter for changes to apply.
case DryFilter:
if (!supportEfx) {
return;
}
if (src.getDryFilter() != null) {
Filter f = src.getDryFilter();
if (f.isUpdateNeeded()) {
updateFilter(f);
// NOTE: must re-attach filter for changes to apply.
//alSourcei(id, EFX10.AL_DIRECT_FILTER, f.getId());
// }
// } else {
alSourcei(id, AL.AL_DIRECT_FILTER, f.getId());
}
} else {
//alSourcei(id, EFX10.AL_DIRECT_FILTER, EFX10.AL_FILTER_NULL);
// }
// break;
alSourcei(id, AL.AL_DIRECT_FILTER, AL.AL_FILTER_NULL);
}
break;
case Looping:
if (src.isLooping()) {
if (!(src.getAudioData() instanceof AudioStream)) {
@ -534,17 +552,19 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
alSourcei(id, AL.AL_SOURCE_RELATIVE, AL.AL_FALSE);
checkError(true);
// if (src.isReverbEnabled() && supportEfx) {
if (src.isReverbEnabled() && supportEfx) {
//int filter = EFX10.AL_FILTER_NULL;
// if (src.getReverbFilter() != null) {
// Filter f = src.getReverbFilter();
// if (f.isUpdateNeeded()) {
// updateFilter(f);
// }
// filter = f.getId();
// }
int filter = AL.AL_FILTER_NULL;
if (src.getReverbFilter() != null) {
Filter f = src.getReverbFilter();
if (f.isUpdateNeeded()) {
updateFilter(f);
}
filter = f.getId();
}
//AL11.alSource3i(id, EFX10.AL_AUXILIARY_SEND_FILTER, reverbFxSlot, 0, filter);
// }
alSource3i(id, AL.AL_AUXILIARY_SEND_FILTER, reverbFxSlot, 0, filter);
}
} else {
// play in headspace
//alSourcei(id, AL_SOURCE_RELATIVE, AL_TRUE);
@ -558,16 +578,17 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
checkError(true);
}
// if (src.getDryFilter() != null && supportEfx) {
// Filter f = src.getDryFilter();
// if (f.isUpdateNeeded()) {
// updateFilter(f);
//
// // NOTE: must re-attach filter for changes to apply.
if (src.getDryFilter() != null && supportEfx) {
Filter f = src.getDryFilter();
if (f.isUpdateNeeded()) {
updateFilter(f);
// NOTE: must re-attach filter for changes to apply.
//alSourcei(id, EFX10.AL_DIRECT_FILTER, f.getId());
// }
// }
//
alSourcei(id, AL.AL_DIRECT_FILTER, f.getId());
}
}
if (forceNonLoop) {
//alSourcei(id, AL_LOOPING, AL_FALSE);
alSourcei(id, AL.AL_LOOPING, AL.AL_FALSE);
@ -716,25 +737,37 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
}
//EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_DENSITY, env.getDensity());
alEffectf(reverbFx, AL.AL_REVERB_DENSITY, env.getDensity());
//EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_DIFFUSION, env.getDiffusion());
alEffectf(reverbFx, AL.AL_REVERB_DIFFUSION, env.getDiffusion());
//EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_GAIN, env.getGain());
alEffectf(reverbFx, AL.AL_REVERB_GAIN, env.getGain());
//EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_GAINHF, env.getGainHf());
alEffectf(reverbFx, AL.AL_REVERB_GAINHF, env.getGainHf());
//EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_DECAY_TIME, env.getDecayTime());
alEffectf(reverbFx, AL.AL_REVERB_DECAY_TIME, env.getDecayTime());
//EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_DECAY_HFRATIO, env.getDecayHFRatio());
alEffectf(reverbFx, AL.AL_REVERB_DECAY_HFRATIO, env.getDecayHFRatio());
//EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_REFLECTIONS_GAIN, env.getReflectGain());
alEffectf(reverbFx, AL.AL_REVERB_REFLECTIONS_GAIN, env.getReflectGain());
//EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_REFLECTIONS_DELAY, env.getReflectDelay());
alEffectf(reverbFx, AL.AL_REVERB_REFLECTIONS_DELAY, env.getReflectDelay());
//EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_LATE_REVERB_GAIN, env.getLateReverbGain());
alEffectf(reverbFx, AL.AL_REVERB_LATE_REVERB_GAIN, env.getLateReverbGain());
//EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_LATE_REVERB_DELAY, env.getLateReverbDelay());
alEffectf(reverbFx, AL.AL_REVERB_LATE_REVERB_DELAY, env.getLateReverbDelay());
//EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_AIR_ABSORPTION_GAINHF, env.getAirAbsorbGainHf());
alEffectf(reverbFx, AL.AL_REVERB_AIR_ABSORPTION_GAINHF, env.getAirAbsorbGainHf());
//EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_ROOM_ROLLOFF_FACTOR, env.getRoomRolloffFactor());
//
// // attach effect to slot
alEffectf(reverbFx, AL.AL_REVERB_ROOM_ROLLOFF_FACTOR, env.getRoomRolloffFactor());
// attach effect to slot
//EFX10.alAuxiliaryEffectSloti(reverbFxSlot, EFX10.AL_EFFECTSLOT_EFFECT, reverbFx);
alAuxiliaryEffectSloti(reverbFxSlot, AL.AL_EFFECTSLOT_EFFECT, reverbFx);
}
}
private boolean fillBuffer(AudioStream stream, int id) {
// logger.log(Level.INFO, "fillBuffer for id: {0}", id);
int size = 0;
int result;
@ -748,9 +781,6 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
}
}
// logger.log(Level.INFO, "data for buffer: {0} is size: {1}",
// new Object[]{id, size});
if (size == 0) {
return false;
}
@ -767,7 +797,6 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
}
private boolean fillStreamingSource(int sourceId, AudioStream stream) {
// logger.log(Level.INFO, "fillStreamingSource for source: {0}", sourceId);
if (!stream.isOpen()) {
return false;
}
@ -775,7 +804,6 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
boolean active = true;
//int processed = alGetSourcei(sourceId, AL_BUFFERS_PROCESSED);
int processed = alGetSourcei(sourceId, AL.AL_BUFFERS_PROCESSED);
// logger.log(Level.INFO, "fillStreamingSource buffers processed: {0}", processed);
checkError(true);
//while((processed--) != 0){
@ -783,19 +811,15 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
int buffer;
ib.position(0).limit(1);
// logger.log(Level.INFO, "fillStreamingSource alSourceUnqueueBuffers for source: {0}", sourceId);
//alSourceUnqueueBuffers(sourceId, ib);
alSourceUnqueueBuffers(sourceId, 1, ib);
checkError(true);
buffer = ib.get(0);
// logger.log(Level.INFO, "fillStreamingSource bufferID: {0}", buffer);
active = fillBuffer(stream, buffer);
ib.position(0).limit(1);
ib.put(0, buffer);
// logger.log(Level.INFO, "fillStreamingSource alSourceQueueBuffers for source: {0}, buffer: {1}",
// new Object[]{sourceId, buffer});
//alSourceQueueBuffers(sourceId, ib);
alSourceQueueBuffers(sourceId, 1, ib);
checkError(true);
@ -809,7 +833,6 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
}
private boolean attachStreamToSource(int sourceId, AudioStream stream) {
// logger.log(Level.INFO, "attachStreamToSource for source: {0}", sourceId);
boolean active = true;
int activeBufferCount = 0;
for (int id : stream.getIds()) {
@ -822,8 +845,6 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
// does not return (crashes) so that the error code can be checked.
// active is FALSE when the data size is 0
if (active) {
// logger.log(Level.INFO, "attachStreamToSource alSourceQueueBuffers for source: {0}, buffer: {1}",
// new Object[]{sourceId, id});
alSourceQueueBuffers(sourceId, 1, ib);
checkError(true);
activeBufferCount++;
@ -837,15 +858,11 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
for (int i=0; i<STREAMING_BUFFER_COUNT; i++) {
if (i < activeBufferCount) {
newIds[i] = stream.getIds()[i];
// logger.log(Level.INFO, "newIds[{0}] = {1}",
// new Object[]{i, newIds[i]});
} else {
ib.clear();
ib.put(stream.getIds()[i]).limit(1).flip();
alDeleteBuffers(1, ib);
checkError(true);
// logger.log(Level.INFO, "deleting buffer at index[{0}] = {1}",
// new Object[]{i, stream.getIds()[i]});
}
}
@ -863,7 +880,6 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
}
private boolean attachAudioToSource(int sourceId, AudioData data) {
// logger.log(Level.INFO, "attachAudioToSource for data type: {0}", data.getClass().getName());
if (data instanceof AudioBuffer) {
return attachBufferToSource(sourceId, (AudioBuffer) data);
} else if (data instanceof AudioStream) {
@ -873,28 +889,21 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
}
private void clearChannel(int index) {
// logger.log(Level.INFO, "Clearing channel for index: {0}", index);
// make room at this channel
if (chanSrcs[index] != null) {
AudioSource src = chanSrcs[index];
int sourceId = channels[index];
// logger.log(Level.INFO, "Stopping source: {0} in clearChannel", sourceId);
alSourceStop(sourceId);
if (src.getAudioData() instanceof AudioStream) {
AudioStream str = (AudioStream) src.getAudioData();
// logger.log(Level.INFO, "source is a stream with numBuffers: {0}", str.getIds().length);
for (int i=0; i<str.getIds().length; i++) {
// logger.log(Level.INFO, "id[{0}]: {1}",
// new Object[]{i, str.getIds()[i]});
}
//ib.position(0).limit(STREAMING_BUFFER_COUNT);
ib.position(0).limit(str.getIds().length);
ib.put(str.getIds()).flip();
// logger.log(Level.INFO, "clearChannel alSourceUnqueueBuffers for source: {0}", sourceId);
int processed = alGetSourcei(sourceId, AL.AL_BUFFERS_PROCESSED);
// logger.log(Level.INFO, "clearChannels buffers processed: {0}", processed);
//alSourceUnqueueBuffers(sourceId, ib);
alSourceUnqueueBuffers(sourceId, processed, ib);
checkError(true);
@ -907,11 +916,13 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
if (src.getDryFilter() != null && supportEfx) {
// detach filter
//alSourcei(sourceId, EFX10.AL_DIRECT_FILTER, EFX10.AL_FILTER_NULL);
alSourcei(sourceId, AL.AL_DIRECT_FILTER, AL.AL_FILTER_NULL);
}
if (src.isPositional()) {
AudioSource pas = (AudioSource) src;
if (pas.isReverbEnabled() && supportEfx) {
//AL11.alSource3i(sourceId, EFX10.AL_AUXILIARY_SEND_FILTER, 0, 0, EFX10.AL_FILTER_NULL);
alSource3i(sourceId, AL.AL_AUXILIARY_SEND_FILTER, 0, 0, AL.AL_FILTER_NULL);
}
}
@ -949,29 +960,20 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
//int state = alGetSourcei(sourceId, AL_SOURCE_STATE);
int state = alGetSourcei(sourceId, AL.AL_SOURCE_STATE);
checkError(true);
// logger.log(Level.INFO, "source: {0}, state: {1}",
// new Object[]{sourceId, state});
boolean wantPlaying = src.getStatus() == Status.Playing;
// logger.log(Level.INFO, "sourceId: {0}, wantPlaying: {1}",
// new Object[]{sourceId, wantPlaying});
//boolean stopped = state == AL_STOPPED;
boolean stopped = state == AL.AL_STOPPED;
// logger.log(Level.INFO, "sourceId: {0}, stopped: {1}",
// new Object[]{sourceId, stopped});
if (streaming && wantPlaying) {
AudioStream stream = (AudioStream) src.getAudioData();
if (stream.isOpen()) {
// logger.log(Level.INFO, "stream is open && want playing for source: {0}", sourceId);
fillStreamingSource(sourceId, stream);
if (stopped) {
// logger.log(Level.INFO, "source: {0} stopped, set playstate", sourceId);
alSourcePlay(sourceId);
checkError(true);
}
} else {
if (stopped) {
// logger.log(Level.INFO, "stream is not open && want playing for source: {0}", sourceId);
// became inactive
src.setStatus(Status.Stopped);
src.setChannel(-1);
@ -986,8 +988,6 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
} else if (!streaming) {
//boolean paused = state == AL_PAUSED;
boolean paused = state == AL.AL_PAUSED;
// logger.log(Level.INFO, "source: {0}, pause: {1}",
// new Object[]{sourceId, paused});
// make sure OAL pause state & source state coincide
assert (src.getStatus() == Status.Paused && paused) || (!paused);
@ -1052,7 +1052,6 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
}
if (src.getAudioData().isUpdateNeeded()) {
// logger.log(Level.INFO, "Calling updateAudioData from playSourceInstance");
updateAudioData(src.getAudioData());
}
@ -1064,14 +1063,10 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
int sourceId = channels[index];
// logger.log(Level.INFO, "Calling clearChannel for index[{0}] from playSourceInstance", index);
clearChannel(index);
// set parameters, like position and max distance
// logger.log(Level.INFO, "Calling setSourceParams for sourceID: {0} from playSourceInstance", index);
setSourceParams(sourceId, src, true);
// logger.log(Level.INFO, "Calling attachAudioToSource for sourceID: {0} and data audiodata id: {1} from playSourceInstance",
// new Object[]{sourceId, src.getAudioData().getId()});
attachAudioToSource(sourceId, src.getAudioData());
chanSrcs[index] = src;
@ -1126,7 +1121,6 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
}
public void pauseSource(AudioSource src) {
// logger.log(Level.INFO, "pauseSource");
checkDead();
synchronized (threadLock) {
while (!threadLock.get()) {
@ -1139,7 +1133,6 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
return;
}
// logger.log(Level.INFO, "source is playing: {0}", src.getStatus() == Status.Playing);
if (src.getStatus() == Status.Playing) {
assert src.getChannel() != -1;
@ -1212,18 +1205,15 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
private void updateAudioBuffer(AudioBuffer ab) {
int id = ab.getId();
// logger.log(Level.INFO, "updateAudioBuffer for buffer id: {0}", id);
if (ab.getId() == -1) {
ib.position(0).limit(1);
alGenBuffers(1, ib);
checkError(true);
id = ib.get(0);
ab.setId(id);
// logger.log(Level.INFO, "Generated Buffer: {0}", id);
objManager.registerForCleanup(ab);
}
// logger.log(Level.INFO, "updateAudioBuffer new buffer id: {0}", id);
ab.getData().clear();
//alBufferData(id, convertFormat(ab), ab.getData(), ab.getSampleRate());
@ -1233,7 +1223,6 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
}
private void updateAudioStream(AudioStream as) {
// logger.log(Level.INFO, "updateAudioStream");
if (as.getIds() != null) {
deleteAudioData(as);
}
@ -1245,9 +1234,6 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
checkError(true);
ib.position(0).limit(STREAMING_BUFFER_COUNT);
ib.get(ids);
// for (int i=0; i<ids.length; i++) {
// logger.log(Level.INFO, "Generated Streaming Buffer: {0}", ids[i]);
// }
// Not registered with object manager.
// AudioStreams can be handled without object manager
@ -1269,19 +1255,13 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
int id = filter.getId();
if (id != -1) {
//EFX10.alDeleteFilters(id);
ib.put(0, id);
ib.position(0).limit(1);
alDeleteFilters(1, ib);
}
}
public void deleteAudioData(AudioData ad) {
// if (ad instanceof AudioStream) {
// AudioStream as = (AudioStream) ad;
// int[] ids = as.getIds();
// for (int i=0; i<ids.length; i++) {
// logger.log(Level.INFO, "deleteAudioData for stream buffer: {0}", ids[i]);
// }
// } else if (ad instanceof AudioBuffer) {
// logger.log(Level.INFO, "deleteAudioData for buffer: {0}", ad.getId());
// }
synchronized (threadLock) {
while (!threadLock.get()) {
try {
@ -1322,8 +1302,6 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
private int checkError(boolean stopOnError) {
int errorCode = alGetError();
String errorText = AL.GetALErrorMsg(errorCode);
// logger.log(Level.INFO, "alError Code: {0}, Description: {1}",
// new Object[]{errorCode, errorText});
if (errorCode != AL.AL_NO_ERROR && stopOnError) {
throw new IllegalStateException("AL Error Detected. Error Code: " + errorCode + ": " + errorText);
@ -1356,12 +1334,24 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
public static native void alListener(int param, FloatBuffer data);
public static native void alListenerf(int param, float value);
public static native void alListener3f(int param, float value1, float value2, float value3);
public static native boolean alcIsExtensionPresent(String extension);
public static native void alcGetInteger(int param, IntBuffer buffer, int size);
public static native void alGenAuxiliaryEffectSlots(int numSlots, IntBuffer buffers);
public static native void alGenEffects(int numEffects, IntBuffer buffers);
public static native void alEffecti(int effect, int param, int value);
public static native void alAuxiliaryEffectSloti(int effectSlot, int param, int value);
public static native void alDeleteEffects(int numEffects, IntBuffer buffers);
public static native void alDeleteAuxiliaryEffectSlots(int numEffectSlots, IntBuffer buffers);
public static native void alGenFilters(int numFilters, IntBuffer buffers);
public static native void alFilteri(int filter, int param, int value);
public static native void alFilterf(int filter, int param, float value);
public static native void alSource3i(int source, int param, int value1, int value2, int value3);
public static native void alDeleteFilters(int numFilters, IntBuffer buffers);
public static native void alEffectf(int effect, int param, float value);
/** Load jni .so on initialization */
static {
System.loadLibrary("openalsoftjme");
}
}

@ -1,4 +1,3 @@
APP_OPTIM := release
APP_ABI := all
#APP_ABI := armeabi-v7a
#APP_ABI += armeabi

@ -324,8 +324,158 @@ JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRendere
alListener3f((ALenum)param, (ALfloat)value1, (ALfloat)value2, (ALfloat)value3);
}
JNIEXPORT jboolean JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alcIsExtensionPresent
(JNIEnv* env, jclass, jstring extension)
{
ALCdevice *device;
ALCcontext *ctx;
ALboolean result;
// char buf[128];
const char* strExtension;
jsize strLength = env->GetStringUTFLength(extension);
ctx = alcGetCurrentContext();
if(ctx != NULL) {
device = alcGetContextsDevice(ctx);
if (device != NULL) {
strExtension = env->GetStringUTFChars(extension, NULL);
if (strExtension == NULL) {
return JNI_FALSE; /* OutOfMemoryError already thrown */
}
// __android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "alcIsExtensionPresent for param: %s with size: %d", strExtension, strLength);
result = alcIsExtensionPresent(device, strExtension);
// __android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "alcIsExtensionPresent found: %d", result);
env->ReleaseStringUTFChars(extension, strExtension);
return (jboolean)result;
} else {
__android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "device is null in alcIsExtensionPresent");
}
} else {
__android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "current context is null in alcIsExtensionPresent");
}
return JNI_FALSE;
}
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alcGetInteger
(JNIEnv* env, jclass, jint param, jobject buffer, jint bufferSize)
{
ALCdevice *device;
ALCcontext *ctx;
// __android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "alcGetInteger for param: %d", param);
ALCint* pBuffers = (ALCint*) env->GetDirectBufferAddress(buffer);
ctx = alcGetCurrentContext();
if(ctx != NULL) {
device = alcGetContextsDevice(ctx);
if (device != NULL) {
alcGetIntegerv(device, (ALCenum)param, (ALCsizei)bufferSize, pBuffers);
} else {
__android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "device is null in alcGetInteger");
}
} else {
__android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "current context is null in alcGetInteger");
}
}
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alGenAuxiliaryEffectSlots
(JNIEnv* env, jclass, jint numSlots, jobject buffer)
{
// __android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "alGenAuxiliaryEffectSlots for numSlots: %d", numSlots);
ALuint* pBuffers = (ALuint*) env->GetDirectBufferAddress(buffer);
alGenAuxiliaryEffectSlots((ALsizei)numSlots, pBuffers);
}
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alGenEffects
(JNIEnv* env, jclass, jint numEffects, jobject buffer)
{
// __android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "alGenEffects for numEffects: %d", numEffects);
ALuint* pBuffers = (ALuint*) env->GetDirectBufferAddress(buffer);
alGenEffects((ALsizei)numEffects, pBuffers);
}
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alEffecti
(JNIEnv *, jclass, jint effect, jint param, jint value)
{
// __android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "alEffecti for effect: %d, param: %d, value: %d", effect, param, value);
alEffecti((ALuint)effect, (ALenum)param, (ALint)value);
}
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alAuxiliaryEffectSloti
(JNIEnv *, jclass, jint effectSlot, jint param, jint value)
{
// __android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "alAuxiliaryEffectSloti for effect: %d, param: %d, value: %d", effectSlot, param, value);
alAuxiliaryEffectSloti((ALuint)effectSlot, (ALenum)param, (ALint)value);
}
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alDeleteEffects
(JNIEnv* env, jclass, jint numEffects, jobject buffer)
{
// __android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "alDeleteEffects for numEffects: %d", numEffects);
ALuint* pBuffers = (ALuint*) env->GetDirectBufferAddress(buffer);
alDeleteEffects((ALsizei)numEffects, pBuffers);
}
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alDeleteAuxiliaryEffectSlots
(JNIEnv* env, jclass, jint numEffectSlots, jobject buffer)
{
// __android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "alDeleteAuxiliaryEffectSlots for numEffectSlots: %d", numEffectSlots);
ALuint* pBuffers = (ALuint*) env->GetDirectBufferAddress(buffer);
alDeleteAuxiliaryEffectSlots((ALsizei)numEffectSlots, pBuffers);
}
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alGenFilters
(JNIEnv* env, jclass, jint numFilters, jobject buffer)
{
// __android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "alGenFilters for numFilters: %d", numFilters);
ALuint* pBuffers = (ALuint*) env->GetDirectBufferAddress(buffer);
alGenFilters((ALsizei)numFilters, pBuffers);
}
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alFilteri
(JNIEnv *, jclass, jint filter, jint param, jint value)
{
// __android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "alFilteri for filter: %d, param: %d, value: %d", filter, param, value);
alFilteri((ALuint)filter, (ALenum)param, (ALint)value);
}
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alFilterf
(JNIEnv *, jclass, jint filter, jint param, jfloat value)
{
// __android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "alFilterf for filter: %d, param: %d, value: %f", filter, param, value);
alFilterf((ALuint)filter, (ALenum)param, (ALfloat)value);
}
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alSource3i
(JNIEnv *, jclass, jint source, jint param, jint value1, jint value2, jint value3)
{
// __android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "alSource3i for source: %d, param: %d, value1: %d, value2: %d, value3: %d", source, param, value1, value2, value3);
alSource3i((ALuint)source, (ALenum)param, (ALint)value1, (ALint)value2, (ALint)value3);
}
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alDeleteFilters
(JNIEnv* env, jclass, jint numFilters, jobject buffer)
{
// __android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "alDeleteFilters for numFilters: %d", numFilters);
ALuint* pBuffers = (ALuint*) env->GetDirectBufferAddress(buffer);
alDeleteFilters((ALsizei)numFilters, pBuffers);
}
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alEffectf
(JNIEnv *, jclass, jint effect, jint param, jfloat value)
{
// __android_log_print(ANDROID_LOG_INFO, "OpenAL Soft", "alEffectf for effect: %d, param: %d, value: %d", effect, param, value);
alEffectf((ALuint)effect, (ALenum)param, (ALfloat)value);
}
#ifdef __cplusplus

@ -201,6 +201,118 @@ JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRendere
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alListener3f
(JNIEnv *, jclass, jint, jfloat, jfloat, jfloat);
/*
* Class: com_jme3_audio_android_AndroidOpenALSoftAudioRenderer
* Method: alcIsExtensionPresent
* Signature: (Ljava/lang/String;)Z
*/
JNIEXPORT jboolean JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alcIsExtensionPresent
(JNIEnv *, jclass, jstring);
/*
* Class: com_jme3_audio_android_AndroidOpenALSoftAudioRenderer
* Method: alcGetInteger
* Signature: (ILjava/nio/IntBuffer;I)V
*/
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alcGetInteger
(JNIEnv *, jclass, jint, jobject, jint);
/*
* Class: com_jme3_audio_android_AndroidOpenALSoftAudioRenderer
* Method: alGenAuxiliaryEffectSlots
* Signature: (ILjava/nio/IntBuffer;)V
*/
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alGenAuxiliaryEffectSlots
(JNIEnv *, jclass, jint, jobject);
/*
* Class: com_jme3_audio_android_AndroidOpenALSoftAudioRenderer
* Method: alGenEffects
* Signature: (ILjava/nio/IntBuffer;)V
*/
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alGenEffects
(JNIEnv *, jclass, jint, jobject);
/*
* Class: com_jme3_audio_android_AndroidOpenALSoftAudioRenderer
* Method: alEffecti
* Signature: (III)V
*/
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alEffecti
(JNIEnv *, jclass, jint, jint, jint);
/*
* Class: com_jme3_audio_android_AndroidOpenALSoftAudioRenderer
* Method: alAuxiliaryEffectSloti
* Signature: (III)V
*/
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alAuxiliaryEffectSloti
(JNIEnv *, jclass, jint, jint, jint);
/*
* Class: com_jme3_audio_android_AndroidOpenALSoftAudioRenderer
* Method: alDeleteEffects
* Signature: (ILjava/nio/IntBuffer;)V
*/
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alDeleteEffects
(JNIEnv *, jclass, jint, jobject);
/*
* Class: com_jme3_audio_android_AndroidOpenALSoftAudioRenderer
* Method: alDeleteAuxiliaryEffectSlots
* Signature: (ILjava/nio/IntBuffer;)V
*/
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alDeleteAuxiliaryEffectSlots
(JNIEnv *, jclass, jint, jobject);
/*
* Class: com_jme3_audio_android_AndroidOpenALSoftAudioRenderer
* Method: alGenFilters
* Signature: (ILjava/nio/IntBuffer;)V
*/
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alGenFilters
(JNIEnv *, jclass, jint, jobject);
/*
* Class: com_jme3_audio_android_AndroidOpenALSoftAudioRenderer
* Method: alFilteri
* Signature: (III)V
*/
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alFilteri
(JNIEnv *, jclass, jint, jint, jint);
/*
* Class: com_jme3_audio_android_AndroidOpenALSoftAudioRenderer
* Method: alFilterf
* Signature: (IIF)V
*/
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alFilterf
(JNIEnv *, jclass, jint, jint, jfloat);
/*
* Class: com_jme3_audio_android_AndroidOpenALSoftAudioRenderer
* Method: alSource3i
* Signature: (IIIII)V
*/
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alSource3i
(JNIEnv *, jclass, jint, jint, jint, jint, jint);
/*
* Class: com_jme3_audio_android_AndroidOpenALSoftAudioRenderer
* Method: alDeleteFilters
* Signature: (ILjava/nio/IntBuffer;)V
*/
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alDeleteFilters
(JNIEnv *, jclass, jint, jobject);
/*
* Class: com_jme3_audio_android_AndroidOpenALSoftAudioRenderer
* Method: alEffectf
* Signature: (IIF)V
*/
JNIEXPORT void JNICALL Java_com_jme3_audio_android_AndroidOpenALSoftAudioRenderer_alEffectf
(JNIEnv *, jclass, jint, jint, jfloat);
#ifdef __cplusplus
}
#endif

Loading…
Cancel
Save