2011-09-26 105 views
1

我正在编程一个小型合成器应用程序,并通过点击一个小节的长度来输入音符。现在,音阶是对数的,我的问题是,如何将鼠标的位置转换为相关音高。目前我计算一个比率。它的工作原理虽然简单,但我可以得到各种各样紧凑的低音,而在最远端,我只需要将几个像素转换为多个八度音阶。 基本上我想要的是,如果我点击酒吧的中心(1/2),频率翻倍,而1/4是频率的另一倍。等等... 我在这里很笨!对数刻度

回答

4

音符的频率的确是对数的。当你走高一个八度时,频率加倍,而当你降低一个八度时,频率加倍。标准A正好是440Hz。

所以,你需要一个幂律将位置转换为频率。类似于f * 2.0 ^(x/w)其中w是八度音的宽度,f是比例因子,^是功率运算符。

+0

另外,还有很多其他的常用调音。有关钢琴,请参阅拉伸调音(http://en.wikipedia.org/wiki/Stretched_tuning)。另请参阅:http://en.wikipedia.org/wiki/Piano_tuning#Temperament_and_beating – Brad

+0

您是否在意详细说明实施?我在c#编程,但一般的伪语法是好的... :)感谢您的回应! – mickey

+0

八度的宽度是不是总是2的因子?上面的x会是什么? – mickey