2010-07-14 2 views
3

Удивительно, но в Баше, вы можете сделатьЧтения аудиопотока в питоне

$ 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()) 

не даже читать поток.

Есть ли что-то вроде BufferedInputReader из java в python или может кто-нибудь дать мне несколько указаний относительно того, как я буду это делать? Чтение аудиопотока и заставить его перестать читать через некоторое время.

Благодаря

ответ

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-файл славным и медленным. Возможно, вам потребуется настроить 1024, если потоки отправляются гораздо быстрее, чем обычные битрейты mp3, но это должно быть хорошо. (В потоке 128 Кбит/с будет задействовано 16 системных вызовов в секунду до write(2), что не должно быть никаким стрессом вообще. Но на скорости 10 мбит или выше это повредило бы, и вы должны использовать больший размер read.)

+0

спасибо куча! – thepandaatemyface

+0

К сожалению, в моем случае mp3 не играет хорошо, имея в себе множество небольших разрезов. Любая идея, которая может помочь улучшить? Поток хорошо играет в Firefox или VLC –

+1

@ Stéphane, попробуйте с большими размерами блоков, '10240' или более? – sarnold

Смежные вопросы