Android音频混响示例应用

时间:2011-10-01 02:27:26

标签: android audio mp3 android-mediaplayer

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


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();

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

当我在源之后添加这句话时,我能听到声音。

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

然而声音是正常的,没有受到反响。

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

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

除了那些之外,还有什么我必须写的吗?

4 个答案:

答案 0 :(得分:3)

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

不要将它附加到媒体播放器。如果你使用getAudioSessionId(),它已被附加。 (在&gt; v4上测试)

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

答案 1 :(得分: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);

答案 2 :(得分:1)

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

原因

'音频框架'有两个connectMode :( EFFECT_INSERT,EFFECT_AUXILIARY), 必须在会话0(全局输出混合)上创建“辅助效果”。    (参考文献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); 

答案 3 :(得分:0)

这里有一分钱,

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