用于音频混合拆分的Python模块

时间:2014-06-22 11:29:13

标签: python python-2.7 audio audio-fingerprinting pydub

我一直在寻找很长一段时间,但却没有想出任何实际有用的东西 我的想法是,我有一个音乐组合(大多数是.mp3),我正在尝试使用pyechonest来制作音轨,以识别音轨。然而,这只会识别单个曲目(如果我错了就纠正我),所以我想有另一个模块可以将混音分成它的单独音轨。

我查看了pydub进行音频分割,但仍然遇到了检测问题。

提前致谢。

编辑: 所以,我找到了一种剪切文件的方法,但现在pyechonest正在返回播客的名称,而不是自己的轨道名称,我的代码(比如说5个部分):

>>> from pyechonest import track
>>> resultlist = []
>>> path = "C:\\WinPython\\OwnScripts\\Convert"
>>> for i in range(0, 5, 1):
       #for file parts I tried 25-30 second long, 128k mp3 and wav
...    filename = path+"\\unleashed16_part"+str(i+1)+".wav"
...    resultlist.append(track.track_from_filename(filename))
>>> resultlist
[<track - 001 Digital Punk - Unleashed>, <track - 001 Digital Punk - Unleashed>, <track - 001 Digital Punk - Unleashed>, <track - 001 Digital Punk - Unleashed>, <track - Defqon.1 2013 Continuous mix by Frontliner>]

显然不是我想要的......有没有什么方法可以强迫echonest不去看播客,或者返回多种可能性或类似的东西?

1 个答案:

答案 0 :(得分:0)

如果您可以设置合理的最小歌曲长度,则可以使用CounterFlame的想法,而无需将每秒音频发送到其API。

例如,如果您知道最短的歌曲至少3分钟,您可以每2分钟发送一个30秒的大块来回声巢

 14 minutes: ("=" is 15 seconds)
|===|===|===|===|===|===|===|===|===|===|===|===|===|
 song 1 (3:00)   song 2 (5:15)     song 3 (4:30)
|============|====================|=================|
 ^^        ^^        ^^        ^^        ^^        ^^   <-- send these chunks

数学运算如下:

# everything in seconds
minimum_song_length = 3 * 60

chunk_size_to_send = 30

throw_away_between_chunks = minimum_song_length - (2 * chunk_size_to_send)

基本上你希望最短的歌曲有2个发送的块被识别,以便至少有一个不会在之前/之后与歌曲重叠