0

我是 portaudio 的新手,我查看了“如何提取频率……”的问题,但我仍然希望得到一些帮助。我需要传输一个频率(使用扬声器),然后我想检查这个频率是否被传输(在麦克风中捕捉它),当然我想使用 portaudio 进行发送和检测。另外,我不知道如何使用 fft 进行检测,因为我看到了记录示例,他们使用 SAMPLE 数据类型,并且使用这种数据类型,他们可以找到最大幅度,我可以用它来查找频率吗?

tnx 提前。

4

1 回答 1

1

PortAudio中的示例代码给出了播放简单的音调。

虽然那里的音高不是从一个特定的数字计算出来的,但很容易算出来:

amplitude[n] = sin( n * desiredFreq * 2 * pi / samplerate )

就像在 PortAudio 示例代码中一样,您可能需要考虑使用查找表而不是每次调用都依赖 sin() 来提高性能(以及大量 sin 的准确性,这可能很好,但我不确定关于)。

检测播放的频率是 SO 上已提出的问题。是我最近给出的一个答案。

结果是有很多方法取决于你的技能水平,以及背景噪音等问题。如果您只是检测一个简单的 sin wav 并且不希望有很多噪声,那么在确保信号高于某个阈值之后,您最好只计算零交叉。如果你确实期待噪音,你将不得不变得更漂亮。

于 2012-07-13T15:26:54.370 回答