JTransforms在Android音频中使用

时间:2014-06-24 11:45:37

标签: android audio fft

我一直在寻找快速和完整的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才能使用此库?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

使用Java进行DSP操作比使用优化的库在NDK中进行操作慢得多。

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

特别是如果您想接收幅度和阶段。

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