2016-07-03 13 views
5

Tôi đang cố gắng để viết một kịch bản python mà sẽ chơi mp3 từ URL SoundcloudHow to play mp3 từ URL

Đây là những gì tôi đã làm:

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) 

tôi đã cố gắng pyaudio với nhiều các tùy chọn như thay đổi định dạng, kênh, tỷ lệ. và tôi chỉ nhận được âm thanh lạ từ các loa, tôi đã tìm kiếm trên Google pyaudio phát mp3 và không tìm thấy bất kỳ thông tin nào.

Tôi đã thử pygame bằng cách tạo đối tượng Sound bằng cách chuyển byte từ mp3 và sau đó chỉ bằng cách thực hiện chức năng phát. Tôi không nhận được bất kỳ lỗi nào: tập lệnh chạy nhưng không có gì đang phát.

Tôi đang làm việc với Python 3 và Ubuntu.

+0

Tôi đoán bạn sẽ phải tìm cách để tải xuống tệp đầu tiên dưới dạng mp3 và sau đó phát chúng như bạn đã đề cập với pygame chẳng hạn. Tải xuống nên là phần khó khăn tuy nhiên ... Làm thế nào sẽ url = "sound_cloud url" trông như thế nào? Bạn có thể đưa ra một ví dụ không? Tôi đã có một cái gì đó như url = "soundcloud.com/artist/song.mp3" bạn chỉ có thể sử dụng: import os; os.system ('wget' + url) nhưng tôi nghi ngờ rằng url có định dạng này. – Ohumeronen

+0

Tôi cần nó để được phát trực tuyến, url trông giống như sau: "https://ec-media.sndcdn.com/cWHNerOLlkUq.128.mp3?f10880d39085a94a0418a7ef69b03d522cd6dfee9399eeb9a522079b6afcbe3bd34f537531708eb245f81c7e0db701476a167319865dd299cf41501b5895e9caee9e3be93d" bất kỳ cái nào? – LichKing

+0

Tôi nhận được "403 - Cấm" nếu tôi nhấp vào url đó. Bạn có chắc url là chính xác không? – Ohumeronen

Trả lời

7

Nếu bạn tình cờ có VLC cài đặt (hoặc sẵn sàng để cài đặt nó), sau đó điều này sẽ làm việc:

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

này có lợi thế là nó hoạt động với mọi thứ mà VLC làm việc với, không chỉ là MP3. Nó cũng có thể bị tạm dừng nếu bạn muốn.

0

Kiểm tra xem bạn có thể tải xuống tệp theo cách thủ công bằng cách sử dụng URL đó không. Nếu trang web được bảo vệ của nó có tên người dùng/mật khẩu, bạn có thể cần phải quan tâm đến điều đó trước tiên.

Nếu không, đây là mã đang tải xuống tệp từ url sử dụng urllib2 và sau đó phát nó bằng cách sử dụng pydub.

Quy trình gồm hai bước mà tệp mp3 đầu tiên được tải xuống và lưu vào tệp và sau đó phát bằng trình phát bên ngoài.

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 **
Bạn đã đề cập đến những gì bạn cần streaming từ web. Trong trường hợp đó, bạn có thể muốn xem GStreamer với Python Bindings

Đây là SO link cho điều đó.

2

Xin lỗi nhưng tôi không có Python3 để kiểm tra ở đây, để dòng mp3 sử dụng pyaudio bạn sẽ cần phải giải mã nó trong dữ liệu PCM, tôi biết rằng pymedia có thể làm điều đó, nhưng nó là quá già và chỉ hỗ trợ python27.

Để làm điều này đúng cách, bạn sẽ cần phải biết một số thuộc tính của âm thanh của bạn, những thứ như lấy mẫu, số kênh, độ phân giải bit, để đặt nó trong pyaudio.

tôi có thể hiển thị như thế nào tôi làm điều đó bằng python27 + pyaudio, đầu tiên tôi sẽ hiển thị như thế nào nó được thực hiện để dòng .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) 

chọn đệm lớn, trăn chậm trong khi vòng lặp, tôi đã làm nó bằng khối kích thước 8192, lưu ý rằng format, channelsrate là thuộc tính rigth cho wav tập tin này, vì vậy cho .wav chúng ta không cần phải giải mã, nó là một PCM dữ liệu, bây giờ cho mp3 chúng tôi sẽ cần phải giải mã và đưa vào định dạng PCM dòng.

Hãy thử sử dụng 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) 

Đây có thể là bí mật, bởi vì tôi chưa bao giờ thấy bất cứ ai thấy thế nào điều này có thể được thực hiện trong python, cho python3 Tôi không biết bất cứ điều gì có thể giải mã .mp3 thành từng miếng như PyMedia làm .

đây hai mã này được streming và làm việc cho .wav.mp3

Các vấn đề liên quan