我正在尝试创建类似吉他 - 英雄的游戏(类似于this),我希望能够分析用户提供的音频文件并自动创建关卡,但我不确定怎么做。
我想也许我应该使用BPM检测算法,并在一些节拍和轨道上放置箭头,但我不知道如何实现这些。
另外,我正在使用NAudio的BlockAlignReductionStream,它有一个复制byte []数据的Read方法,但是当我读取2声道音频文件时会发生什么?它从第一个通道读取1个字节,从第二个通道读取1个字节吗? (因为它表示16位PCM)并且24位和32位浮点运行也是如此?
答案 0 :(得分:8)
节拍检测(或更具体地说是BPM检测)
使用梳状滤波器的节拍检测算法概述:
看起来他们这样做:
您需要在此处实施许多算法。但是,梳状滤波器应该很慢。 The wiki article没有指出其他具体方法。
编辑:本文提供有关节拍检测的流式统计方法的信息。这听起来是个好主意:http://www.flipcode.com/misc/BeatDetectionAlgorithms.pdf - 我打赌他们实时运行得更好,但不太准确。
顺便说一下,我只是撇去并删除了关键字。我只玩过FFT,整流和衰减滤波器(低通滤波器)。其余的我不知道,但你有链接。
这将使你获得歌曲的BPM,但它不会为你生成箭头。
级别生成
至于“在一些经常性模式上放置一个节拍和一个轨道上的箭头”,为了获得好的结果,实施起来会有点麻烦。
您可以使用更具侵略性的内容提取方法,并尝试将歌曲拉出歌曲。
您也需要对此部分使用节拍检测。这可能类似于上面的BPM检测,但在不同的范围内,使用仪器范围的带通滤波器。您还会替换或删除算法的某些部分,并且必须对整首歌曲进行采样,因为您没有检测到全局 BPM。你还需要某种pitch detection。
我认为这种方法会很混乱,并且可以保证你需要手工擦洗每首歌曲的结果。如果你对此感到满意,并且只想避免最初的手工转录工作,这可能会很好。
您还可以尝试使用内容生成方法。
大多数程序内容生成都是以反复试验的方式完成的,人们发布或申请专利的算法并不完全糟糕。通常,没有可以对内容生成算法进行真正的定性分析,因为它们会产生美学效果。因此,您只需选择一些似乎可以提供令人满意的样本结果并尝试一下的方法。
大多数算法都围绕视觉内容生成,包括地形,建筑,人形机器人,植物等。有一些关于音频内容生成的研究,Generative Music等。您的要求与这两者中的任何一个都不完全匹配。
我认为程序性“舞步”的算法(如果有这样的东西存在 - 我只发现动画技术)或生成音乐将是最接近的匹配,如果你在歌曲中检测到的节奏驱动。
如果你想了解组合生成方法,请准备好许多完全不同的算法,这些算法通常只是暗示,但没有详细解释。
E.g: