使用 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.
这一定有不同的原因。这应该有效,对我来说效果很好。
您能否更详细地描述问题?是否有任何消息打印到终端?
我正在编写一个程序来通过网络流式传输音频,所以我有一个线程来记录数据和一个发送数据。测试音频时有明显的差距。我相信这是由于 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.
这一定有不同的原因。这应该有效,对我来说效果很好。 您能否更详细地描述问题?是否有任何消息打印到终端?