随着音阶的增加,音符频率会增加。

    #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/4401/466等(或者,如果您希望将值设置为毫秒,则将1000/4401000/466等定义为毫秒)。

如果速度太快(或与实际音符不匹配),则可以将每个值乘以比例因子,并且可听音之间的关系应保持不变。

例如,假设您凭经验发现要使您的机器发出“A4”音,步骤之间的延迟为10毫秒。要计算比例因子,请求解x:

x / 440 = 10
x = 4400

因此,定义scale = 4400,并将每个注释定义为scale / 440scale / 466等。

关于c - 倒数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7855445/

10-13 21:57