You need to enable JavaScript to run this app. 将scale factor转换为note transposition音符移调值的计算方法
优惠活动
大模型
产品
解决方案
定价
更多

将scale factor转换为note transposition音符移调值的计算方法

缩放系数转音符移调值(Javascript实现)

核心逻辑

音符频率与半音移调的对应关系为:每升高12个半音(1个八度),频率变为原有的2倍,因此通过对数计算即可完成转换:
移调值 = 12 * 以2为底的缩放系数对数,计算后四舍五入取整即可得到无半音误差的结果。

转换示例验证

  • 输入0.5:12 * log₂(0.5) = -12(降低1个八度),符合预期
  • 输入1.0:12 * log₂(1) = 0(音高无变化),符合预期
  • 输入2.0:12 * log₂(2) = 12(升高1个八度),符合预期
  • 输入4.0:12 * log₂(4) = 24(升高2个八度),符合预期

实现代码

基础版本(ES6及以上环境)

function scaleToTransposition(scaleFactor) {
    if (scaleFactor <= 0) {
        throw new Error('缩放系数必须为大于0的数值');
    }
    return Math.round(12 * Math.log2(scaleFactor));
}

兼容旧环境版本

function scaleToTransposition(scaleFactor) {
    if (scaleFactor <= 0) {
        throw new Error('缩放系数必须为大于0的数值');
    }
    return Math.round(12 * (Math.log(scaleFactor) / Math.log(2)));
}

测试用例

console.log(scaleToTransposition(0.5)); // 输出 -12
console.log(scaleToTransposition(1)); // 输出 0
console.log(scaleToTransposition(2)); // 输出 12
console.log(scaleToTransposition(4)); // 输出 24

内容的提问来源于stack exchange,提问作者user11762396

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 15:09:01