Java 基于频率的计算注释

Java 基于频率的计算注释,java,audio,audio-processing,Java,Audio,Audio Processing,我在安卓系统上创建了一个调谐器,我从设备的麦克风获取音频,并对其进行处理以获得频率。然而,一旦我开始转换音符上的频率,我想知道是否有一种方法可以不用使用一堆“如果”,是否有一种计算方法可以更有效地实现这一点?是的,这是可以做到的。然而,首先你必须知道工作的关键。假设是普通的C大调,你会以音符a1为440Hz开始。每上升一个倍频程会使频率加倍,每下降一个倍频程会使频率减半,所以你得到了一个很好的对数刻度,以2为底 在对数范围内,乘法变成加法。所以,如果你记下音符的间隔,关于a,所有八度音阶的频率比

我在安卓系统上创建了一个调谐器,我从设备的麦克风获取音频,并对其进行处理以获得频率。然而,一旦我开始转换音符上的频率,我想知道是否有一种方法可以不用使用一堆“如果”,是否有一种计算方法可以更有效地实现这一点?

是的,这是可以做到的。然而,首先你必须知道工作的关键。假设是普通的C大调,你会以音符a1为440Hz开始。每上升一个倍频程会使频率加倍,每下降一个倍频程会使频率减半,所以你得到了一个很好的对数刻度,以2为底


在对数范围内,乘法变成加法。所以,如果你记下音符的间隔,关于a,所有八度音阶的频率比都保持不变。所以你所要做的就是找出你所处的八度,减去或加上这个数字,剩下的就是频率间隔的对数。找到八度音阶也很简单,只需评估一下地板(log2(f/440Hz))。

音阶是对数的(以2为底):八度音阶的增加使基频加倍,八度音阶的减少使基频减半

在西欧音乐传统中,假设我们把八度音分成半音。半音的频率形成一个几何序列,其比率为
~1.06
(更准确地说,它是2或
pow(2,1/12)
)的第12根。每个半音可以进一步划分为美分,精确地得到每倍频程
1200

当前的音乐实践是将A4(中间C以上的A)精确地
440Hz


如果你不能从第一原理算出数学,它会被记录下来。

我做了更多的研究,并开始研究MIDI音符编号系统。这个计算可以用来找到MIDI音符编号:n=69+12 log2(f/440)你是对的,谢谢。