我正在尝试编写一个可以从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
块,请注意, format
, channels
和rate
是这个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
手动下载文件。 如果使用用户名/密码的受保护网站,则可能需要首先处理。
如果没有,这里是一个工作代码,使用urllib2
从url
下载文件,然后使用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链接 。