随着我们上升音阶,音符频率增加;
#define A4 440 // These are the frequencies of the notes in herts
#define AS4 466
#define B4 494
#define C5 523
#define CS5 554
#define D5 587
我正在机械地产生音调,我告诉步进电机步进,延迟,步进,延迟等等。
步骤之间的延迟越长,音符越低。是否有一些智能数学我可以使用它来反转频率,以便我爬上比例数字越来越低?
通过这种方式,我可以使用频率来帮助计算生成音符的正确延迟。
答案 0 :(得分:4)
那么你所说的是你想要数字代表步骤之间的时间而不是频率?
440 Hz意味着440周/秒。你想要的是秒数/周期数(即步数之间的时间)。这只是1 / <frequency>
。这意味着您所要做的就是将您的值定义为1/440
,1/466
等(或者,如果您希望值为毫秒,1000/440
,1000/466
等。)
如果太快(或与实际音符不匹配),您可以将每个值乘以比例因子,并且可听音调之间的关系应保持不变。
例如,假设您凭经验发现机器发出“A4”音,步骤之间的延迟为10毫秒。要找出比例因子,求解x:
x / 440 = 10
x = 4400
因此,请定义scale = 4400
,并将每个笔记定义为scale / 440
,scale / 466
等。
答案 1 :(得分:2)
是的,这听起来有可能!我们来看看......(其中一些你会知道,但无论如何我都会发布)
在所谓的equal tempered scale中,您可以通过乘以每个半音的第二十二根来计算赫兹值。整个八度音程中有12个半音,乘以12倍的频率会使频率增加一倍,从而将音调提高一个八度。
所以,如果你想计算下降的半音频率,例如A 440
,您可以计算double x = pow(2.0, 1.0/12.0)
(假设为C),然后重复除以该值(请记住将double
除以int
s :))并且然后你会得到你的降序。
除此之外:如果你想做一个大音阶而不是半音(半音)音阶,这是使用音调和半音的模式:(例如在C大调中 - 使用T代表音调,S代表半音)
C [T] D [T] E [S] F [T] G [T] A [T] B [S] C