【问题标题】:how to completely filter a frequency range android如何完全过滤频率范围android
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-06-10
      • 1970-01-01
      • 2022-07-23
      • 1970-01-01
      • 1970-01-01
      • 2014-11-23
      • 2016-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多