我知道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类?
答案 0 :(得分:2)
Android的均衡器和过滤器存在严重问题。它们在不同的设备上是不一致的(在某些设备根本不可用),它们可能表现不佳(高CPU负载)。
虽然滤波器是IIR,但是陷波或参数滤波器类型可以配置为非常陡峭的切割。在我的联合创始人的DJ应用程序djplayerapp.com中,他可以用它们削减-100分贝。
文档:http://superpowered.com/docs/class_superpowered_filter.html#details
使用Superpowered Audio SDK,您可以获得针对移动设备设计的性能最高的过滤器,它们可以在具有相同音频质量的所有Android设备上运行。
答案 1 :(得分:0)
经过大量研究后,我发现没有用于DSP目的的原生FIR方法,我将不得不使用android的内置均衡器或实现我自己的FIR滤波器。 Android的均衡器只能过滤频率范围,你无法设置低通滤波器。