使用字节数组播放声音

时间:2015-06-29 03:52:29

标签: python ffmpeg

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

任何图书馆都会有用。

1 个答案:

答案 0 :(得分:1)

Try PyAudio这是PortAudio的绑定。

我使用它for creating audio conferences并且效果很好。

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

official docs in Examples section提供了几个例子。

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

您可能需要一些机制来防止缓冲区增长太多,即使用循环缓冲区等。但必须小心这一点,因为如果声音输出设备与传入数据的速度相比较慢,你可能会面对声音削波

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

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

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

  1. Create an instance of PyAudio
  2. Create an audio I/O stream
  3. 在这里你可以看到input=True参数:你不需要这个,因为你只需播​​放声音。

    还有另一个参数stream_callback指向on_audio_ready方法。 pyaudio在一个单独的线程中调用此方法。 It pulls data from buffer and returns it to caller。注意:您需要返回尽可能多的数据,因为输出设备已准备好使用(in_data)。 In my code, if there is less data available, than it is needed, then silence data is appended

    1. 通过调用.start_stream()方法启动您的信息流。我使用过Twisted库,所以it may look a bit weird for you
相关问题