0

我一直在对给定原始音频的频率进行一些研究。似乎有很多关于它的信息,但我一直无法找到使用java的简单实现。我想要做的是将具有 44.1K 元素的字节数组划分为大小为 44 的样本(丢弃剩余部分),并确定每个样本中是否有超过 18KHz 的音调(我试图找到音调录音期间播放的声音被麦克风拾取)。如果需要,我可以使用更大的样本,但每个样本 44 个元素是理想的。我知道我可能需要使用 FFT,但数学对我来说有点沉重。我曾尝试使用 goertzel 算法分析阵列,但无法获得确凿的结果。那么我的问题是如何将一个字节数组与 44 分开。将 1K 个元素分成 1002 个样本,确定每个样本的频率(或检测样本的频率是否超过 18KHz),以及如何实现此示例。请给出代码或伪代码。我已经阅读了很多文档,我只需要查看一个示例。

4

1 回答 1

0

关于 Java 中的 FFT,请查看Java 中的 Reliable and fast FFT

其他一切都只是一个循环:

for (int i=0; i<sampleArray.length; i+=44) {
    if (findOver18KHz(sampleArray, i, i++44)) {
        // found tone over 18KHz
    }
}

/**
 * Check for a tone over 18KHz
 */
boolean findOver18KHz(int[] samples, start, end) {
  // call the FFT stuff
  // make sure you don't get an ArrayOutOfBoundsException for samples.
}
于 2013-09-09T06:13:53.313 回答