【问题标题】:Android audio reverb Sample AppAndroid 音频混响示例应用
【发布时间】:2011-10-01 02:27:26
【问题描述】:

是否有任何使用 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();

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

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

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

但是声音是正常的,不是混响的。

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

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

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

【问题讨论】:

    标签: android audio mp3 android-mediaplayer


    【解决方案1】:
    PresetReverb mReverb = new PresetReverb(0,mMediaPlayer.getAudioSessionId());//<<<<<<<<<<<<<
    mReverb.setPreset(PresetReverb.PRESET_SMALLROOM);
    mReverb.setEnabled(true);
    mMediaPlayer.setAuxEffectSendLevel(1.0f);
    

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        原因

        'Audio framework'有两个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); 
        

        【讨论】:

          【解决方案4】:

          这里给一美分小费,

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-02-06
            • 2010-11-10
            • 1970-01-01
            • 1970-01-01
            • 2011-10-16
            • 2015-07-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多