使用AVFoundation/CoreMedia /其他框架来检测节拍/开始

Bry*_*oso 12 audio cocoa avfoundation audiotoolbox core-media

(前言:这是我关于Stack Overflow的第一个与音频相关的问题,所以我会尽可能地尽力说出来.编辑欢迎.)

我正在创建一个允许用户循环播放音乐的应用程序.目前,我们的原型允许这些"循环标记"(作为UISliders实现)每秒捕捉一次,指定循环的开始和结束.显然,在循环音乐时,秒是一种非常粗暴的方式来处理这个,所以我想用beats代替.

除了为UISliders标记节拍之外,我不想做任何其他事情:

  • 为我们的loadMusic方法提供音频文件.
  • 通过库运行它来检测节拍或它们之间的间隔(可能).
  • 将该值输入滑块的setNumberOfTickMarks:方法.
  • 利润!

不幸的是,我通过Google和SO遇到的大部分结果都产生了更多高级的节拍检测库,就像混音器会使用的那样.在我的情况下矫枉过正.

这是CoreMedia,AVFoundation还是AudioToolbox可以处理的东西?如果没有,是否有其他库可以处理这个?我对Apple文档的研究只得到了相关的结果......对于MIDI文件.但Apple自己的软件具有这样的功能,例如iMovie的snap-to-beats功能.

任何指导,代码或摘要在这一点上都会非常有用.

编辑:经过多一点挖掘后,我正在寻找的正确术语似乎是起始检测.

Ada*_*ess 4

起始点检测算法有多种形式,从查看原始音乐信号到使用频域技术。

如果您想要一种快速简便的方法来确定节拍位置:

  1. 将音乐信号切成小段(20-50ms块)

  2. 计算信号的平方和平均值:(Sum(Xn ^2) / N其中N是每个样本的数量20-50ms

如果您想要更复杂的技术,请查看:

https://adamhess.github.io/Onset_Detection_Nov302011.pdf

或者对其进行硬核处理:

https://scholar.google.com/itations?view_op=view_itation&hl=en&user=PMHXcoAAAAAJ&itation_for_view=PMHXcoAAAAAJ:uJ-U7cs_P_0C