2

我正在尝试设置允许我的用户设置 AVAudioPlayer 的 BPM,从我看到的 AVAudioPlayer 的 rate 属性应该是我想要更改的属性,如果我正在更改播放器的频率。我的问题是,如果我将其呈现为 BPM 设置,是否有一种简单的方法可以从 BPM 转换为速率?例如,0.8 速率 == 120BPM?

谢谢!

4

2 回答 2

2

您必须以正常速度知道赛道的 BPM。当你拥有它时,你可以使用

新BPM = 正常BPM x 速率

以正常速度说曲目是 120 BPM

然后在 0.5 速度下,它将是 120 x 0.5 = 60 BPM

在双倍速度(速率 = 2)下,它将是 120 x 2.0 = 240 BPM

如果您不知道正常速度下曲目的 BPM,您将需要使用节拍检测算法进行一些更深入的音频处理:

如何在php中检测歌曲的BPM

如果您想在更改音频速率时避免音调偏移,您还需要检查时间拉伸算法

使用此类算法超出了 AVAudioPlayer 的范围 - 您将需要查看较低级别的核心音频功能(音频队列/音频单元)

于 2013-08-25T22:38:17.177 回答
1

我不相信 BPM 和 AVAudioPlayer 的 rate 属性之间有任何关系。例如,相关文档指出:

此属性的默认值 1.0 提供正常播放速率。可用范围从 0.5(半速播放)到 2.0(双速播放)。

所以据我所知,这意味着你需要知道进入轨道的 BPM。(如果你知道如何做到这一点,我个人无法告诉你)然后,不管 BPM 是什么,如果速率为 1,播放将以默认 BPM 继续。如果速率为 0.5,则播放将为 BPM 的一半,如果速率为 2,则播放将为 BPM 的两倍。

于 2013-08-25T22:33:41.813 回答