2010-07-14 13 views
3

Etonnamment, en bash, vous pouvez faireLa lecture d'un Audiostream en python

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

avec un Audiostream puis^C, et vous aurez un fichier mp3 de travail, me conduit à croire que je pouvais avoir cette automatique en python, mais je ne trouve pas comment.

Si je fais juste

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

ne lit même pas le flux.

Y at-il quelque chose comme BufferedInputReader de Java en python ou quelqu'un peut-il me donner quelques indications sur la façon dont j'irais faire cela? Lire un flux audio et l'amener à arrêter de lire après un moment.

Merci

Répondre

7

Vous auriez probablement faire mieux pour sauver l'objet de type fichier de urllib2.urlopen() puis utiliser sa méthode read dans une boucle avec un paramètre de taille:

#!/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)) 

Votre code appelai read sans paramètre de taille - qui essaie de lire le tout. C'est un flux, donc ça va prendre du temps. Si le flux se ferme, puis votre appel à write pourrait continuer, et vous passeriez d'un fichier à un fichier énorme en un rien de temps.

Mon exemple de code ici va vous construire un fichier mp3 sympa et lent. Vous devrez peut-être modifier le 1024 si les flux sont envoyés beaucoup plus rapidement que les débits binaires mp3 typiques, mais cela devrait être bon. (Un flux de 128kbps impliquerait 16 appels système par seconde à write(2), ce qui ne devrait pas être un stress du tout.Mais à des vitesses de 10mbit ou plus, ça ferait mal, et vous devriez utiliser une plus grande taille read.)

+0

merci un groupe! – thepandaatemyface

+0

Malheureusement, dans mon cas le mp3 ne joue pas bien, ayant beaucoup de petites coupures dedans. Une idée qui pourrait aider à améliorer? Le flux joue bien à partir de Firefox ou VLC –

+1

@ Stéphane, essayez avec des blocs de plus grande taille, '10240' ou plus? – sarnold

Questions connexes