6

是否可以编写一个程序,将特定乐器提供的旋律/节拍/节奏提取到由多个乐器组成的波形(或其他音乐格式)文件中?

哪些算法可以用于此,哪种编程语言最适合它?

4

6 回答 6

2

这是一个迷人的领域。这里的基本数学工具是傅立叶变换。要了解它的工作原理以及它的挑战性,请查看对A Hard Day's Night开场和弦的分析

于 2009-12-09T16:35:03.307 回答
1

要提取节拍或节奏,您可能不需要完美隔离目标乐器。一个通用的解决方案可能很难,但如果你试图为一个特定的部分解决它,它可能是可能的。尝试实现一个带通滤波器,看看你是否可以调整它以选择你想要的乐器。

另外,我刚刚发现了这款名为PhotoSounder的 Mac 产品。他们有一个博客展示了它可以使用的不同方式,包括隔离单个仪器(通过手动干预)。

于 2009-12-09T16:42:31.770 回答
1

乐器会产生声音特征,就像我们的声音一样。有一些算法可以从人群中挑选出一个声音,并从用于取证的数据库中的签名中识别出该声音。以完全相同的方式,可以从音景(例如您的混合波)中挑选出单个乐器的声音特征并用于挑选节拍,或在其自己的轨道上制作该乐器的副本。

显然,如果您正在考虑制作曲目的副本,即将混合波分解为每个乐器的单个曲目,您将需要做很多工作。我的理解是,由于乐器的频率重叠,这无论如何都不会是直截了当的……尽管正如你已经被告知的那样,这并非不可能。

Comparisonics 有一篇关于声音匹配技术的非常有趣的博客文章,这可能有助于您开始寻找信息: http: //www.comparisonics.com/SearchingForSounds.html

于 2009-12-09T16:16:26.057 回答
0

原则上这是可能的,但非常困难——甚至是一个开放的研究领域。您可能对Dancing Monkeys的项目文件感兴趣,它是 StepMania 的步进生成程序。它做了一些相当复杂的节拍检测和音乐分析,这在论文中有详细介绍(链接在该页面的底部附近)。

于 2009-12-09T17:13:07.097 回答
0

查看卡拉 OK 机器算法。如果他们可以从歌曲中去除人声,我相信同样的原理可以应用于提取单个乐器。

于 2009-12-09T16:30:16.237 回答
0

大多数乐器在特定频率范围内发出声音。

如果您编写一个可调谐带通滤波器- 一个只允许特定频率范围通过的滤波器 - 它将与您可能得到的一样接近。它不会接近完美;你在问黑魔法。从音轨中完美提取单个乐器的唯一方法是在没有该乐器的情况下获取音轨的音频样本,并对两种波形进行差异处理。

C、C++、Java、C#、Python、Perl 都应该能够使用正确的库来完成所有这些工作。哪一个是“最好的”取决于你已经知道的。

于 2009-12-09T16:34:48.720 回答