混響即通過聲音在不同路徑傳播下造成的反射疊加產生的聲音特效,在Android中,Google給出了兩個實現:EnvironmentalReverb和PresetReverb,其中推薦在游戲場景中應用EnvironmentalReverb,在音樂場景中應用PresetReverb。在創(chuàng)建混響實例時,在音頻框架層將會同時創(chuàng)建一個混響引擎;祉懙募毠(jié)由OpenSL ES 1.0.1規(guī)范定義。
為了在通過AudioTrack、MediaPlayer進行音頻播放時具有混響特效,在構建混響實例時指明音頻流的會話ID即可。如果指定的會話ID為0,則混響作用于主要的音頻輸出混音器(mix)上,混響將會話ID指定為0需要"android.permission.MODIFY_AUDIO_SETTINGS"權限。
EnvironmentalReverb的參數包括:
PARAM_DECAY_HF_RATIO、PARAM_DECAY_TIME、PARAM_DENSITY
PARAM_DIFFUSION、PARAM_REFLECTIONS_DELAY、PARAM_REFLECTIONS_LEVEL
PARAM_REVERB_DELAY、PARAM_REVERB_LEVEL、PARAM_ROOM_HF_LEVEL、PARAM_ROOM_LEVEL等。
PresetReverb的參數包括:
PARAM_PRESET、PRESET_LARGEHALL、PRESET_LARGEROOM、PRESET_MEDIUMHALL
PRESET_MEDIUMROOM、PRESET_NONE、PRESET_PLATE、PRESET_SMALLROOM等。
下面是設置PresetReverb屬性的一般過程:
PresetReverb mReverb = new PresetReverb(0, 0);
PresetReverb.Settings settings = mReverb.getProperties();
String str = settings.toString();
settings = new PresetReverb.Settings(str);
short preset = (settings.preset == PresetReverb.PRESET_SMALLROOM) ?
PresetReverb.PRESET_MEDIUMROOM : PresetReverb.PRESET_SMALLROOM;
settings.preset = preset;
mReverb.setProperties(settings);