Чтение аудиопотока в 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())

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

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

Спасибо

5
задан thepandaatemyface 14 July 2010 в 10:29
поделиться

1 ответ

Возможно, вам лучше сохранить объект типа файла из 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.)

.
8
ответ дан 14 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: