Python实现歌曲BPM匹配:计算与目标BPM兼容的最近数值的方法
BPM兼容匹配计算逻辑及Python实现
核心原理
兼容BPM的定义为:目标BPM乘以2的整数次幂得到的所有数值(可理解为目标BPM的倍速/半速兼容值,节拍完全对齐),我们只需要在这些值中找到和原BPM最接近的数值即可。
计算步骤
- 计算原BPM与目标BPM的比值:
ratio = 原BPM / 目标BPM - 对该比值取以2为底的对数,四舍五入得到整数指数
n:n = round(log2(ratio)) - 最终匹配的兼容BPM为:
匹配BPM = 目标BPM * (2 ** n)
示例验证
- 原BPM=150,目标BPM=84:
ratio = 150/84 ≈1.7857,log2(1.7857)≈0.847,四舍五入得n=1,匹配BPM=84*2^1=168,符合示例结果。 - 原BPM=84,目标BPM=150:
ratio =84/150=0.56,log2(0.56)≈-0.83,四舍五入得n=-1,匹配BPM=150*2^-1=75,符合示例结果。
Python实现代码
import math def get_compatible_bpm(original_bpm: float, target_bpm: float) -> float: ratio = original_bpm / target_bpm n = round(math.log2(ratio)) return target_bpm * (2 ** n) # 测试用例 if __name__ == "__main__": # 示例1 print(get_compatible_bpm(150, 84)) # 输出168.0 # 示例2 print(get_compatible_bpm(84, 150)) # 输出75.0
内容的提问来源于stack exchange,提问作者pigeonburger
相关产品推荐
相关产品推荐

