3

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"));
}

何が問題なのか分かりますか?

4

1 に答える 1

0

次のように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 にエラーが表示されます。

于 2013-11-19T00:44:31.770 に答える