是否有可能编写一个程序,可以提取由多个乐器组成的波形(或其他音乐格式)文件中特定乐器提供的旋律/节拍/节奏?
哪种算法可用于此以及哪种编程语言最适合它?
答案 0 :(得分:2)
这是一个迷人的地方。这里的基本数学工具是Fourier Transform。要了解其工作原理以及挑战程度,请查看analysis至opening chord的A Hard Day's Night。
答案 1 :(得分:1)
乐器产生声音特征,就像我们的声音一样。有些算法可以从人群中挑选出一个语音,并在用于取证的数据库中从其签名中识别出该语音。以完全相同的方式,可以从音景(例如您的混合波)中选取单个乐器的声音特征,并用于挑选节拍,或者在自己的轨道上制作该乐器的副本。
显然,如果你正在考虑制作曲目的副本,即将混合波分解为每个乐器的单个音轨,你将会看到很多工作。我的理解是,由于乐器的频率重叠,这无论如何都不是直截了当的......虽然你已经被告知,但并非不可能。
比较会上有一篇非常有趣的博客文章,内容涉及声音匹配技术,可能有助于您寻求信息:http://www.comparisonics.com/SearchingForSounds.html
答案 2 :(得分:1)
要提取节拍或节奏,您可能不需要完全隔离您所定位的乐器。一般的解决方案可能很难,但如果你试图为特定的部分解决它,它可能是可能的。尝试实现一个带通滤波器,看看你是否可以调整它来选择你想要的仪器。
另外,我刚发现这款名为PhotoSounder的Mac产品。他们有一个博客,展示了可以使用的不同方式,包括isolating an individual instrument(手动干预)。
答案 3 :(得分:0)
了解卡拉OK机器算法。如果他们可以从歌曲中删除声音,我确信可以应用相同的原则来提取单个乐器。
答案 4 :(得分:0)
大多数乐器在特定频率范围内发出声音。
如果您编写一个可调带通滤波器 - 一个只允许某个频率范围通过的滤波器 - 它将尽可能接近您的距离。它不会是完美的;你在寻求黑魔法。从轨道中完美提取单个乐器的唯一方法是在没有该乐器的情况下获得轨道的音频样本,并对两个波形进行区分。
C,C ++,Java,C#,Python,Perl都应该能够使用正确的库来完成所有这些工作。哪一个是“最好的”取决于你已经知道的。
答案 5 :(得分:0)
原则上可能,但非常困难 - 甚至是一个开放的研究领域。您可能对Dancing Monkeys的项目文件感兴趣,这是StepMania的步骤生成计划。它做了一些相当复杂的节拍检测和音乐分析,详见论文(链接在该页面的底部附近)。