使用字节数组播放声音

Sta*_*der 5 python ffmpeg

如何在 Python 中使用字节数组播放声音。更准确地说,我从套接字读取了一个字节数组,我想将其转换为声音以理解它。我怎样才能做到这一点?

任何图书馆都会很有用。

obl*_*lex 6

尝试 PyAudio,它是PortAudio的绑定。

我用它来创建音频会议,效果很好。

深入调查表明,这是最适合实时处理原始音频数据的库。

示例部分中的官方文档提供了几个示例。

当您要从套接字获取数据时,您需要先对其进行缓冲。这意味着,您不断从套接字读取数据并将其放入某个缓冲区。

您可能需要一些机制来防止缓冲区增长过多,即使用循环缓冲区左右。但这必须小心完成,因为如果声音输出设备与传入数据的速度相比较慢,您可能会面临声音剪辑

在缓冲区中获得一些数据后,您将需要播放它。最好的方法是在设备准备好使用数据时告诉音频驱动程序获取数据。这是通过指定一个回调来完成的,该回调将为设备返回一个数据块。

因此,请参阅Play (Callback)官方文档中的示例。

该示例相当具有描述性,但可能无法回答您的所有问题。因此,我将逐步指导您完成我的代码:

  1. 创建 PyAudio 的一个实例
  2. 创建音频 I/O 流

在这里你可以看到input=True参数:你不需要这个,因为你只需要播放声音。

还有另一个参数stream_callback指向on_audio_ready方法。此方法由 pyaudio 在单独的线程中调用。它从缓冲区中提取数据并将其返回给 caller。注意:您需要返回尽可能多的数据,因为输出设备已准备好使用 ( in_data)。在我的代码中,如果可用数据少于所需数据,则附加静音数据

  1. 通过调用它的.start_stream()方法来启动你的流。我用过 Twisted 库,所以它对你来说可能看起来有点奇怪