我正在尝试编写一个 python 脚本来从 Soundcloud URL 播放 mp3
这是我已经做过的:
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
许多选项,例如更改格式、频道、速率。
我只是从扬声器中听到奇怪的声音,我在 Google 上搜索了 pyaudio
播放 mp3,但没有找到任何信息。
我尝试通过传递 mp3 中的字节来创建
pygame
对象,然后执行播放函数。我没有收到任何错误:脚本运行但没有播放任何内容。我正在使用 Python 3 和 Ubuntu。
Sound
这样做的优点是它可以与 VLC 兼容的所有东西一起使用,而不仅仅是 MP3。如果您愿意,也可以暂停。
您可以使用
安装适用于 python 的 vlcimport vlc
p = vlc.MediaPlayer("http://your_mp3_url")
p.play()
pip install python-vlc
流式传输
mp3
,你需要在PCM数据中解码它,我知道pymedia可以做到这一点,但它太旧了,只支持
pyaudio
.要以正确的方式执行此操作,您需要了解音频的一些属性,例如采样率、通道数、位分辨率,以便在 pyaudio 中进行设置。
我可以展示如何使用
python27
+
python27
来实现,首先我将展示如何进行流式传输 pyaudio
.wav
选择大缓冲区,Python在while循环中很慢,我使用大小为
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)
的块来完成它,请注意,
8192
,format
和channels
是这个rate
文件的正确属性,所以对于 wav
我们不需要解码,它是一个.wav
数据,现在对于PCM
,我们需要解码并以mp3
格式进行流式传输。让我们尝试使用
PCM
pymedia
这可能是秘密,因为我从未见过有人展示如何在 python 中完成此操作,对于 python3,我不知道任何可以将 .mp3 解码为像 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)
和
.wav
.mp3
。如果其受保护站点带有用户名/密码,您可能需要首先处理它。
如果没有,这里有一个工作代码,使用
URL
从
url
下载文件,然后使用 pydub播放它。 它是一个两步过程,其中第一个 mp3 文件被下载并保存到文件,然后使用外部播放器播放。
urllib2
** 更新 **您确实提到您需要从网络流式传输。在这种情况下,您可能需要查看
GStreamer
和 Python Bindings
这是一个
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)
导入 urllib.request #codigo vale 从 pydub 导入 AudioSegment 从 pydub.playback 导入播放
mp3file = urllib.request.urlopen("http://colecciones.humboldt.org.co/rec/sonidos/IAvH-CSA-2/IAvH-CSA-2.mp3") 以 open('./test.mp3','wb') 作为输出: 输出.write(mp3file.read())
ipd.Audio('./test.mp3') # 萨利达音频