在python中读取一个audiostream

时间:2010-07-14 10:29:35

标签: python audio stream inputstream

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

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

用一个audiostream然后^ C out,你将有一个工作的mp3文件,让我相信我可以在python中实现这个自动化,但我找不到如何。

如果我这样做

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

它甚至没有读取流。

在python中是否有来自java的BufferedInputReader或者是否有人可以给我一些关于如何进行此操作的指示?读一段音频流,让它在一段时间后停止阅读。

由于

1 个答案:

答案 0 :(得分:8)

您可能最好从urllib2.urlopen()保存类似文件的对象,然后在带有size参数的循环中使用其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 - 它试图读取整个内容。这是一个流,所以这将是一段时间。如果流关闭,那么然后您对write的调用可以继续进行,并且您可以立即从无文件转到大文件。

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