2010-07-14 38 views
3

令人惊讶的是,在bash,你可以做读了一个Python语音串流

$ 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或者任何人都可以给我一些关于如何去做这件事的指针?读一段音频流,并让它在一段时间后停止阅读。

感谢

回答

7

你可能会做的更好,从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没有尺寸参数 - 它试图读取整个事物。这是一个流,所以这将是一段时间。如果数据流关闭,然后您可以继续拨打write,您可以立即从无文件转换为大文件。

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

+0

谢谢一堆! – thepandaatemyface 2010-07-14 11:58:05

+0

不幸的是,在我的情况下,mp3播放不好,有很多小切片。任何想法可以帮助改善?该流在Firefox或VLC – 2016-01-27 21:49:52

+1

@Stéphane上播放良好,尝试更大的块大小,“10240”或更多? – sarnold 2016-01-27 22:08:59