【问题标题】:Playing remote audio files in Python? [closed]在 Python 中播放远程音频文件? [关闭]
【发布时间】:2013-12-25 22:51:57
【问题描述】:

我正在寻找一种可以轻松播放远程 .mp3 文件的解决方案。我查看了适用于本地文件的“pyglet”模块,但它似乎无法处理远程文件。我可以临时下载 .mp3 文件,但由于 .mp3 文件可能看起来很大,因此不建议这样做。

我更希望它是跨平台的,而不是仅限 Windows 等。

例如,播放来自以下位置的音频文件:

http://example.com/sound.mp3

只需在下载文件时进行流式传输,我的想法是用 Python 编写一个 MP3 播放器,它可以打开 Soundcloud 歌曲。

【问题讨论】:

  • @LevLevitsky 我正在使用 Python 和 Tkinter 为 Soundcloud 创建一个 GUI 应用程序,有些声音可能超过 40 分钟。这会导致等待时间很长,我想要可以播放声音的东西。
  • 我会选择 vlc 媒体播放器并使用子进程。它是跨平台的,支持流式传输。

标签: python python-2.7 audio audio-streaming python-module


【解决方案1】:

Pygame 是一个很好的起点。它无论如何都不是完美的,但它确实可以处理声音,它有一个混音器,并且还支持 midi。它也是跨平台的。

【讨论】:

  • 找不到播放远程文件的模块 API,但它似乎是一个很棒的模块!
  • 刚试过。这对 Mixer.music 和 Sound 对象都不起作用。
【解决方案2】:

您可以将GStreamerpython bindings 一起使用(需要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()

【讨论】:

    【解决方案3】:

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

    我想你也会觉得this 很有趣。肯定会给你带来一些想法。

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多