2011-10-01 23 views
3

是否有任何示例代碼音頻混響使用PresetReverb類從 2.3在Android?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(); 

我執行的源之上,但沒有一點聲音也沒有。

當我在souce後添加這個句子時,我可以聽到聲音。

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

然而,聲音是正常的,沒有混響。

此外,此權限在Manifest.xml上設置。

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

除此之外還有別的東西需要寫嗎?

回答

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

+0

感謝您的回答。 – AAA

1

使用混響,在輸出混音(音頻會話「0」)上創建一個混響 (ref。 http://developer.android.com/reference/android/media/audiofx/PresetReverb.html

原因

'音頻框架' 有兩個connectMode:(EFFECT_INSERT,EFFECT_AUXILIARY), '輔助作用' 必須在會話0(全球輸出混音)。 (ref。http://developer.android.com/reference/android/media/audiofx/AudioEffect.html#EFFECT_AUXILIARY

想象一下REAL混合控制檯。

樣品

PresetReverb mReverb = new PresetReverb(0,0);//<<<<<<<<<<<<< 
mReverb.setPreset(PresetReverb.PRESET_LARGEROOM); 
mReverb.setEnabled(true); 
mMediaPlayer.attachAuxEffect(mReverb.getId()); 
mMediaPlayer.setAuxEffectSendLevel(1.0f); 
0

一%的小費這裏,如果你創建的輸出組合混響

權限許可權只需要(音頻會話0)

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

不要將其固定到mediaplayer。它已經附加,如果你使用getAudioSessionId()。 (在> v4上測試)

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