使用 Sounddevice 连续播放音频

Continuous Audio Playback with Sounddevice

我正在编写一个程序来通过网络流式传输音频,所以我有一个线程来记录数据和一个发送数据。测试音频时有明显的差距。我相信这是由于 sounddevice.play() 函数造成的,下面的示例也有同样的问题。

import sounddevice as sd

len = 5
fs = 44100
sd.default.device = [2,1]

myrec=sd.rec(int(fs*len), samplerate=fs, channels=2, blocking=True) #fill an array with some sound
while True:
    sd.play(myrec, blocking=True)
    #loop plays 5 second audio clip with slight gaps

间隙与播放长度一致,所以它似乎是由播放功能延迟引起的。在连续的音频中,这变得非常明显和烦人。同样的事情也发生在文档音频直通示例 here.

有什么可以让播放连续的吗?

函数sd.play()不适合快速连续重复使用。在内部,它每次创建一个 sd.OutputStream,播放音频数据并再次关闭流。 因为打开和关闭流,会出现间隙。这是预期的。

要连续播放,您应该使用 sd.OutputStream.write() 函数,或者更好的是,使用带有自定义回调函数的 sd.OutputStream(如某些示例程序所示)。

The same thing also happens in the documentation audio passthrough example here.

这一定有不同的原因。这应该有效,对我来说效果很好。 您能否更详细地描述问题?是否有任何消息打印到终端?