4

EQ を使用して mediaPlayer を作成しています。EQ バンドを設定すると正常に動作します。すべてのプリセットを一覧表示するコードがあり、変更時にプリセットを EQ に設定したいのですが、取得してbad parameter valueいます。

これは私のログにあるものです:

09-29 14:29:24.810: W/System.err(27829): java.lang.IllegalArgumentException: AudioEffect: bad parameter value
09-29 14:29:24.835: W/System.err(27829):    at android.media.audiofx.AudioEffect.checkStatus(AudioEffect.java:1259)    
09-29 14:29:24.835: W/System.err(27829):    at android.media.audiofx.Equalizer.usePreset(Equalizer.java:342)

getNumberOfPresets() は 12 を返し、この例で設定するプリセットは 2 です (ただし、0 ~ 11 のすべての値に対して発生します)。

setBandLevel()beforeを使用しusePreset()ても例外はスローされませんが、これが正しい方法であるかどうかはわかりません。編集: setBandLevel は例外とは関係ありません。試行の 80% で、ランダムに飛び出します。

更新: これは (今のところ) Samsung S3 デバイスでのみ発生していることに気付きました。Asus TF101 で正常に動作します。

どんな助けでも大歓迎です。

コードは次のとおりです。

mEqualizer = new Equalizer(0, mMediaPlayer.getAudioSessionId());
mEqualizer.setEnabled(true);
mEqualizer.usePreset((short)mEQPresetPos);
4

1 に答える 1

3

それには 2 つの理由が考えられます。

デバイスがイコライザーをサポートしていない可能性があります。しかし、あなたが言ったように、プリセットのリストを取得します。支えているということです。

問題は、イコライザーのインスタンスが 2 つあることです。イコライザーをリリースする必要があります。

または試す

追加 equalizer.setEnabled(false);

別のものを作成する前に。

于 2015-03-04T11:36:41.483 に答える