【发布时间】:2023-03-11 04:19:02
【问题描述】:
我想做精确的吉他调音器,这通常由许多人通过计算 FFT 并获得峰值来完成。但由于以下几个原因,这并不适用:
- 精度不高,无法为低音吉他调音提供足够的分辨率。
- 在尝试增加缓冲区大小(和/或采样率)时,计算时间和复杂性很高。引入了可见的延迟(滞后)。
- 集中所有 FFT 精度的大部分频率范围都未使用。 1-2 khz 以上的一切都不适用于乐器调音。
对于具有单频正弦形状的信号应该有更简单的方法。给定足够小的缓冲区(比如 256 个采样率 96khz 的样本) - 你如何测量基本(低)频率?
简而言之:如何找到频率F,以便“频率F的正弦信号”和“实际记录的信号”的差异将给出最小误差,除了F 之外的任何频率? (因此我们可以明确得出结论,频率F 的正弦曲线是录制声音缓冲区的最佳近似值)。
PS。任何东西,但不使用 FFT!
【问题讨论】:
-
这可能会让你深思 mlesniak.com/post/2018/09/13/go-guitar-/-visualize-sound ... 与我的吉他笔记有点切线 Show HN: Guitar Dashboard - 吉他手的开源音乐理论探索器 - news.ycombinator.com/item?id=17987657 源文章在guitardashboard.com
-
@ScottStensland 这个简单的 SDL 示例只是渲染波形(在时域中),这是没有用的,因为今天人们正在使用更高级别的库来绘制图表\图形(带有自动缩放/堆叠/.. . 功能等等),而不是自己写那些基础知识——它以前被写过百万次。那只是一个题外话,但我提到“它没用”,主要是因为我不想画它!不在时域,也不在频域))我想找到当前播放的音符的一些基频
F,在低频下具有良好的分辨率。 -
吉他音符波形不具有正弦形状,通常甚至不接近。因此,纯 FFT 峰值不是可行的方法。
-
@hotpaw2 整个音符波形不是正弦曲线,但我们不需要它的“整体性”:我们最好放弃 attack、release 和其他泛音,如弹拨声。最值得注意的是——大部分音符能量都集中在sustain上。它几乎是纯正弦(共振)的东西:弦以单一频率共振,这完全取决于它的张力和长度。
-
请注意,任何音符的 256 个样本(在 96k 处)超过 Concert-A 的 3 分之二小于一个完整周期,这低于任何 DFT 或 Goertzel 类方法的第 1 个 bin。所以你需要一个 256 个不完整周期的估计器。
标签: audio fft frequency audio-processing tuner