我正在编写一个程序来通过网络流式传输音频,所以我有一个线程来记录数据和一个发送数据。测试音频时有明显的差距。我相信这是由于 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.
这一定有不同的原因。这应该有效,对我来说效果很好。 您能否更详细地描述问题?是否有消息打印到终端?
关于python - 使用 Sounddevice 连续播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54560927/