将比例因子转换为音符移调值
Convert a scale factor into a note transposition value
我需要将比例因子(例如 0.5
或 2.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)
}
}
我需要将比例因子(例如 0.5
或 2.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)
}
}