将比例因子转换为音符移调值

Convert a scale factor into a note transposition value

我需要将比例因子(例如 0.52.0)转换为音符换位值。以下是一些示例:

0.5 - 原始音高的一半,因此函数应该 return -12(向下一个八度)。

1.0 - 音高不变,所以函数应该return 0.

2.0 - 原来的音高加倍,所以函数应该 return 12(提高一个八度)。

4.0 - 将原始音高翻四倍,因此函数应该 return 24(向上两个八度)。

使用什么编程语言并不重要,因为这更像是一道数学题,但我目前正在使用 Javascript。输入数字是浮点数,输出应该是四舍五入到最接近整数的整数(因为你不能有部分音符)。

其实我想我已经解决了这个问题。关键是要处理三种情况,一种是 scaleFactor === 1,另一种是 scaleFactor < 1,最后一种是 scaleFactor > 1.

const noteFactor = (scaleFactor) => {
  if (scaleFactor === 1) return 0
  if (scaleFactor < 1) {
    return Math.round(-1 * ((1 / scaleFactor) * 6))
  } else {
    return Math.round(scaleFactor * 6)
  }
}