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

0 投票
1 回答
929 浏览
提问于 2025-04-18 10:40

我找了很久,但一直没找到能真正解决问题的方法。
我的想法是,我有一个音乐混音(大多数是.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个音频片段来进行识别,这样至少有一个片段不会和前一首或后一首歌曲重叠。

撰写回答