Възпроизвеждане на отдалечени аудио файлове в Python? [затворено]

Търся решение за лесно възпроизвеждане на отдалечени .mp3 файлове. Разгледах модула "pyglet", който работи с локални файлове, но изглежда, че не може да обработва отдалечени файлове. Бих могъл временно да изтегля файла .mp3, но това не е препоръчително поради колко големи могат да изглеждат файловете .mp3.

По-скоро искам да е за различни платформи, вместо само за Windows и т.н.

Пример, възпроизвеждане на аудио файл от:

http://example.com/sound.mp3

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


person Jack    schedule 08.12.2013    source източник
comment
@LevLevitsky Създавам GUI приложение за Soundcloud с Python и Tkinter и някои звуци може да са по-дълги от 40 минути. Което би довело до дълго време на чакане, искам нещо, което може да предава звук.   -  person Jack    schedule 17.12.2013
comment
Щях да избера vlc media player и да използвам subprocess. Той е междуплатформен и поддържа стрийминг.   -  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

АКТУАЛИЗАЦИЯ

Управление на плейъра:

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 е добро място да започнете. Не е перфектен по никакъв начин, но се справя със звуци, има миксер и поддръжка на midi. Освен това е кръстосана платформа.

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