3

是否有使用 Android 2.3 中的 PresetReverb 类的音频混响示例代码?


MediaPlayer mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(this, Uri.parse("/sdcard/music/sample.mp3"));
PresetReverb mReverb = new PresetReverb(0,
mMediaPlayer.getAudioSessionId());
mReverb.setPreset(PresetReverb.PRESET_LARGEROOM);
mReverb.setEnabled(true);
mMediaPlayer.attachAuxEffect(mReverb.getId());
mMediaPlayer.setAuxEffectSendLevel(1.0f);
mMediaPlayer.prepare();
mMediaPlayermp.start();

我执行了上面的源,但没有听到任何声音。

当我在souce后面加上这句话时,我能听到声音。

Thread.sleep(10000);
mp.stop();

但是声音是正常的,没有混响。

此外,此权限是在 Manifest.xml 上设置的。

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

除了这些,我还有什么要写的吗?

4

4 回答 4

3
PresetReverb mReverb = new PresetReverb(0,mMediaPlayer.getAudioSessionId());//<<<<<<<<<<<<<
mReverb.setPreset(PresetReverb.PRESET_SMALLROOM);
mReverb.setEnabled(true);
mMediaPlayer.setAuxEffectSendLevel(1.0f);

不要将其附加到媒体播放器。如果您使用 getAudioSessionId(),它已经附加。(在 >v4 上测试)

要禁用,请使用 effect.setEnabled(false);

于 2013-09-20T12:54:17.620 回答
1

使用混响,在输出混音(音频会话“0”)上创建混响(参考http://developer.android.com/reference/android/media/audiofx/PresetReverb.html

原因

'Audio framework' 有两个 connectMode:(EFFECT_INSERT, EFFECT_AUXILIARY),'Auxiliary effects' 必须在 session 0 (global output mix) 上创建。(参考http://developer.android.com/reference/android/media/audiofx/AudioEffect.html#EFFECT_AUXILIARY

想象一下真正的调音台。

样本

PresetReverb mReverb = new PresetReverb(0,0);//<<<<<<<<<<<<<
mReverb.setPreset(PresetReverb.PRESET_LARGEROOM);
mReverb.setEnabled(true);
mMediaPlayer.attachAuxEffect(mReverb.getId());
mMediaPlayer.setAuxEffectSendLevel(1.0f); 
于 2012-02-22T15:28:22.283 回答
1

实例化PresetReverb. PresetReverb您需要附加的音频会话 ID 。然后只需设置您要使用的混响预设。

PresetReverb reverb = new  PresetReverb(0, mediaPlayer.getAudioSessionId());
        reverb.setPreset( PresetReverb.PRESET_LARGEHALL);
        reverb.setPreset(PresetReverb.PRESET_LARGEROOM);

此外,如果您需要参数侦听器,那么让您的类实现PresetReverb.OnParameterChangeListener

然后覆盖未实现的方法

@Override
    public void onParameterChange(PresetReverb effect, int status, int param,
            short value) {
        // TODO Auto-generated method stub

    }

在需要应用混响的地方,只需使用: reverb.setEnabled(true);

于 2011-10-03T08:31:36.553 回答
0

一分钱小费,

仅当您在输出混音(音频会话 0)上创建混响时才需要权限 MODIFY_AUDIO_SETTINGS

于 2013-06-18T02:13:19.357 回答