FileDocCategorySizeDatePackage
EnvironmentalReverb.javaAPI DocAndroid 5.1 API28477Thu Mar 12 22:22:30 GMT 2015android.media.audiofx

EnvironmentalReverb

public class EnvironmentalReverb extends android.media.audiofx.AudioEffect
A sound generated within a room travels in many directions. The listener first hears the direct sound from the source itself. Later, he or she hears discrete echoes caused by sound bouncing off nearby walls, the ceiling and the floor. As sound waves arrive after undergoing more and more reflections, individual reflections become indistinguishable and the listener hears continuous reverberation that decays over time. Reverb is vital for modeling a listener's environment. It can be used in music applications to simulate music being played back in various environments, or in games to immerse the listener within the game's environment. The EnvironmentalReverb class allows an application to control each reverb engine property in a global reverb environment and is more suitable for games. For basic control, more suitable for music applications, it is recommended to use the {@link android.media.audiofx.PresetReverb} class.

An application creates a EnvironmentalReverb object to instantiate and control a reverb engine in the audio framework.

The methods, parameter types and units exposed by the EnvironmentalReverb implementation are directly mapping those defined by the OpenSL ES 1.0.1 Specification (http://www.khronos.org/opensles/) for the SLEnvironmentalReverbItf interface. Please refer to this specification for more details.

The EnvironmentalReverb is an output mix auxiliary effect and should be created on Audio session 0. In order for a MediaPlayer or AudioTrack to be fed into this effect, they must be explicitely attached to it and a send level must be specified. Use the effect ID returned by getId() method to designate this particular effect when attaching it to the MediaPlayer or AudioTrack.

Creating a reverb on the output mix (audio session 0) requires permission {@link android.Manifest.permission#MODIFY_AUDIO_SETTINGS}

See {@link android.media.audiofx.AudioEffect} class for more details on controlling audio effects.

Fields Summary
private static final String
TAG
public static final int
PARAM_ROOM_LEVEL
Room level. Parameter ID for OnParameterChangeListener
public static final int
PARAM_ROOM_HF_LEVEL
Room HF level. Parameter ID for OnParameterChangeListener
public static final int
PARAM_DECAY_TIME
Decay time. Parameter ID for OnParameterChangeListener
public static final int
PARAM_DECAY_HF_RATIO
Decay HF ratio. Parameter ID for {@link android.media.audiofx.EnvironmentalReverb.OnParameterChangeListener}
public static final int
PARAM_REFLECTIONS_LEVEL
Early reflections level. Parameter ID for OnParameterChangeListener
public static final int
PARAM_REFLECTIONS_DELAY
Early reflections delay. Parameter ID for OnParameterChangeListener
public static final int
PARAM_REVERB_LEVEL
Reverb level. Parameter ID for OnParameterChangeListener
public static final int
PARAM_REVERB_DELAY
Reverb delay. Parameter ID for OnParameterChangeListener
public static final int
PARAM_DIFFUSION
Diffusion. Parameter ID for OnParameterChangeListener
public static final int
PARAM_DENSITY
Density. Parameter ID for OnParameterChangeListener
private static final int
PARAM_PROPERTIES
private OnParameterChangeListener
mParamListener
Registered listener for parameter changes
private BaseParameterListener
mBaseParamListener
Listener used internally to to receive raw parameter change event from AudioEffect super class
private final Object
mParamListenerLock
Lock for access to mParamListener
private static int
PROPERTY_SIZE
Constructors Summary
public EnvironmentalReverb(int priority, int audioSession)
Class constructor.

param
priority the priority level requested by the application for controlling the EnvironmentalReverb engine. As the same engine can be shared by several applications, this parameter indicates how much the requesting application needs control of effect parameters. The normal priority is 0, above normal is a positive number, below normal a negative number.
param
audioSession system wide unique audio session identifier. If audioSession is not 0, the EnvironmentalReverb will be attached to the MediaPlayer or AudioTrack in the same audio session. Otherwise, the EnvironmentalReverb will apply to the output mix. As the EnvironmentalReverb is an auxiliary effect it is recommended to instantiate it on audio session 0 and to attach it to the MediaPLayer auxiliary output.
throws
java.lang.IllegalArgumentException
throws
java.lang.UnsupportedOperationException
throws
java.lang.RuntimeException


                                                                                                                                          
        
        
        super(EFFECT_TYPE_ENV_REVERB, EFFECT_TYPE_NULL, priority, audioSession);
    
Methods Summary
public shortgetDecayHFRatio()
Gets the ratio of high frequency decay time (at 5 kHz) relative to low frequencies.

return
the decay HF ration. See {@link #setDecayHFRatio(short)} for units.
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = new byte[2];
        checkStatus(getParameter(PARAM_DECAY_HF_RATIO, param));
        return byteArrayToShort(param);
    
public intgetDecayTime()
Gets the decay time.

return
the decay time in milliseconds.
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = new byte[4];
        checkStatus(getParameter(PARAM_DECAY_TIME, param));
        return byteArrayToInt(param);
    
public shortgetDensity()
Gets the density level.

return
the density level. See {@link #setDiffusion(short)} for units.
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = new byte[2];
        checkStatus(getParameter(PARAM_DENSITY, param));
        return byteArrayToShort(param);
    
public shortgetDiffusion()
Gets diffusion level.

return
the diffusion level. See {@link #setDiffusion(short)} for units.
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = new byte[2];
        checkStatus(getParameter(PARAM_DIFFUSION, param));
        return byteArrayToShort(param);
    
public android.media.audiofx.EnvironmentalReverb$SettingsgetProperties()
Gets the environmental reverb properties. This method is useful when a snapshot of current reverb settings must be saved by the application.

return
an EnvironmentalReverb.Settings object containing all current parameters values
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException


                                              
      
        
        byte[] param = new byte[PROPERTY_SIZE];
        checkStatus(getParameter(PARAM_PROPERTIES, param));
        Settings settings = new Settings();
        settings.roomLevel = byteArrayToShort(param, 0);
        settings.roomHFLevel = byteArrayToShort(param, 2);
        settings.decayTime = byteArrayToInt(param, 4);
        settings.decayHFRatio = byteArrayToShort(param, 8);
        settings.reflectionsLevel = byteArrayToShort(param, 10);
        settings.reflectionsDelay = byteArrayToInt(param, 12);
        settings.reverbLevel = byteArrayToShort(param, 16);
        settings.reverbDelay = byteArrayToInt(param, 18);
        settings.diffusion = byteArrayToShort(param, 22);
        settings.density = byteArrayToShort(param, 24);
        return settings;
    
public intgetReflectionsDelay()
Gets the reflections delay.

return
the early reflections delay in milliseconds.
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = new byte[4];
        checkStatus(getParameter(PARAM_REFLECTIONS_DELAY, param));
        return byteArrayToInt(param);
    
public shortgetReflectionsLevel()
Gets the volume level of the early reflections.

return
the early reflections level in millibels.
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = new byte[2];
        checkStatus(getParameter(PARAM_REFLECTIONS_LEVEL, param));
        return byteArrayToShort(param);
    
public intgetReverbDelay()
Gets the reverb delay.

return
the reverb delay in milliseconds.
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = new byte[4];
        checkStatus(getParameter(PARAM_REVERB_DELAY, param));
        return byteArrayToInt(param);
    
public shortgetReverbLevel()
Gets the reverb level.

return
the reverb level in millibels.
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = new byte[2];
        checkStatus(getParameter(PARAM_REVERB_LEVEL, param));
        return byteArrayToShort(param);
    
public shortgetRoomHFLevel()
Gets the room HF level.

return
the room HF level in millibels.
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = new byte[2];
        checkStatus(getParameter(PARAM_ROOM_HF_LEVEL, param));
        return byteArrayToShort(param);
    
public shortgetRoomLevel()
Gets the master volume level of the environmental reverb effect.

return
the room level in millibels.
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = new byte[2];
        checkStatus(getParameter(PARAM_ROOM_LEVEL, param));
        return byteArrayToShort(param);
    
public voidsetDecayHFRatio(short decayHFRatio)
Sets the ratio of high frequency decay time (at 5 kHz) relative to the decay time at low frequencies.

param
decayHFRatio high frequency decay ratio using a permille scale. The valid range is [100, 2000]. A ratio of 1000 indicates that all frequencies decay at the same rate.
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = shortToByteArray(decayHFRatio);
        checkStatus(setParameter(PARAM_DECAY_HF_RATIO, param));
    
public voidsetDecayTime(int decayTime)
Sets the time taken for the level of reverberation to decay by 60 dB.

param
decayTime decay time in milliseconds. The valid range is [100, 20000].
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = intToByteArray(decayTime);
        checkStatus(setParameter(PARAM_DECAY_TIME, param));
    
public voidsetDensity(short density)
Controls the modal density of the late reverberation decay.

The scale should approximately map linearly to the perceived change in reverberation. A lower density creates a hollow sound that is useful for simulating small reverberation spaces such as bathrooms.

param
density density specified using a permille scale. The valid range is [0, 1000]. A value of 1000 o/oo indicates a natural sounding reverberation. Values below this level produce a more colored effect.
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = shortToByteArray(density);
        checkStatus(setParameter(PARAM_DENSITY, param));
    
public voidsetDiffusion(short diffusion)
Sets the echo density in the late reverberation decay.

The scale should approximately map linearly to the perceived change in reverberation.

param
diffusion diffusion specified using a permille scale. The diffusion valid range is [0, 1000]. A value of 1000 o/oo indicates a smooth reverberation decay. Values below this level give a more grainy character.
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = shortToByteArray(diffusion);
        checkStatus(setParameter(PARAM_DIFFUSION, param));
    
public voidsetParameterListener(android.media.audiofx.EnvironmentalReverb$OnParameterChangeListener listener)
Registers an OnParameterChangeListener interface.

param
listener OnParameterChangeListener interface registered

        synchronized (mParamListenerLock) {
            if (mParamListener == null) {
                mParamListener = listener;
                mBaseParamListener = new BaseParameterListener();
                super.setParameterListener(mBaseParamListener);
            }
        }
    
public voidsetProperties(android.media.audiofx.EnvironmentalReverb$Settings settings)
Sets the environmental reverb properties. This method is useful when reverb settings have to be applied from a previous backup.

param
settings a EnvironmentalReverb.Settings object containing the properties to apply
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException


        byte[] param = concatArrays(shortToByteArray(settings.roomLevel),
                                    shortToByteArray(settings.roomHFLevel),
                                    intToByteArray(settings.decayTime),
                                    shortToByteArray(settings.decayHFRatio),
                                    shortToByteArray(settings.reflectionsLevel),
                                    intToByteArray(settings.reflectionsDelay),
                                    shortToByteArray(settings.reverbLevel),
                                    intToByteArray(settings.reverbDelay),
                                    shortToByteArray(settings.diffusion),
                                    shortToByteArray(settings.density));

        checkStatus(setParameter(PARAM_PROPERTIES, param));
    
public voidsetReflectionsDelay(int reflectionsDelay)
Sets the delay time for the early reflections.

This method sets the time between when the direct path is heard and when the first reflection is heard.

param
reflectionsDelay reflections delay in milliseconds. The valid range is [0, 300].
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = intToByteArray(reflectionsDelay);
        checkStatus(setParameter(PARAM_REFLECTIONS_DELAY, param));
    
public voidsetReflectionsLevel(short reflectionsLevel)
Sets the volume level of the early reflections.

This level is combined with the overall room level (set using {@link #setRoomLevel(short)}).

param
reflectionsLevel reflection level in millibels. The valid range is [-9000, 1000].
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = shortToByteArray(reflectionsLevel);
        checkStatus(setParameter(PARAM_REFLECTIONS_LEVEL, param));
    
public voidsetReverbDelay(int reverbDelay)
Sets the time between the first reflection and the reverberation.

param
reverbDelay reverb delay in milliseconds. The valid range is [0, 100].
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = intToByteArray(reverbDelay);
        checkStatus(setParameter(PARAM_REVERB_DELAY, param));
    
public voidsetReverbLevel(short reverbLevel)
Sets the volume level of the late reverberation.

This level is combined with the overall room level (set using {@link #setRoomLevel(short)}).

param
reverbLevel reverb level in millibels. The valid range is [-9000, 2000].
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = shortToByteArray(reverbLevel);
        checkStatus(setParameter(PARAM_REVERB_LEVEL, param));
    
public voidsetRoomHFLevel(short roomHF)
Sets the volume level at 5 kHz relative to the volume level at low frequencies of the overall reverb effect.

This controls a low-pass filter that will reduce the level of the high-frequency.

param
roomHF high frequency attenuation level in millibels. The valid range is [-9000, 0].
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = shortToByteArray(roomHF);
        checkStatus(setParameter(PARAM_ROOM_HF_LEVEL, param));
    
public voidsetRoomLevel(short room)
Sets the master volume level of the environmental reverb effect.

param
room room level in millibels. The valid range is [-9000, 0].
throws
IllegalStateException
throws
IllegalArgumentException
throws
UnsupportedOperationException

        byte[] param = shortToByteArray(room);
        checkStatus(setParameter(PARAM_ROOM_LEVEL, param));