Воспроизведение удаленных аудиофайлов в Python?

Я ищу решение для простого воспроизведения удаленных файлов .mp3. Я просмотрел модуль «pyglet», который работает с локальными файлами, но, похоже, он не может обрабатывать удаленные файлы. Я мог бы временно загрузить файл .mp3, но это не рекомендуется из-за того, насколько большими могут казаться файлы .mp3.

Я скорее хочу, чтобы это было кросс-платформенным, а не только для Windows и т. Д.

Пример воспроизведения аудиофайла из:

http://example.com/sound.mp3

Просто транслируйте файл по мере его загрузки, моя идея - это MP3-плеер на Python, который открывает песни Soundcloud.


person Jack    schedule 08.12.2013    source источник
comment
@LevLevitsky Я создаю приложение с графическим интерфейсом для Soundcloud с помощью Python и Tkinter, и некоторые звуки могут длиться более 40 минут. Что приведет к долгому ожиданию, я хочу что-то, что могло бы транслировать звук.   -  person Jack    schedule 17.12.2013
comment
Я бы выбрал медиаплеер vlc и использовал подпроцесс. Он кроссплатформенный и поддерживает потоковую передачу.   -  person User    schedule 17.12.2013


Ответы (3)


Вы можете использовать GStreamer с привязки python (требуется PyGTK).

Затем вы можете использовать этот код:

import pygst
import gst

def on_tag(bus, msg):
    taglist = msg.parse_tag()
    print 'on_tag:'
    for key in taglist.keys():
        print '\t%s = %s' % (key, taglist[key])

#our stream to play
music_stream_uri = 'http://mp3channels.webradio.antenne.de/chillout'

#creates a playbin (plays media form an uri) 
player = gst.element_factory_make("playbin", "player")

#set the uri
player.set_property('uri', music_stream_uri)

#start playing
player.set_state(gst.STATE_PLAYING)

#listen for tags on the message bus; tag event might be called more than once
bus = player.get_bus()
bus.enable_sync_message_emission()
bus.add_signal_watch()
bus.connect('message::tag', on_tag)

#wait and let the music play
raw_input('Press enter to stop playing...')

GStreamer playbin Docs< /а>

ОБНОВЛЕНИЕ

Управление плеером:

def play():
    player.set_state(gst.STATE_PLAYING)

def pause():
    player.set_state(gst.STATE_PAUSED)

def stop():
    player.set_state(gst.STATE_NULL)

def play_new_uri( new_uri ):
    player.set_state(gst.STATE_NULL)
    player.set_property('uri', new_uri )
    play()
person kelvinss    schedule 17.12.2013

PyAudio кажется тем, что вы ищете. Это модуль Python, который позволяет воспроизводить и записывать потоковые аудиофайлы. Это также позволяет вам реализовать сервер.

Согласно сайту PyAudio: работает в GNU/Linux, Microsoft Windows и Apple Mac OS X.

Это пример, который я копирую с http://people.csail.mit.edu/hubert/pyaudio/#examples :

"""PyAudio Example: Play a WAVE file."""

import pyaudio
import wave
import sys

CHUNK = 1024

if len(sys.argv) < 2:
    print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])
    sys.exit(-1)

wf = wave.open(sys.argv[1], 'rb')

p = pyaudio.PyAudio()

stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output=True)

data = wf.readframes(CHUNK)

while data != '':
    stream.write(data)
    data = wf.readframes(CHUNK)

stream.stop_stream()
stream.close()

p.terminate()

Думаю, вам будет это интересно. . И, конечно, приносит вам некоторые идеи.

person Raydel Miranda    schedule 17.12.2013

Pygame — хорошее место для начала. Он ни в коем случае не идеален, но он справляется со звуками, имеет микшер и поддержку миди. Это также кроссплатформенный.

person WeRelic    schedule 08.12.2013
comment
Не удалось найти API модулей для воспроизведения удаленных файлов, но, похоже, это отличный модуль! - person Jack; 17.12.2013
comment
Только что попробовал. Это не работает ни с mix.music, ни с объектом Sound. - person padmalcom; 08.12.2020