【问题标题】:Python module for audio mix splitting用于音频混合拆分的 Python 模块
【发布时间】:2014-06-22 11:29:12
【问题描述】:

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

【问题讨论】:

  • 我认为您可以将混音分成 30 秒或 1 分钟的片段(即音频[startsample:endsample]),然后在每个部分上使用 echonest 识别方法,然后删除重复的轨道 ID 返回。
  • 嗯,是的,我确实考虑过这一点,但问题是标准的 echonest API 只允许 20 次调用/分钟,我担心如果我在这些部分中削减它会出现问题。这就是为什么我认为最好先识别不同的轨道,然后剪掉部分。如果那是不可能的,我想我不得不使用你的想法是的。

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


【解决方案1】:

如果您可以设置合理的最小歌曲长度,您可以使用 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 个块被发送来识别,这样至少有一个块不会与之前/之后的歌曲重叠

【讨论】:

  • 好的,谢谢,我确实决定编写自己的 ffmpeg 包装器,因为我在加载 pydub 的音频时遇到了严重的内存问题,所以切换到命令行来剪切音频文件。现在我确实有一个问题,即 echonest 经常返回播客的名称而不是曲目名称本身,知道如何规避这个问题吗?我更新了我的帖子如何发送到 echonest。
猜你喜欢
  • 2012-02-06
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
相关资源
最近更新 更多