我正在尝试设置允许我的用户设置 AVAudioPlayer 的 BPM,从我看到的 AVAudioPlayer 的 rate 属性应该是我想要更改的属性,如果我正在更改播放器的频率。我的问题是,如果我将其呈现为 BPM 设置,是否有一种简单的方法可以从 BPM 转换为速率?例如,0.8 速率 == 120BPM?
谢谢!
我正在尝试设置允许我的用户设置 AVAudioPlayer 的 BPM,从我看到的 AVAudioPlayer 的 rate 属性应该是我想要更改的属性,如果我正在更改播放器的频率。我的问题是,如果我将其呈现为 BPM 设置,是否有一种简单的方法可以从 BPM 转换为速率?例如,0.8 速率 == 120BPM?
谢谢!
您必须以正常速度知道赛道的 BPM。当你拥有它时,你可以使用
新BPM = 正常BPM x 速率
以正常速度说曲目是 120 BPM
然后在 0.5 速度下,它将是 120 x 0.5 = 60 BPM
在双倍速度(速率 = 2)下,它将是 120 x 2.0 = 240 BPM
如果您不知道正常速度下曲目的 BPM,您将需要使用节拍检测算法进行一些更深入的音频处理:
如果您想在更改音频速率时避免音调偏移,您还需要检查时间拉伸算法
使用此类算法超出了 AVAudioPlayer 的范围 - 您将需要查看较低级别的核心音频功能(音频队列/音频单元)
我不相信 BPM 和 AVAudioPlayer 的 rate 属性之间有任何关系。例如,相关文档指出:
此属性的默认值 1.0 提供正常播放速率。可用范围从 0.5(半速播放)到 2.0(双速播放)。
所以据我所知,这意味着你需要知道进入轨道的 BPM。(如果你知道如何做到这一点,我个人无法告诉你)然后,不管 BPM 是什么,如果速率为 1,播放将以默认 BPM 继续。如果速率为 0.5,则播放将为 BPM 的一半,如果速率为 2,则播放将为 BPM 的两倍。