복붙노트

[PYTHON] URL에서 mp3를 재생하는 방법

PYTHON

URL에서 mp3를 재생하는 방법

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)

나는 형식, 채널, 속도 등의 다양한 옵션으로 파이 오디오를 시도했다. 스피커에서 이상한 소리가 들리면 mp3를 재생하는 pyaudio를 검색 한 결과 아무런 정보도 찾지 못했습니다.

mp3의 바이트를 전달하여 Sound 객체를 만든 다음 재생 기능을 실행하여 파이 게임을 시도했습니다. 어떤 오류도 발생하지 않습니다. 스크립트는 실행되지만 아무것도 재생되지 않습니다.

파이썬 3과 우분투로 작업하고 있습니다.

해결법

  1. ==============================

    1.VLC를 설치했거나 설치하려고한다면 다음과 같이하십시오.

    VLC를 설치했거나 설치하려고한다면 다음과 같이하십시오.

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

    이것은 MP3뿐만 아니라 VLC와 함께 작동하는 장점이 있습니다. 원할 경우 일시 중지 할 수도 있습니다.

  2. ==============================

    2.미안하지만 파이썬 3을 가지고 테스트 할 필요가 없습니다. 파이어 오디오를 사용하여 mp3를 스트리밍하려면 PCM 데이터에서 디코드해야합니다. 파이 메디아가 할 수 있다는 것을 알고 있지만, 너무 오래되었고 단지 python27 만 지원합니다.

    미안하지만 파이썬 3을 가지고 테스트 할 필요가 없습니다. 파이어 오디오를 사용하여 mp3를 스트리밍하려면 PCM 데이터에서 디코드해야합니다. 파이 메디아가 할 수 있다는 것을 알고 있지만, 너무 오래되었고 단지 python27 만 지원합니다.

    이렇게하려면 오디오의 특성, 샘플 수, 채널 수, 비트 해상도를 알아야 파이어 오디오에서 설정할 수 있습니다.

    나는 python27 + 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)
    

    커다란 버퍼를 선택하고, 파이썬은 while 루프에서 느리다. 나는 사이즈, 채널, 속도가이 wav 파일의 rigth 속성이다. 그래서 우리는 디코드 할 필요가 없다. 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)
    

    이것은 파이썬에서 어떻게 수행 될 수 있는지 보여주는 사람을 본 적이 없기 때문에 비밀 일 수 있습니다. 파이썬 3에서는 .mp3을 디코딩 할 수있는 내용을 pymedia처럼 해석 할 수 없습니다.

    이 두 코드는 .wav 및 .mp3 용 스트리밍 및 작업 중입니다.

  3. ==============================

    3.해당 URL을 사용하여 수동으로 파일을 다운로드 할 수 있는지 확인하십시오. 사용자 이름 / passwd로 보호 된 사이트 인 경우 먼저이를 처리해야 할 수 있습니다.

    해당 URL을 사용하여 수동으로 파일을 다운로드 할 수 있는지 확인하십시오. 사용자 이름 / passwd로 보호 된 사이트 인 경우 먼저이를 처리해야 할 수 있습니다.

    그렇지 않은 경우 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)
    

    ** 업데이트 ** 웹에서 스트리밍해야한다고 언급했습니다. 이 경우 파이썬 바인딩을 사용하여 GStreamer를 살펴볼 수 있습니다.

    여기에 대한 SO 링크가 있습니다.

  4. from https://stackoverflow.com/questions/38171169/how-to-play-mp3-from-url by cc-by-sa and MIT license