python - 使用字节数组播放声音

标签 python ffmpeg

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

任何库都会有用。

最佳答案

Try PyAudio这是 PortAudio 的绑定(bind).

我用过for creating audio conferences效果很好。

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

official docs in Examples section 提供了几个示例.

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

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

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

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

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

  1. > Create an instance of PyAudio .
  2. > Create an audio I/O stream .

在这里你可以看到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 .

关于python - 使用字节数组播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31107513/

相关文章:

Python 对字典列表值求和进行排序

python - 在 scipy 中选择积分变量

java - FFmpeg Javacv - 延迟问题

ubuntu - 如何加快视频转换

python - 有没有办法通过正则表达式搜索快速删除大量多余的数据?

python - 为什么此代码不生成具有随机颜色的形状?

python - 如何将参数列表传递给 python 命令

command-line - ffplay双显示器设置

audio - 在ffmpeg中同步音频和视频的结尾?

ffmpeg - 如何使用标记同步两个音频文件