Python方法来减少;“休息”;或者在应该持续的过程中暂停,特别是音频?

Python方法来减少;“休息”;或者在应该持续的过程中暂停,特别是音频?,python,librosa,Python,Librosa,我正在尝试在播放歌曲时编辑歌曲。到目前为止,我已经成功地创建了一个几乎满足我需求的流程。我将分享它是如何工作的,以及把我带到这里寻求建议的问题 我以数组y和采样率sr的形式接收一首歌曲。然后,一个数据提要每5秒提供一次新的ping(以下表示为arguments=[])。在播放期间,我使用该ping编辑我的歌曲。然后,每5秒重复一次 import librosa as lr y, sr = lr.load(song) arguments=[] # Populated from external s

我正在尝试在播放歌曲时编辑歌曲。到目前为止,我已经成功地创建了一个几乎满足我需求的流程。我将分享它是如何工作的,以及把我带到这里寻求建议的问题

我以数组y和采样率sr的形式接收一首歌曲。然后,一个数据提要每5秒提供一次新的ping(以下表示为arguments=[])。在播放期间,我使用该ping编辑我的歌曲。然后,每5秒重复一次

import librosa as lr
y, sr = lr.load(song)
arguments=[] # Populated from external source.
for arg in arguments:
    end += some_interval
    if end > y.size: ... # breaks out of the loop if the song is over.
    x, sr = song_edit(y[front:end],sr, arg)
    sd.play(x, sr, blocking=True)
    front=end
问题:

  • 在一段5s的音乐剪辑和下一段5s的音乐剪辑结束时,会出现轻微的延迟。在音乐中,这从根本上是有问题的
我考虑过的解决方案:

  • 由于在sd.play中blocking=True,因此在播放整个剪辑时代码将停止。因此,延迟必须是可解的
  • 我考虑过线程或多处理。这是最好的方法吗?我的理解是线程将不起作用,因为我的论点不是预先确定的
  • 我错过了什么
编辑: 我测试了这个:

#x, sr = song_edit(y[front:end],sr, arg)
sd.play(y[front:end], sr, blocking=True)
延迟仍然存在!因此,延迟必须由循环的迭代或sd.play中的固有延迟引起