在python中读取一个audiostream

the*_*ace 5 python audio inputstream stream

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

$ curl http://mp3.streampower.be/radio1-high.mp3 > test.mp3
Run Code Online (Sandbox Code Playgroud)

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

如果我这样做

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

它甚至没有读取流.

有没有类似于python中java的BufferedInputReader,或者任何人都可以给我一些关于如何做到这一点的指示?阅读一个音频流并让它在一段时间后停止阅读.

谢谢

sar*_*old 8

你可能最好保存类文件对象urllib2.urlopen(),然后read在带有size参数的循环中使用它的方法:

#!/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))
Run Code Online (Sandbox Code Playgroud)

你的代码是在read没有size参数的情况下调用的- 它试图读取整个内容.这是一个流,所以这将是一段时间.如果流已关闭,那么您的呼叫write可以继续,并且您可以立即从无文件转到大文件.

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