随着音阶的增加,音符频率会增加。
#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
我正在机械地产生音调,我告诉步进电机非常快地步进,延迟,步进,延迟等。
步骤之间的延迟时间越长,音符越低。是否有一些聪明的数学运算可用来反转频率,所以当我攀升音阶时,数字越来越小?
这样,我可以使用频率来帮助计算正确的延迟以生成音符。
最佳答案
那么,您要说的是要数字代表步距之间的时间,而不是频率吗?
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
等。关于c - 倒数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7855445/