我正在尝试编写一些代码。从我的电脑麦克风接收声音和b。输出声音的频率(即音高)。它不一定非常精确,但必须工作。我花了很多时间仔细阅读这个主题的各种论坛,并发现它们都应该非常有用,除非我对这个主题有更多的了解。但是,我不是一个特别有经验的编码员,而且我见过的大部分答案都是我的头脑。我明白,考虑到我的新手,我可能已经咬过的东西比我可以咬的多,但是如果有人能够真实地理解我应该如何实现这一点,那么我会非常感激。请原谅我的基本问题:)。
我希望用Java编写它,但也有python和swift的经验。
答案 0 :(得分: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 - capturing microphone)
因此,您只需要使用第二个代码,将数据读取为16位PCM大端,并将其转发到FFT函数。
答案 1 :(得分:1)
我已经使用Processing一段时间了,它有几个很好的音频库,支持FFT。默认情况下,Processing是一个java库,所以你可能想给它一个镜头(你可以在eclipse / netbeans / etc中使用它,如果默认的最小IDE不合适的话)。
你不必对这些库使用Processing,毕竟它们是java库。
Minim 的FFT类包含forward()和logAverages()
Beads 也有一个FFT class,并且有一个book available可以进行更详细的分析。
这两个库也提供对声音输入的支持。