JTransforms 在 Android 音频中的使用
Posted
技术标签:
【中文标题】JTransforms 在 Android 音频中的使用【英文标题】:JTransforms usage in Android audio 【发布时间】: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 输入。 【参考方案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 毫秒才能真正开始录制。 看看,让我知道你的想法!以上是关于JTransforms 在 Android 音频中的使用的主要内容,如果未能解决你的问题,请参考以下文章