2016-07-03 4 views
5

Ich versuche, ein Python-Skript zu schreiben, das mp3 von Soundcloud URL spielenWie mp3 spielen von URL

Dies ist, was ich bereits getan haben:

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) 

Ich versuchte pyaudio mit vielen Optionen wie Ändern von Formaten, Kanälen, Rate. und ich bekomme nur seltsamen Klang von den Lautsprechern, suchte ich nach Google pyaudio mp3 spielen und habe keine Informationen gefunden.

Ich versuchte pygame durch Erstellen Sound Objekt durch Übergabe der Bytes aus dem MP3 und dann nur durch Ausführen der Wiedergabe-Funktion. Ich bekomme keine Fehler: Das Skript läuft, aber nichts spielt.

Ich arbeite mit Python 3 und Ubuntu.

+0

Ich denke, Sie müssen einen Weg finden, die Dateien zuerst als mp3 herunterzuladen und sie dann zu spielen, wie Sie zum Beispiel mit pygame erwähnt haben. Download sollte aber der schwierige Teil sein ... Wie würde url = "sound_cloud url" aussehen? Kannst du ein Beispiel geben? Ich hatte etwas wie url = "soundcloud.com/artist/song.mp3" das du einfach benutzen könntest: import os; os.system ('wget' + url) aber ich bezweifle, dass die URL dieses Format hat. – Ohumeronen

+0

Ich brauche es gestreamt werden, sieht die URL wie folgt aus: „https://ec-media.sndcdn.com/cWHNerOLlkUq.128.mp3?f10880d39085a94a0418a7ef69b03d522cd6dfee9399eeb9a522079b6afcbe3bd34f537531708eb245f81c7e0db701476a167319865dd299cf41501b5895e9caee9e3be93d“ irgendein? – LichKing

+0

Ich bekomme "403 - verboten", wenn ich auf diese URL klicke. Sind Sie sicher, dass die URL korrekt ist? – Ohumeronen

Antwort

7

Wenn Sie zufällig VLC installiert haben (oder bereit sind, es zu installieren), dann sollte diese Arbeit:

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

Dies hat Der Vorteil, dass es mit allem funktioniert, mit dem VLC arbeitet, nicht nur mit MP3. Es kann auch angehalten werden, wenn Sie möchten.

0

Überprüfen Sie, ob Sie die Datei manuell mit dem URL herunterladen können. Wenn die geschützte Seite mit dem Benutzernamen/passwd angezeigt wird, müssen Sie sich zuerst darum kümmern.

Wenn nicht, ist hier ein Arbeitscode, der Datei von url mit urllib2 herunterlädt und dann unter Verwendung pydub abspielt.

Es ist ein zweistufiger Prozess, bei dem die erste MP3-Datei heruntergeladen und in einer Datei gespeichert und dann mit einem externen Player abgespielt wird.

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) 

** Update **
Sie haben erwähnt, dass Sie von Web-Streaming benötigen. In diesem Fall möchten Sie vielleicht GStreamer mit Python Bindings

betrachten

Hier ist ein SO link dafür.

2

Sorry, aber ich habe nicht Python3 hier, zu testen mp3 zu streamen pyaudio verwenden Sie dekodieren es in PCM-Daten benötigen, weiß ich, dass pymedia kann es tun, aber es ist zu alt und unterstützen nur python27.

Um dies zu tun, müssen Sie einige Attribute Ihres Audios wissen, wie Samplerate, Anzahl der Kanäle, Bitauflösung, um es im Pyaudio einzustellen.

kann ich zeigen, wie ich es tue mit python27 + pyaudio, zuerst werde ich zeigen, wie es .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) 

wählt große Puffer zu streamen erfolgt, Python in while-Schleife ist langsam, ich habe es Stücke mit der Größe 8192, beachten sie, dass format, channels und rate die rigth Attribute für diese Datei wav sind, so dass für .wav nicht dekodieren brauchen wir, es ist ein PCM Daten vorhanden sind, jetzt mp3 müssen wir dekodieren und in PCM Format gebracht zu streamen.

versuchen Lets 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) 

mit diesem Geheimnis sein kann, weil ich noch nie jemand gesehen zeigt, wie dies in Python getan werden, für python3 ich nichts wissen, die .mp3 in Stücke wie pymedia dekodieren können Sie .

hier diese beiden Codes streming und arbeiten für .wav und .mp3