Android中对音乐的混响效果

时间:2016-02-13 11:37:39

标签: android

我目前正在制作音乐应用。我正在尝试使用android中的PresetReverb类在应用程序中实现混响功能。我已经成功实现了均衡器频段,Bass Booster和Virtualizer,它们都运行得很好。但是在混响的情况下,它不会对声音做任何改变。

现在,我已经知道所有Android设备都没有混响效果,但我的设备(Samsung Galaxy S4 w / android 5.0.1版)在默认音乐播放器中有混响效果。

实施: -

 ... // Three dots mean other code not relevant to question

1)音乐服务类

这是处理应用程序的服务。(例如,音频效果的初始化)

public class MusicService extends Service implements
        MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener,
        MediaPlayer.OnCompletionListener {

   public static PresetReverb mPresetReverb; //Here I declare the PresetReverb Effect

   ...

@Override
  public void onPrepared(MediaPlayer mp) {
    //start playback
    mp.start();

    if (player != null) {
        ...
        mPresetReverb = new PresetReverb(1, 0);           
        ...
        mEqualizer.setEnabled(true);
    }
  }

  ...
  }

2)均衡器活动

此活动用于设置音频效果

public class EqualizerActivity extends AppCompatActivity {

...

  public void reverbPresetClicked(View view) {

          switch (view.getId()) {
             case R.id.none_preset:
                MusicService.mPresetReverb.setPreset(PresetReverb.PRESET_NONE);
                break;
             case R.id.small_room_preset:    
                MusicService.mPresetReverb.setPreset(PresetReverb.PRESET_SMALLROOM);
                break;
             case R.id.medium_room_preset:
                MusicService.mPresetReverb.setPreset(PresetReverb.PRESET_MEDIUMROOM);
                break;
             case R.id.large_room_preset:
                MusicService.mPresetReverb.setPreset(PresetReverb.PRESET_LARGEROOM);                    
                break;
             case R.id.plate_preset:
                MusicService.mPresetReverb.setPreset(PresetReverb.PRESET_PLATE);
                break;
             case R.id.medium_hall_preset:
                MusicService.mPresetReverb.setPreset(PresetReverb.PRESET_MEDIUMHALL);
                break;
            case R.id.large_hall_preset:
                MusicService.mPresetReverb.setPreset(PresetReverb.PRESET_LARGEHALL);
                break;

        }

        Log.e("Equalizer", "Preset Reverb : " + MusicService.mPresetReverb.getPreset());
        MusicService.mPresetReverb.setEnabled(true);
        MusicService.player.attachAuxEffect(MusicService.mPresetReverb.getId());
        MusicService.player.setAuxEffectSendLevel(1.0f);

    }

...

}

Log语句的输出证明正在设置预设,但声音仍然没有变化。

如果代码是正确的并且设备是问题,有人可以向我发送支持混响效果的设备列表,或者如果代码有问题,有人会指出我正确的方向吗?

0 个答案:

没有答案