首先需要确认设备上是否支持Reverb效果。如果设备不支持该效果,那么即使正确设置了Reverb,也无法生效。
可以通过检查设备的AudioEffect支持列表来确认设备是否支持Reverb效果。示例代码如下:
int[] supportedEffects = AudioEffect.queryEffects();
for (int i = 0; i < supportedEffects.length; i++) {
AudioEffect.Descriptor effectDesc = AudioEffect.queryEffect(supportedEffects[i]);
if (effectDesc.uuid.equals(PresetReverb.UUID) || effectDesc.uuid.equals(EnvironmentalReverb.UUID)) {
// Found Reverb effect, device supports Reverb
break;
}
}
创建Reverb效果对象时,需要指定其UUID和音频会话ID。示例代码如下:
// For PresetReverb
PresetReverb reverb = new PresetReverb(0, audioSessionId);
reverb.setEnabled(true);
reverb.setPreset(PresetReverb.PRESET_LARGEHALL);
// For EnvironmentalReverb
EnvironmentalReverb reverb = new EnvironmentalReverb(0, audioSessionId);
reverb.setEnabled(true);
需要注意的是,PresetReverb和EnvironmentalReverb只能同时存在一个。如果要切换两个效果,需要先将原来的效果对象释放,然后重新创建新的效果对象。
将Reverb效果对象附加到音频播放器或录音器时,需要将其包装在AudioEffect对象中,并调用attach方法进行附加。示例代码如下:
// For MediaPlayer
MediaPlayer player = new MediaPlayer();
// ... initialize player ...
int audioSessionId = player.getAudioSessionId();
// For PresetReverb
PresetReverb reverb = new PresetReverb(0, audioSessionId);
reverb.setEnabled(true);
reverb