AVAudioPlayer速率到BPM转换

时间:2013-08-25 21:53:38

标签: ios avaudioplayer

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

谢谢!

2 个答案:

答案 0 :(得分:2)

您必须以正常速度知道赛道的BPM。如果有,可以使用

进行转换

newBPM = normalBPM x rate

以正常速度说赛道是12​​0 BPM

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

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

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

How to detect the BPM of a song in php

如果您想在更改音频时避免音高变换,您还需要查看time stretching algorithms

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

答案 1 :(得分:1)

我不相信BPM和AVAudioPlayer的rate属性之间存在任何关系。例如,relevant documentation表示:

  

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

据我所知,这意味着你需要知道赛道的BPM。(如果你知道如何让这个很好,我个人不能告诉你)那么,不管是什么如果速率为1,则BPM将在默认BPM处继续播放。如果rate是.5则播放将是BPM的一半,如果rate是2,则播放将是双BPM。