2011-04-25 127 views
3

我正在尝试编写音频应用程序。将频率转换为键盘音符

我可以从20到20K的频率播放一个cin波来听到声音。我的问题是如何将频率转换为键盘音符以创建虚拟键盘(或钢琴)?有没有什么公式可以达到这个目的?

我使用的编程语言并不重要,因为我不想使用其他工具来为我计算它。我想自己写,所以我需要了解它背后的数学。感谢

更新

我发现下面的网址:http://www.reverse-engineering.info/Audio/bwl_eq_info.pdf

包含八度prequency图。我是否需要存储该列表或者是否存在可以用来替代的公式?

回答

5

有几种不同的方式来调整乐器。钢琴最常用的是12音相等的气质,其公式可以找到here。这个想法是,每一对相邻的音符具有相同的频率比率。请参阅equal temperament on Wikipedia

+0

+1表示平等气质不是“唯一”系统。 – 2011-04-25 14:13:42

+0

如果你这样做是一个音乐环境,你肯定会需要使用GLUT(普通查找表)来抵制平缓的音阶,否则它会在各种不同的音调中失调。 – 2011-04-25 14:15:14

+0

@J_Y_C:你指的是狼间隔吗?这似乎影响了一个人的气质,而不是十二音的平等气质。 – 2011-04-25 14:20:32

5

可以计算一个音的频率为

F = 440 * EXP(X * LN(2)/ 12)

其中x是半音的数目上方的钢琴键盘的中间。

+1

f = 440 *(2 **(x/12)) – jms 2017-02-11 21:32:50

2

首先,您需要知道约A440。这是调整其他方面的“标准”音调。

双倍提高倍频程的频率;将频率减半以降低一个八度音阶。从这里可以明显看出,相对于频率,音调是对数的。

有多种系统可以决定剩下的笔记在对数线上的位置。一个简单的方法是divide the semitones geometrically along the logarithmic scale(这是xofon的答案使用的方法),但可能有更好的方法。