【发布时间】:2012-12-27 02:57:27
【问题描述】:
我知道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 类?
【问题讨论】:
-
从数学上讲,不可能完全删除给定的频率范围。您只能将其减少任意数量。
-
不能过滤掉所有大于x hz的频率吗?
-
是的,同样的论点也适用。
-
如果标准均衡器不能充分衰减所需的频段,您最好的选择可能是实现一个带阻滤波器,让您的音频通过,或者进行 FFT(您在您自己定义了频率分档)并大幅衰减您想要抑制的分档。
-
@Michael:由于Gibbs' phenomenon,仅仅衰减单个垃圾箱不会产生好的结果。
标签: android audio signal-processing fft