使用Sounddevice连续播放音频

时间:2019-02-06 19:11:57

标签: python linux python-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中也会发生同样的事情。

有没有可以连续播放的内容?

1 个答案:

答案 0 :(得分:1)

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

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

  

文档音频传递示例here中也发生了同样的事情。

这可能有不同的原因。这应该工作,并且对我来说很好。 您能否更详细地描述问题?终端上印有任何消息吗?