如何使用 A440 (MIDI) 获取音符的频率
How to Get Frequency of a note using A440 (MIDI)
我正在尝试编写一种方法 returns 使用 A440
键盘上的音符频率
基本上我需要将 here 看到的等式转换为 c#
以下是我的解释,但是我得到了错误的输出,我对这个等式的解释有什么问题吗?
public static float GetFrequency(int keyIndex)
{
/// The following equation gives the frequency (f) of the nth key
/// f(n) = (2 * (n - 49 / 12)) * 440 Hz
return (2 * ((keyIndex - 49) / 12)) * 440;
}
求幂不是乘法,需要使用浮点值来避免整数舍入:
return Math.Pow(2, (keyIndex - 49) / 12.0) * 440;
我碰巧看到这个旧的 question/answer 并注意到 49 与 MIDI 相关的使用,所以尽管这是旧的,但我认为它值得注意 ;) 添加一个额外的答案。
频率 440 Hz (A4) 对应于 MIDI 音符编号 69。因此,尽管计算是正确的,并且可以用于任何参考标准(不仅仅是 MIDI),但 MIDI 的参考音符应该是 69。数字49 用于钢琴键(在 OP 链接的维基页面中有更多信息)。
System.Math.Pow(2, (noteNumber - referenceNoteNumber) / 12.0) * referenceFrequency
这是一个 wiki 参考:Frequencies, MIDI note numbers, etc.
我正在尝试编写一种方法 returns 使用 A440
键盘上的音符频率基本上我需要将 here 看到的等式转换为 c#
以下是我的解释,但是我得到了错误的输出,我对这个等式的解释有什么问题吗?
public static float GetFrequency(int keyIndex)
{
/// The following equation gives the frequency (f) of the nth key
/// f(n) = (2 * (n - 49 / 12)) * 440 Hz
return (2 * ((keyIndex - 49) / 12)) * 440;
}
求幂不是乘法,需要使用浮点值来避免整数舍入:
return Math.Pow(2, (keyIndex - 49) / 12.0) * 440;
我碰巧看到这个旧的 question/answer 并注意到 49 与 MIDI 相关的使用,所以尽管这是旧的,但我认为它值得注意 ;) 添加一个额外的答案。
频率 440 Hz (A4) 对应于 MIDI 音符编号 69。因此,尽管计算是正确的,并且可以用于任何参考标准(不仅仅是 MIDI),但 MIDI 的参考音符应该是 69。数字49 用于钢琴键(在 OP 链接的维基页面中有更多信息)。
System.Math.Pow(2, (noteNumber - referenceNoteNumber) / 12.0) * referenceFrequency
这是一个 wiki 参考:Frequencies, MIDI note numbers, etc.