python - 在 python 中读取音频流

标签 python audio stream inputstream

令人惊讶的是,在 bash 中,您可以做到

$ curl http://mp3.streampower.be/radio1-high.mp3 > test.mp3

使用音频流,然后 ^C 输出,您将得到一个有效的 mp3 文件,这让我相信我可以在 python 中自动执行此操作,但我找不到方法。

如果我这样做

file('python.mp3', 'w').write(urllib2.urlopen("http://mp3.streampower.be/radio1-high.mp3").read())

它甚至不读取流。

在 python 中是否有来自 java 的 BufferedInputReader 之类的东西,或者任何人都可以给我一些关于我将如何去做的指示吗?读取音频流并让它在一段时间后停止读取。

谢谢

最佳答案

您最好从 urllib2.urlopen() 中保存类似文件的对象,然后在带有大小参数的循环中使用其 read 方法:

#!/usr/bin/python

import urllib2

f=file('python.mp3', 'w')

url=urllib2.urlopen("http://mp3.streampower.be/radio1-high.mp3")

while True:
    f.write(url.read(1024))

您的代码在调用 read 时没有使用 size 参数——它会尝试读取整个内容。这是一个流,所以这将是一段时间。如果流关闭,然后您对 write 的调用可以继续,并且您会立即从没有文件变成一个巨大的文件。

我在此处的示例代码将为您构建一个又好又慢的 mp3 文件。如果流的发送速度比典型的 mp3 比特率快得多,您可能需要调整 1024,但这应该没问题。 (一个 128kbps 的流每秒需要对 write(2) 进行 16 次系统调用,这根本不会有任何压力。但是在 10mbit 或更高的速度下,它会受到伤害,你应该使用更大的 read 大小。)

关于python - 在 python 中读取音频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3245253/

相关文章:

python - 中断循环以返回开始并添加更多循环

python - 用 Pandas 读取格式错误的 'csv' 文件

html - Chrome 无法播放 Icecast 流媒体链接

c# - 如何在 stream.read 中传递一个 long 作为偏移量?

python - 如何在 django 中按应用程序订购片段?

javascript - Ogg文件无法在手机上多次播放

node.js - 如何使用 Web 音频 API 在浏览器上播放 ArrayBuffer 流?

c - USB 24 位音频流描述符

java - Python 和 Java 接口(interface) - 多线程输入和输出流

python - 对元素列表的设置操作