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功能.
任何指导,代码或摘要在这一点上都会非常有用.
编辑:经过多一点挖掘后,我正在寻找的正确术语似乎是起始检测.
起始点检测算法有多种形式,从查看原始音乐信号到使用频域技术。
如果您想要一种快速简便的方法来确定节拍位置:
将音乐信号切成小段(20-50ms块)
计算信号的平方和平均值:(Sum(Xn ^2) / N其中N是每个样本的数量20-50ms)
如果您想要更复杂的技术,请查看:
https://adamhess.github.io/Onset_Detection_Nov302011.pdf
或者对其进行硬核处理: