我正在编写一个程序来通过网络传输音频,因此我有一个线程来记录数据并发送一个线程。测试音频时有明显的差距。我相信这是由于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中也会发生同样的事情。
有没有可以连续播放的内容?
答案 0 :(得分:1)
函数sd.play()
不能连续快速重复使用。在内部,它每次创建一个sd.OutputStream
,播放音频数据并再次关闭流。
由于打开和关闭流,将出现间隙。这是预期的。
对于连续播放,您应该使用sd.OutputStream.write()函数,或者甚至更好的是使用具有自定义回调函数的sd.OutputStream
(如某些示例程序所示)。
文档音频传递示例here中也发生了同样的事情。
这可能有不同的原因。这应该工作,并且对我来说很好。 您能否更详细地描述问题?终端上印有任何消息吗?