python - 使用 Sounddevice 连续播放音频

标签 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 .

有没有办法让播放不间断?

最佳答案

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/

相关文章:

python - Tkinter overrideredirect 不再接收事件绑定(bind)

python : how to change audio volume?

python - 如何从回调中优雅地停止 python sounddevice

python - 为什么在 python f-strings 中使用双花括号而不是反斜杠?

python - Pandas 无法正确识别列

python - 寻找适用于 Google App Engine 的 python 视频编辑/处理功能

linux - 自定义 shell 的 shebang?

linux - Jenkins --> JUnit 在 Linux 上抛出 OutOfMemoryError PermGen

python - 为什么这是漏洞利用的结构

python - Sounddevice ValueError : could not broadcast input array from shape (2048) into shape (2048, 1)