【发布时间】:2013-08-28 08:26:34
【问题描述】:
我正在尝试设置允许我的用户设置 AVAudioPlayer 的 BPM,据我所知,如果我要更改播放器的频率,AVAudioPlayer 的 rate 属性应该是我想要更改的属性。我的问题是,如果我将其呈现为 BPM 设置,是否有一种简单的方法可以从 BPM 转换为速率?例如,0.8 速率 == 120BPM?
谢谢!
【问题讨论】:
标签: ios avaudioplayer
我正在尝试设置允许我的用户设置 AVAudioPlayer 的 BPM,据我所知,如果我要更改播放器的频率,AVAudioPlayer 的 rate 属性应该是我想要更改的属性。我的问题是,如果我将其呈现为 BPM 设置,是否有一种简单的方法可以从 BPM 转换为速率?例如,0.8 速率 == 120BPM?
谢谢!
【问题讨论】:
标签: ios avaudioplayer
您必须知道赛道在正常速度下的 BPM。当你拥有它时,你可以使用转换
新BPM = 正常BPM x 速率
假设在正常速度下赛道是 120 BPM
然后在 0.5 速度下,它将是 120 x 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 的范围 - 您需要查看较低级别的核心音频功能(音频队列/音频单元)
【讨论】:
我认为 BPM 和 AVAudioPlayer 的 rate 属性之间没有任何关系。例如,relevant documentation 表示:
此属性的默认值 1.0 提供正常播放速率。 可用范围从 0.5(半速播放)到 2.0 用于双倍速播放。
据我所知,这意味着您需要知道进入曲目的 BPM。(如果您知道如何做到这一点,我个人无法告诉您)然后,不管什么BPM 是,如果速率为 1,播放将以默认 BPM 继续。如果速率为 0.5,则播放将为 BPM 的一半,如果速率为 2,则播放将为 BPM 的两倍。
【讨论】: