Browse Source

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
iwg..om 12 năm trước cách đây
mục cha
commit
785d50f516

BIN
engine/lib/openal-soft/jME3-openal-soft-natives-android.jar


BIN
engine/lib/openal-soft/jarcontent/armeabi-v7a/libopenalsoftjme.so


BIN
engine/lib/openal-soft/jarcontent/armeabi/libopenalsoftjme.so


BIN
engine/lib/openal-soft/jarcontent/x86/libopenalsoftjme.so


+ 670 - 0
engine/src/android/com/jme3/audio/android/AL.java

@@ -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;

+ 187 - 197
engine/src/android/com/jme3/audio/android/AndroidOpenALSoftAudioRenderer.java

@@ -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);
-//            ALC10.alcGetInteger(device, EFX10.ALC_EFX_MAJOR_VERSION, ib);
-//            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});
-//
-//            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);
-//            EFX10.alGenAuxiliaryEffectSlots(ib);
-//            reverbFxSlot = ib.get(0);
-//
-//            // create effect
-//            ib.position(0).limit(1);
-//            EFX10.alGenEffects(ib);
-//            reverbFx = ib.get(0);
-//            EFX10.alEffecti(reverbFx, EFX10.AL_EFFECT_TYPE, EFX10.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.");
-//        }
+        //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);
+            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);
+            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);
+            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);
+            alGenAuxiliaryEffectSlots(1, ib);
+            reverbFxSlot = ib.get(0);
+
+            // create effect
+            ib.position(0).limit(1);
+            //EFX10.alGenEffects(ib);
+            alGenEffects(1, ib);
+            reverbFx = ib.get(0);
+            //EFX10.alEffecti(reverbFx, EFX10.AL_EFFECT_TYPE, EFX10.AL_EFFECT_REVERB);
+            alEffecti(reverbFx, AL.AL_EFFECT_TYPE, AL.AL_EFFECT_REVERB);
+
+            // attach reverb effect to effect slot
+            //EFX10.alAuxiliaryEffectSloti(reverbFxSlot, EFX10.AL_EFFECTSLOT_EFFECT, reverbFx);
+            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);
-//            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);
-//            EFX10.alDeleteAuxiliaryEffectSlots(ib);
-//        }
-//
+        if (supportEfx) {
+            ib.position(0).limit(1);
+            ib.put(0, reverbFx);
+            //EFX10.alDeleteEffects(ib);
+            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);
-//            EFX10.alGenFilters(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);
-//            EFX10.alFilterf(id, EFX10.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();
+        int id = f.getId();
+        if (id == -1) {
+            ib.position(0).limit(1);
+            //EFX10.alGenFilters(ib);
+            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());
+            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();
-//                    }
-//                    AL11.alSource3i(id, EFX10.AL_AUXILIARY_SEND_FILTER, reverbFxSlot, 0, filter);
+                    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()) {
@@ -393,7 +407,8 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
                     if (src.isReverbEnabled()) {
                         updateSourceParam(src, AudioParam.ReverbFilter);
                     } else {
-//                        AL11.alSource3i(id, EFX10.AL_AUXILIARY_SEND_FILTER, 0, 0, EFX10.AL_FILTER_NULL);
+                        //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:
@@ -410,7 +425,8 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
                         checkError(true);
 
                         // Disable reverb
-//                        AL11.alSource3i(id, EFX10.AL_AUXILIARY_SEND_FILTER, 0, 0, EFX10.AL_FILTER_NULL);
+                        //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.
-//                            alSourcei(id, EFX10.AL_DIRECT_FILTER, f.getId());
-//                        }
-//                    } else {
-//                        alSourcei(id, EFX10.AL_DIRECT_FILTER, EFX10.AL_FILTER_NULL);
-//                    }
-//                    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.
+                            //alSourcei(id, EFX10.AL_DIRECT_FILTER, f.getId());
+                            alSourcei(id, AL.AL_DIRECT_FILTER, f.getId());
+                        }
+                    } else {
+                        //alSourcei(id, EFX10.AL_DIRECT_FILTER, EFX10.AL_FILTER_NULL);
+                        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) {
-//                int filter = EFX10.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);
-//            }
+            if (src.isReverbEnabled() && supportEfx) {
+                //int filter = EFX10.AL_FILTER_NULL;
+                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.
-//                alSourcei(id, EFX10.AL_DIRECT_FILTER, f.getId());
-//            }
-//        }
-//
+        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);
@@ -715,26 +736,38 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
                 return;
             }
 
-//            EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_DENSITY, env.getDensity());
-//            EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_DIFFUSION, env.getDiffusion());
-//            EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_GAIN, env.getGain());
-//            EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_GAINHF, env.getGainHf());
-//            EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_DECAY_TIME, env.getDecayTime());
-//            EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_DECAY_HFRATIO, env.getDecayHFRatio());
-//            EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_REFLECTIONS_GAIN, env.getReflectGain());
-//            EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_REFLECTIONS_DELAY, env.getReflectDelay());
-//            EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_LATE_REVERB_GAIN, env.getLateReverbGain());
-//            EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_LATE_REVERB_DELAY, env.getLateReverbDelay());
-//            EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_AIR_ABSORPTION_GAINHF, env.getAirAbsorbGainHf());
-//            EFX10.alEffectf(reverbFx, EFX10.AL_REVERB_ROOM_ROLLOFF_FACTOR, env.getRoomRolloffFactor());
-//
-//            // attach effect to slot
-//            EFX10.alAuxiliaryEffectSloti(reverbFxSlot, EFX10.AL_EFFECTSLOT_EFFECT, reverbFx);
+            //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());
+            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);
@@ -906,12 +915,14 @@ 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, 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);
+                    //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
@@ -1268,20 +1254,14 @@ public class AndroidOpenALSoftAudioRenderer implements AudioRenderer, Runnable {
     public void deleteFilter(Filter filter) {
         int id = filter.getId();
         if (id != -1) {
-//            EFX10.alDeleteFilters(id);
+            //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");
     }
 
-
 }

+ 0 - 1
engine/src/openal-soft-native/android/Application.mk

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

+ 150 - 0
engine/src/openal-soft-native/android/com_jme3_audio_android_AndroidOpenALSoftAudioRenderer.cpp

@@ -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

+ 112 - 0
engine/src/openal-soft-native/android/com_jme3_audio_android_AndroidOpenALSoftAudioRenderer.h

@@ -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