我有一首标准的泰国舞曲,里面有很多乐器和歌词。我必须将其转换为只有 cymbal rythm 的 wav 。我只知道我必须使用python。这个怎么做?谢谢你。
2 回答
铙钹节奏可能主要在该特定混音的高频中。我以前从未听过这首歌,所以我不知道它是否会与那个特定的乐器相比有任何明显的低频内容。然而,凭直觉,这是我最好的猜测......
您将需要滤除没有任何镲片部分声音内容的较低频率,例如低音鼓或人声(通常是中音重的乐器)。如果你看一下频谱分析仪,典型的钹的频率会在幅度上缓慢上升,从 500Hz 到 5KHz,幅度大约在 5k-15k 之间保持水平,直到在 15-20k 之后才开始倾斜(在这种情况下)高音在原始音轨中被过滤掉了)。过滤掉任何低于 500Hz(或者可能稍高的频率)的东西。如果您想要更精确的过滤,您可能想为自己找到一个包络跟随器,它将在钹击中过滤更多的声音内容。您过滤的越多,您可能听到的其他乐器就越少。
您将需要一个高通滤波器来完成这项工作。您可以自己用 Python 编写一个,但从以下网址移植 DSP 算法会更容易:musicdsp.org
或使用来自:code.google.com/p/pyo/ 的 Python DSP 库。
在音乐 DSP 网站上,我想您也可以找到一个不错的包络跟踪算法。
Python 有一个很棒的库,可以在这里读写 wav:http: //docs.python.org/2/library/wave.html
此外,如果您需要实时测试您的过滤作业,请考虑使用 PyAudio:http ://people.csail.mit.edu/hubert/pyaudio/
这个过程不会没有扭结,因为过滤器可能不会过滤掉除了钹之外的所有东西。由于混合音频是永久混合的,因此几乎不可能将混合中的各个部分和乐器分开。唯一能做到这一点的就是 Melodyne。
第一个想法是实现一个带通滤波器,该滤波器将切断其他乐器主要位于的低频和中频(http://en.wikipedia.org/wiki/Band-pass_filter)。你可以自己做:
- fft 你 wav 文件并获取频谱
- 选择您要保留的频段
- 将其他所有内容归零(或应用窗口 - 高斯、超高斯等)
- 将所有内容转换回来(做逆 fft)
- 听结果,如果需要改变频段
您还可以使用 scipy 库 - google 来了解其信号处理功能。
希望这可以帮助。试试看,如果有的话,发布更详细的问题。