0

我已经搜索了很长时间,但没有找到任何真正有效的方法。
这个想法是我有一个音乐混合(主要是 .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 不查看播客,或者返回多种可能性或类似的东西?

4

1 回答 1

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 个块被发送以被识别,这样至少一个不会与之前/之后的歌曲重叠

于 2014-06-24T15:29:22.273 回答