(前言:这是我有关Stack Overflow的第一个与音频有关的问题,因此,我将尽最大可能写出最好的措辞。欢迎编辑。)
我正在创建一个允许用户循环播放音乐的应用程序。目前,我们的原型(prototype)允许这些“循环标记”(实现为UISliders)每秒捕捉一次,指定循环的开始和结束。显然,在循环播放音乐时,秒是处理此问题的一种非常粗糙的方式,因此我想使用节拍。
除了标记节拍,我不想做任何其他事情来使UISliders捕捉到:
loadMusic
方法提供一个音频文件。 setNumberOfTickMarks:
方法中。 不幸的是,我通过Google和SO遇到的大多数结果都产生了更先进的节拍检测库,例如混音器会使用的那些库。在我的情况下,矫kill过正。
这是CoreMedia,AVFoundation或AudioToolbox可以处理的吗?如果没有,还有其他库可以处理吗?我对Apple文档的研究仅产生了有关MIDI文件的相关结果。但是Apple自己的软件具有类似iMovie's snap-to-beats functionality这样的功能。
此时,任何指导,代码或摘要都将非常有用。
编辑:在进行了更多挖掘之后,似乎我寻找的正确术语是发作检测。
最佳答案
从查看原始音乐信号到使用频域技术,发作检测算法有多种形式。
如果您想要一种快速简便的方法来确定节拍在哪里:
20-50ms
块)Sum(Xn ^2) / N
(其中N
是每个20-50ms
的样本数)如果您想使用更复杂的技术,请查看:
http://bingweb.binghamton.edu/~ahess2/Onset_Detection_Nov302011.pdf
或对其进行硬性处理:
http://www.elec.qmul.ac.uk/people/juan/Documents/Bello-TSAP-2005.pdf