【问题标题】:JTransforms usage in Android audioJTransforms 在 Android 音频中的使用
【发布时间】:2014-06-24 11:45:36
【问题描述】:

我一直在寻找快速和完整的 DSP java 库来与 android 音频操作一起使用。 我遇到了 FFT 高度计算的问题。然后我找到了 JTransforms。 我无法在任何地方找到有关如何使用它的文档。具体来说,我对输入信号感到困惑。在我的情况下,我有一个 wav 文件,转换为字节数组,然后转换为双数组,使用这个:

public static double[] read(byte[]file) {
    byte[] data = new byte[file.length];
    int N = data.length;
    double[] d = new double[N/2];
    for (int i = 0; i < N/2; i++) {
        d[i] = ((short) (((data[2*i+1] & 0xFF) << 8) + (data[2*i] & 0xFF))) / ((double) MAX_16_BIT);
    }
    return d;
}

但是当我查看this documentation 时,我不明白eache 方法的输入是什么。

复数按顺序存储为两个双精度值

我需要转换成 Complex 才能使用这个库吗?

【问题讨论】:

  • FFT audio input的可能重复
  • 这是一个特定的库。我在问如何使用这个 JTransforms 库。另一个问题是关于转换为一般的 FFt 输入。

标签: android audio fft


【解决方案1】:

DoubleFFT_1D 有方法 realForward 采用实值样本(双精度)数组,因此您无需将输入转换为 Complex。

您链接的documentation 进一步描述了输入要求,具体取决于您使用的是realForward(double[]) 还是realForward(double[], int)

【讨论】:

    【解决方案2】:

    在 Java 中执行 DSP 比在具有良好优化库的 NDK 中执行要慢得多。

    Superpowered Audio SDK 具有许多 DSP 功能,包括优于 Apple vDSP 的 FFT。

    特别是如果您想接收幅度和相位。

    查看 SuperpoweredPolarFFT 方法:http://superpowered.com/docs/_superpowered_f_f_t_8h.html#a0b63c427504bcbbd9ead8a2ff58daf62

    【讨论】:

    • 我喜欢你项目的想法。我在 android 上遇到了很多音频问题。我在录制时仍然有奇怪的延迟,有时需要 500 毫秒才能真正开始录制。
    • 看看,让我知道你的想法!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多