歌声与音乐的分离

时间:2009-02-02 07:52:26

标签: matlab fft

我想知道如何对声乐和声音的分类进行“频谱变化检测”。歌曲的非声乐片段。我们需要从谱图中找到光谱变化。有关这方面的任何详细信息,特别是涉及MATLAB?

5 个答案:

答案 0 :(得分:4)

从音频中分离出不同的信号是一个非常活跃的研究领域,这是一个非常棘手的问题。这通常在文献中称为Blind Signal Separation。 (上一个链接中有一些MATLAB演示代码。

当然,如果你知道音乐中有人声,你可以使用众多vocal separation算法中的一种。

答案 1 :(得分:2)

正如其他人所指出的那样,仅使用原始频谱分析解决这个问题是一个令人生畏的难题,而且你不太可能找到一个好的解决方案。最好的情况是,您可以从混音中提取一些人声和一些额外的交叉频率。

但是,如果您可以更加具体地了解您在此处使用的音频材料的性质,那么您可能会更进一步。

在最糟糕的情况下,你的素材将是常规歌曲的正常mp3 - 即一个完整的乐队+歌手。考虑到你问题的性质,我觉得你可能正在考虑这种情况。

在最好的情况下,您可以访问多轨录音棚录音并至少有完整的混音和乐器音轨,在这种情况下,您可以从混音中提取人声频率。您可以通过从其中一个轨道生成脉冲响应并将其应用到另一个轨道来实现此目的。

在中间的情况下,你正在处理简单的音乐,你可以应用一些调整到音乐参数的算法。例如,如果您正在处理电子音乐,您可以利用轨道的立体声宽度来消除所有单声道元素(即,贝司线+踢腿)以提取人声+其他平移乐器,然后应用某种类型的过滤和频谱分析。

简而言之,如果你打算制作一个通用算法来从任意源材料中生成干净的acapella切割,你可能会咬得比你在这里咀嚼的更多。如果您可以专门限制源材料,那么根据这些来源的性质,您可以使用多种算法。

答案 2 :(得分:1)

这很难。如果你能够可靠地做到这一点,你将成为一名有成就的计算机科我读到的最有前途的方法是使用歌词生成仅用于语音的音轨以进行比较。再说一次,如果你能做到这一点并撰写一篇关于它的论文,你就会出名(在计算机科学家中间)。另外,你可以通过自动生成卡拉OK的时间来赚很多钱。

答案 3 :(得分:0)

如果你只想决定一块音乐是干净的a-capella还是乐器背景,你可以通过比较信号的带宽和正常的人类歌手带宽来做到这一点。此外,您可以检查基本频率,它只能在非常有限的人类语音频率范围内。

尽管如此,这可能并不容易。然而,助听器一直这样做,所以它显然是可行的。 (虽然他们通常会搜索演讲,而不是唱歌)

答案 4 :(得分:-1)

首先将乐器与原件同步,确保它们具有相同的长度和比特率,并在确切的时间开始和结束并将它们转换为.wav

然后执行类似

的操作
I = wavread(instrumental.wav);
N = wavread(normal.wav);
i = inv(I);
A = (N - i); // it could be A = (N * i) or A = (N + i) you'll have to play around
wavwrite(A, acapella.wav)

应该这样做..一个小的线性代数有很长的路要走。