4

我知道android.media.audiofx.Equalizer可以增益/降低频带。我需要做的是完全过滤掉一个频率范围。这是用于增益/降低频率的代码:

            Equalizer mEqualizer = new Equalizer(0,audioSessionId);
        mEqualizer.setEnabled(true);

        short bands = mEqualizer.getNumberOfBands();
        final short minEQLevel = mEqualizer.getBandLevelRange()[0];
        final short maxEQLevel = mEqualizer.getBandLevelRange()[1];
        mEqualizer.setBandLevel((short) 0, (short) (maxEQLevel));
        mEqualizer.setBandLevel((short) 1, (short) (maxEQLevel));
//the following code wont work because setting levels.lower than minimum level is not acceptable
        mEqualizer.setBandLevel((short) 2, (short) (-1000000));

如果我的要求是不可能的,那么你会建议什么?从头开始编写 FFT 类?

4

2 回答 2

2

Android 的均衡器和过滤器存在严重问题。它们在设备之间不一致(在一些根本不可用的设备上),并且它们可能表现不佳(高 CPU 负载)。

尽管滤波器是 IIR,但陷波或参数滤波器类型可以配置为非常陡峭的切割。在我的联合创始人的 DJ 应用程序 djplayerapp.com 中,他可以使用它们减少 -100 分贝。

文档:http ://superpowered.com/docs/class_superpowered_filter.html#details

使用 Superpowered Audio SDK,您可以拥有专为移动设备设计的最高性能过滤器,并且它们可以在具有相同音频质量的所有 Android 设备上工作。

于 2014-08-06T21:38:34.960 回答
1

好的,经过大量研究,我发现没有用于 DSP 的本地 FIR 方法,我将不得不使用 android 内置的均衡器或实现我自己的 FIR 滤波器。Android 的均衡器只能过滤频率范围,您无法设置低通滤波器。

于 2013-03-15T22:47:12.610 回答