我目前正在制作音乐应用。我正在尝试使用android中的PresetReverb类在应用程序中实现混响功能。我已经成功实现了均衡器频段,Bass Booster和Virtualizer,它们都运行得很好。但是在混响的情况下,它不会对声音做任何改变。
现在,我已经知道所有Android设备都没有混响效果,但我的设备(Samsung Galaxy S4 w / android 5.0.1版)在默认音乐播放器中有混响效果。
实施: -
... // Three dots mean other code not relevant to question
1)音乐服务类
这是处理应用程序的服务。(例如,音频效果的初始化)
public class MusicService extends Service implements
MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener,
MediaPlayer.OnCompletionListener {
public static PresetReverb mPresetReverb; //Here I declare the PresetReverb Effect
...
@Override
public void onPrepared(MediaPlayer mp) {
//start playback
mp.start();
if (player != null) {
...
mPresetReverb = new PresetReverb(1, 0);
...
mEqualizer.setEnabled(true);
}
}
...
}
2)均衡器活动
此活动用于设置音频效果
public class EqualizerActivity extends AppCompatActivity {
...
public void reverbPresetClicked(View view) {
switch (view.getId()) {
case R.id.none_preset:
MusicService.mPresetReverb.setPreset(PresetReverb.PRESET_NONE);
break;
case R.id.small_room_preset:
MusicService.mPresetReverb.setPreset(PresetReverb.PRESET_SMALLROOM);
break;
case R.id.medium_room_preset:
MusicService.mPresetReverb.setPreset(PresetReverb.PRESET_MEDIUMROOM);
break;
case R.id.large_room_preset:
MusicService.mPresetReverb.setPreset(PresetReverb.PRESET_LARGEROOM);
break;
case R.id.plate_preset:
MusicService.mPresetReverb.setPreset(PresetReverb.PRESET_PLATE);
break;
case R.id.medium_hall_preset:
MusicService.mPresetReverb.setPreset(PresetReverb.PRESET_MEDIUMHALL);
break;
case R.id.large_hall_preset:
MusicService.mPresetReverb.setPreset(PresetReverb.PRESET_LARGEHALL);
break;
}
Log.e("Equalizer", "Preset Reverb : " + MusicService.mPresetReverb.getPreset());
MusicService.mPresetReverb.setEnabled(true);
MusicService.player.attachAuxEffect(MusicService.mPresetReverb.getId());
MusicService.player.setAuxEffectSendLevel(1.0f);
}
...
}
Log语句的输出证明正在设置预设,但声音仍然没有变化。
如果代码是正确的并且设备是问题,有人可以向我发送支持混响效果的设备列表,或者如果代码有问题,有人会指出我正确的方向吗?