用于音频混合分离的Python模块
我找了很久,但一直没找到能真正解决问题的方法。
我的想法是,我有一个音乐混音(大多数是.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
如果你能设定一个合理的最小歌曲时长,就可以使用CounterFlame的想法,而不需要把每一秒的音频都发送到他们的API。
比如说,如果你知道最短的歌曲至少是3分钟长,你可以每2分钟发送一个30秒的音频片段到echo nest。
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个音频片段来进行识别,这样至少有一个片段不会和前一首或后一首歌曲重叠。