我正在开发一个小型音频播放器,支持android的内置音频效果(比如environmentalreverb)。到目前为止,我遇到了在不崩溃的情况下启动它的问题,我通过向androidmanifest.xml添加缺少的权限解决了这个问题。现在的问题是我只是没有听到任何混响。
这是我的代码:
MediaPlayer player;
EnvironmentalReverb eReverb;
boolean enabled = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final MediaPlayer player = MediaPlayer.create(this, R.raw.andthentocoda);
/*
PresetReverb pReverb = new PresetReverb(1,0);
player.attachAuxEffect(pReverb.getId());
pReverb.setPreset(PresetReverb.PRESET_LARGEHALL);
pReverb.setEnabled(true);
player.setAuxEffectSendLevel(1.0f);
*/
eReverb = new EnvironmentalReverb(1,0);
eReverb.setDecayHFRatio((short) 1000);
eReverb.setDecayTime(10000);
eReverb.setDensity((short) 1000);
eReverb.setDiffusion((short) 1000);
eReverb.setReverbLevel((short) -1000);
eReverb.setEnabled(enabled);
player.attachAuxEffect(eReverb.getId());
player.setAuxEffectSendLevel(0.5f);
player.start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void clicked(View v)
{
enabled = !enabled;
eReverb.setEnabled(enabled);
Log.d("EFECT", "Effect " + (enabled ? "enabled" : "disabled"));
}
你知道问题出在哪里吗?
最佳答案
我将audioTrack
实例附加到audioEffect
上,如下所示:
try {
plateReverb = new PresetReverb(0, mAudioTrack.getAudioSessionId());
} catch (Throwable e){
plateReverb = null;
}
if (plateReverb!=null){plateReverb.setPreset(PresetReverb.PRESET_PLATE);}
当然,您必须将
mAudioTrack.getAudioSessionId()
替换为player.getAudioSessionId()
但我不知道这是不是你听不见的原因。有些设备不支持音频效果,您将在logcat上看到一个错误。
关于android - Android的PresetReverb不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15314243/