【问题标题】:Analyzing audio to create Guitar Hero levels automatically分析音频以自动创建吉他英雄关卡
【发布时间】:2012-01-02 06:07:39
【问题描述】:

我正在尝试创建类似吉他英雄的游戏(类似于 this),我希望能够分析用户提供的音频文件并自动创建关卡,但我不知道如何这样做。

我想也许我应该使用 BPM 检测算法并在节拍上放置一个箭头,在一些循环模式上放置一个轨道,但我不知道如何实现这些。

另外,我正在使用 NAudio 的 BlockAlignReductionStream,它有一个读取 byte[] 数据的读取方法,但是当我读取 2 通道音频文件时会发生什么?它是否从第一个通道读取 1 个字节,从第二个通道读取 1 个字节? (因为它说的是 16 位 PCM),24 位和 32 位浮点数也会发生同样的情况吗?

【问题讨论】:

    标签: c# .net naudio audio-processing


    【解决方案1】:

    节拍检测(或更具体的 BPM 检测)

    使用梳状滤波器的节拍检测算法概述:

    看起来是这样的:

    您必须在此处实现许多算法。不过,梳状过滤器应该很慢。 The wiki article 没有给我指出其他具体的方法。

    编辑:本文提供了有关节拍检测的流式统计方法的信息。这听起来是个好主意:http://www.flipcode.com/misc/BeatDetectionAlgorithms.pdf - 我敢打赌它们实时运行得更好,虽然不太准确。

    顺便说一句,我只是略读并提取了关键字。我只玩过 FFT、整流和衰减滤波器(低通滤波器)。其余的我不知道,但你有链接。

    这一切都会让您获得歌曲的 BPM,但不会为您生成箭头。

    关卡生成

    至于“在节拍上放置箭头,在某些循环模式上放置导轨”,要获得良好的结果,实施起来会有点棘手。

    您可以采用更激进的内容提取方法,并尝试从歌曲中提取音符。

    您还需要对这部分使用节拍检测。这可能类似于上面的 BPM 检测,但在不同的范围内,带有用于仪器范围的带通滤波器。您还将换出或删除算法的某些部分,并且必须对整首歌曲进行采样,因为您没有检测到 global BPM。你还需要某种pitch detection

    我认为这种方法会很麻烦,并且会保证您需要为每首歌曲手动清理结果。如果您对此感到满意,并且只是想避免最初的手写工作,那么这可能会很好。

    您也可以尝试使用内容生成方法。

    大多数程序内容生成都是以试错的方式完成的,人们发布或申请专利的算法并不完全糟糕。通常无法对内容生成算法进行真正的定性分析,因为它们会产生美感。因此,您只需要选择那些似乎可以提供令人满意的样本结果并尝试一下。

    大多数算法都以视觉内容生成为中心,包括地形、建筑、人形、植物等。有一些关于音频内容生成的研究,Generative Music 等。您的要求并不完全符合其中任何一个。

    如果由您在歌曲中检测到的节奏驱动,我认为程序性“舞步”(如果存在这样的东西 - 我只发现动画技术)或生成音乐的算法将是最接近的匹配。

    如果您想采用合成生成方法,请为许多完全不同的算法做好准备,这些算法通常只是暗示,但没有详细解释。

    例如:

    【讨论】:

    • 感谢您的快速答复。虽然,我没有看到任何关于低/高通滤波器的参考 - 我了解它们是什么,但它们的目的是什么?他们有什么帮助?
    • 来自第一篇文章链接:“由于我们只是在寻找信号的节奏,因此我们需要将其减少到可以看到声音突然变化的形式。这是通过减少信号下降到它的包络,这可以看作是声音幅度的整体趋势,而不是它所携带的频率。本质上,我们对六个频带信号中的每一个信号进行低通滤波“。看起来他们对每个范围都这样做,所以我改变了答案以反映这一点。
    • 至于 NAudio 的工作方式。它应该是一个单独的问题,因为它仅与您的项目有关。答案对于其他正在尝试实现的其他算法的人很有用。另外我不知道:)
    • 现在清楚一点了。我有很多东西要学,因为我从来没有真正了解过音频,但至少现在我得到了一些阅读材料。对于循环模式,我认为神经网络和动态时间扭曲可能会有所帮助,但我没有意识到有这么多算法。 :o 谢谢,很有帮助!
    • @Symbol:Pattern Recognition 算法也有很多。神经网络的问题是你不能让它自己训练。您必须就任何结果的质量向它提供反馈。它不会从无到有创建模式检测内核 :) 如果您愿意,一种更简单的方法可能是只进行基本的节拍和节拍偏移检测,然后让朋友为您挑选歌曲,或从互联网上下载吉他谱(或键盘乐谱,或其他)。
    猜你喜欢
    • 2012-03-13
    • 2015-08-24
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多