【问题标题】:AVAudioPlayer rate to BPM conversionAVAudioPlayer 速率到 BPM 的转换
【发布时间】:2013-08-28 08:26:34
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: ios avaudioplayer


    【解决方案1】:

    您必须知道赛道在正常速度下的 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 的范围 - 您需要查看较低级别的核心音频功能(音频队列/音频单元)

    【讨论】:

    • @0x7fffffff +1 你的评论 - 发送!
    【解决方案2】:

    我认为 BPM 和 AVAudioPlayer 的 rate 属性之间没有任何关系。例如,relevant documentation 表示:

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

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

    【讨论】:

      猜你喜欢
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 2015-09-16
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多