dispiace, ma non ho python3 per testare qui, per lo streaming mp3
utilizzando pyaudio
è necessario decodificare in dati PCM, so che pymedia può farlo, ma è troppo vecchio e solo sostengo python27
.
Per fare ciò nel modo giusto è necessario conoscere alcuni attributi del proprio audio, cose come samplerate, numero di canali, risoluzione bit, per impostarlo nel pyaudio.
posso mostrare come lo faccio usando python27
+ pyaudio
, prima vi mostrerò come è fatto per lo streaming .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)
scegliere buffer di grandi dimensioni, Python è lento nel ciclo while, l'ho fatto con pezzi di dimensioni 8192
, notare che format
, channels
e rate
sono attributi del rigth per questo file wav
, quindi per .wav
non abbiamo bisogno di decodifica, è un dato PCM
, ora mp3
avremo bisogno di decodificare e mettere in formato PCM
per lo streaming.
Lets provare a utilizzare 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)
Questo può essere un segreto, perché non ho mai visto nessuno che mostra come questo può essere fatto in Python, per python3 io non so nulla in grado di decodificare .mp3 in pezzi come PyMedia do .
Ecco questi due codici sono streming e lavorando per .wav
e .mp3
Immagino che dovrai trovare un modo per scaricare i file come mp3 e poi riprodurli come hai detto con pygame per esempio. Il download dovrebbe essere la parte difficile comunque ... Come sarebbe url = "sound_cloud url"? Puoi fare un esempio? Avevo qualcosa come url = "soundcloud.com/artist/song.mp3" che potevi semplicemente usare: import os; os.system ('wget' + url) ma dubito che l'url abbia questo formato. – Ohumeronen
ho bisogno di essere trasmessa, l'url è simile al seguente: "https://ec-media.sndcdn.com/cWHNerOLlkUq.128.mp3?f10880d39085a94a0418a7ef69b03d522cd6dfee9399eeb9a522079b6afcbe3bd34f537531708eb245f81c7e0db701476a167319865dd299cf41501b5895e9caee9e3be93d" qualcuno? – LichKing
Ottengo "403 - Vietato" se clicco su quell'URL. Sei sicuro che l'URL sia corretto? – Ohumeronen