0

我正在尝试编写一些代码。从我的电脑的麦克风和 b. 接收声音。输出声音的频率(即音高)。它不必非常精确,但必须有效。我花了很多时间浏览关于这个主题的各种论坛,发现它们都应该非常有用,除非我对这个主题有更多的了解,而且也会很有用。但是,我不是一个特别有经验的编码员,而且我看到的大多数答案都超出了我的想象。考虑到我的新手,我知道我可能咬得比我能咀嚼的多,但如果有人能给出一个真正脚踏实地、易于理解的演练,说明我应该如何实现这一点,我将不胜感激。请原谅我的基本问题:)。

我希望用 Java 编写它,但也有 python 和 swift 方面的经验。

4

2 回答 2

1

您的问题有很多解决方案。如果您擅长数学,则可以查看 FFT 的定义并实现公式。

但是,其他程序员已经完成了这项工作,并且有许多不同的库实现了 FFT 功能。

在 python 中,你可以使用 numpy。或者,如果您更喜欢 java,您可以使用该片段:http: //introcs.cs.princeton.edu/java/97data/FFT.java.html

要从麦克风读取,您可以使用: https ://docs.oracle.com/javase/tutorial/sound/capturing.html

(这里有一个从麦克风获取音频的示例: Java Sound API - capturemic

因此,您只需要使用第二个代码,将数据读取为 16 位 PCM 大端序并将其转发给 FFT 函数。

于 2016-05-21T20:52:57.233 回答
1

我已经使用Processing一段时间了,它有几个不错的支持 FFT 的音频库。默认情况下,Processing 是一个 java 库,因此您可能想试一试(如果默认的最小 IDE 不合适,您可以在 eclipse/netbeans/etc 中使用它)。

不过,您不必将处理与这些库一起使用,它们毕竟是 java 库。

Minim有一个带有forward()logAverages()的 FFT 类

Beads还有一个FFT 类,并且有一本书可以更详细地分析分析。

这两个库还提供对声音输入的支持。

于 2016-05-22T10:06:14.467 回答