首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android Visualizer FFT数据依赖于体积

Android Visualizer FFT数据依赖于体积
EN

Stack Overflow用户
提问于 2019-04-13 00:36:13
回答 1查看 607关注 0票数 3

我正在为使用Android可视化器类的统一应用程序编写一个插件。我使用getFft()函数和那里提供的代码来得到FFT的震级。返回的值取决于卷-高得多的值高卷,低得多的值低卷。

下面是我初始化Visualizer的构造函数:

代码语言:javascript
运行
复制
private PluginClass() {
    errors = new int[2];
    int size = Visualizer.getCaptureSizeRange()[1];

    // Equalizer
    Equalizer mEqualizer = new Equalizer(0, 0);

    // Visualizer
    this.visualizer = new Visualizer(0);
    this.visualizer.setEnabled(false);
    mEqualizer.setEnabled(true);
    this.visualizer.setCaptureSize(size);
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
       this.visualizer.setScalingMode(SCALING_MODE_NORMALIZED);
       this.visualizer.setMeasurementMode(MEASUREMENT_MODE_PEAK_RMS);
    }
    this.visualizer.setEnabled(true);

    this.waveFormData = new byte[size];
    this.fftData = new byte[size];
}

我正在设置均衡器(在Visualizer创建之前,在创建它之后,在它被禁用之前,在它被禁用之后,几乎在所有的地方),我已经调用了setEnabled

缩放模式被设置为规范化,当我调用getScalingMode()时,我可以确认它确实被设置为SCALING_MODE_NORMALIZED

有没有人知道这是为什么?在这个问题的另一个重复,没有解释,一个答案是使用setVolumeControlStream(AudioManager.STREAM_MUSIC);。我尝试过,但我不明白它为什么会起作用。

行动组已经放弃了他们以前问过这个问题的问题,回答者提出了悬而未决的问题,而且没有提供代码,所以我不得不打开这个问题。这样的话,我也可以在这个问题上加一个赏金。

我是在VR模式下运行这个应用程序,以防这是一个模糊的bug,与VR,Android,Java和团结,没有很好地一起玩。

谢谢!

这里的编辑是我用来实际生成FFT值的代码:

代码语言:javascript
运行
复制
public float[] getFftMagnitudes() {
    this.errors[0] = this.visualizer.getFft(this.fftData);
    int n = this.fftData.length;
    float[] magnitudes = new float[n / 2 + 1];
    magnitudes[0] = (float)Math.abs(this.fftData[0]);      // DC
    magnitudes[n / 2] = (float)Math.abs(this.fftData[1]);  // Nyquist
    for (int k = 1; k < n / 2; k++) {
        int i = k * 2;
        magnitudes[k] = (float)Math.hypot(this.fftData[i], this.fftData[i + 1]);
    }
    return magnitudes;
}
EN

回答 1

Stack Overflow用户

发布于 2019-04-24 12:28:49

一些FFT实现(例如FFTW)不规范其结果。所以,如果你有一个数组x,把它转换成fourier空间x‘,然后返回,你就不会得到原来的结果。在FFTW的情况下,您必须按照数组的长度进行划分。这是一个长远的机会,但你的问题听起来非常熟悉。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55660990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档