3

我正在编写一个程序来通过网络传输音频,所以我有一个线程来记录数据和一个发送它。测试时音频有明显的差距。我相信这是由于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

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

有没有使播放连续的方法?

4

1 回答 1

3

该功能sd.play()并不意味着快速连续重复使用。在内部,它每次都会创建一个sd.OutputStream,播放音频数据并再次关闭流。由于打开和关闭流,会出现间隙。这是意料之中的。

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

同样的事情也发生在此处的文档音频直通示例中。

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

于 2019-02-07T09:03:30.753 回答