我最近开始尝试创建一个移动应用程序(iOS/Android),该应用程序将自动击败匹配(http://en.wikipedia.org/wiki/Beatmatching)两首歌曲。
我知道这确实存在,并且还有其他一些人取得了一些成功,但是我遇到了与球员准确性有关的问题。
具体来说,我遇到了“同步”问题,其中“拍子”没有对齐。迄今为止使用的各种方法是:
什么不起作用:
今天谁在使用此算法:
有人对如何解决这个问题有任何建议吗?我已经看到很多人这样做,但是在移动设备上实时进行似乎是一个问题。
最佳答案
有很多方法可以解决此问题,其中一些方法比其他方法效果更好。 Matthew Davies发表了有关此事的几篇论文,其中包括许多其他论文。浏览this article似乎可以分解执行此操作所需的一些步骤。我和一个同学在Matlab上制作了一个节拍跟踪器(不幸的是...),我们的目标是在两首歌曲之间创建外奏/前奏,以使它们之间的节奏保持无缝。我们希望对BPM稍有变化(两者之间的BPM约为+ -7)的歌曲执行此操作。我们的方法有点像这样:
这听起来似乎很奇怪,但实际上听起来还不错。尽管这是完全在Matlab中离线完成的,但我也在寻找一种在移动应用程序中实时进行此操作的方法。不能完全确定您可以在Android世界中使用的库,但我认为它在C++中将是最有效的。
我遇到的几个库对于原型(prototype)设计或至少研究源代码以更好地了解您如何在移动应用中做到这一点非常有用:
Essentia(伟大的社区,开源)
Aubio(开源也似乎维护得很好)
在iOS环境中进行此类操作需要阅读的其他事项:
vDSP Programming guide
This article may also help
我遇到了正在执行节拍检测的this project。不幸的是,尽管它似乎已经过时了,但它可能会提供一些其他的见解。
不幸的是,除非您假设它们具有非常具体的方面(准确的节奏等),否则它不只是同时“按动演奏”来对齐节拍一样简单。
如果您真的有时间,请查看Tristan Jehan's (founder of Echonest) thesis;它挤满了用于节拍检测的算法和方法等。
关于java - 节拍匹配算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20850575/