如何从URL播放MP3

我正在尝试编写一个可以从Soundcloud URL播放mp3的python脚本

这是我已经做了:

from urllib.request import urlopen url = "soundcloud.com/artist/song.mp3" u = urlopen(url) data = u.read(1024) while data: player.play(data) data = u.read(1024) 

我尝试了很多选项,如改变格式,频道,速度的pyaudio 。 我只是从扬声器得到奇怪的声音,我search谷歌pyaudio播放MP3,并没有发现任何信息。

我尝试通过从MP3传递字节,然后通过执行播放function创buildSound对象的pygame 。 我没有得到任何错误:脚本运行,但没有什么玩。

我正在使用Python 3和Ubuntu

如果你碰巧安装了VLC(或愿意安装它),那么这应该工作:

 import vlc p = vlc.MediaPlayer("http://your_mp3_url") p.play() 

这具有与VLC一起工作的优点,而不仅仅是MP3。 如果你想要,它也可以暂停。

对不起,但我没有Python3在这里测试,使用pyaudio流式传输mp3你将需要在PCM数据解码,我知道pymedia可以做到这一点,但它太旧,只是支持python27

要做到这一点,您需要了解音频的一些属性,如采样率,通道数量,位分辨率等,以便将其设置在pyaudio中。

我可以显示如何使用pyaudio + pyaudio ,首先我将显示如何完成流.wav

 from urllib2 import urlopen #to python3.x #from urllib.request import urlopen import pyaudio pyaud = pyaudio.PyAudio() srate=44100 stream = pyaud.open(format = pyaud.get_format_from_width(1), channels = 1, rate = srate, output = True) url = "http://download.wavetlan.com/SVV/Media/HTTP/WAV/NeroSoundTrax/NeroSoundTrax_test4_PCM_Mono_VBR_8SS_44100Hz.wav" u = urlopen(url) data = u.read(8192) while data: stream.write(data) data = u.read(8192) 

选择大的缓冲区,python是在while循环慢,我做了使用大小为8192块,请注意, formatchannelsrate是这个wav文件的rig特性,所以对于.wav我们不需要解码,它是一个PCM数据,现在为mp3我们将需要解码,并把PCM格式流。

让我们尝试使用pymedia

 from urllib2 import urlopen import pyaudio import pymedia.audio.acodec as acodec import pymedia.muxer as muxer dm= muxer.Demuxer( 'mp3' ) pyaud = pyaudio.PyAudio() srate=44100 stream = pyaud.open(format = pyaud.get_format_from_width(2), channels = 1, rate = srate, output = True) url = "http://www.bensound.org/bensound-music/bensound-dubstep.mp3" u = urlopen(url) data = u.read(8192) while data: #Start Decode using pymedia dec= None s= " " sinal=[] while len( s ): s= data if len( s ): frames= dm.parse( s ) for fr in frames: if dec== None: # Open decoder dec= acodec.Decoder( dm.streams[ 0 ] ) r= dec.decode( fr[ 1 ] ) if r and r.data: din = r.data; s="" #decode ended stream.write(din) data = u.read(8192) 

这可能是秘密的,因为我从来没有看到任何人显示如何可以在python中完成,因为python3我不知道任何可以解码.mp3像pymedia那样的东西。

这里这两个代码是streming和工作.wav.mp3

检查您是否可以使用该URL手动下载文件。 如果使用用户名/密码的受保护网站,则可能需要首先处理。

如果没有,这里是一个工作代码,使用urllib2url下载文件,然后使用pydub播放它。

它的第一个MP3文件下载并保存到文件,然后播放使用外部播放器的两个步骤的过程。

 import urllib2 from pydub import AudioSegment from pydub.playback import play mp3file = urllib2.urlopen("http://www.bensound.org/bensound-music/bensound-dubstep.mp3") with open('./test.mp3','wb') as output: output.write(mp3file.read()) song = AudioSegment.from_mp3("./test.mp3") play(song) 

**更新**
你确实提到你需要从网上流式传输。 在这种情况下,您可能需要使用Python绑定来查看GStreamer

这是一个SO链接 。