在应该连续的进程中减少“中断”或暂停的Python方法,特别是音频?

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

我将一首歌曲作为数组 y 和采样率 sr。然后,每 5 秒提供一次新 ping 的数据馈送(在下面表示为参数 = [])。我播放过程中使用该 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

问题:

  • 在一个 5 秒的音乐剪辑和下一个剪辑结束时会出现轻微的延迟。在音乐中,这从根本上是有问题的。

我考虑过的解决方案:

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

编辑:
我测试了这个:

#x, sr = song_edit(y[front:end],sr, arg)
sd.play(y[front:end], sr, blocking=True)

延迟还在!因此,延迟一定是循环的迭代或sd.play中固有的延迟造成的。

以上是在应该连续的进程中减少“中断”或暂停的Python方法,特别是音频?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>