How to play streaming audio from internet radio on Python 3.5.3

Борис Борисыч picture Борис Борисыч · Oct 15, 2017 · Viewed 14.5k times · Source

I am using Python 3.5.3 on Windows 8.1 x64 and i need play audio from here

I have tried pyaudio, but it gives me only white noise and error occurred after a few runs of pyaudio (pyaudio module 'pyaudio' has no attribute 'PyAudio').

Please, advise me how better play the streaming audio from url, using Python...

P.S. I already got the song title and artist name with this code:

import requests
import time
import datetime
print(datetime.datetime.now())
import re


url = 'http://prem1.rockradio.com:80/bluesrock?9555ae7caa92404c73cade1d'
encoding = 'latin1'
info = ''

radio_session = requests.Session()

while True:

    radio = radio_session.get(url, headers={'Icy-MetaData': '1'}, stream=True)

    metaint = int(radio.headers['icy-metaint'])

    stream = radio.raw

    audio_data = stream.read(metaint)
    meta_byte = stream.read(1)

    if (meta_byte):
        meta_length = ord(meta_byte) * 16

        meta_data = stream.read(meta_length).rstrip(b'\0')

        stream_title = re.search(br"StreamTitle='([^']*)';", meta_data)


        if stream_title:

            stream_title = stream_title.group(1).decode(encoding, errors='replace')

            if info != stream_title:
                print('Now playing: ', stream_title)
                info = stream_title
            else:
                pass

        else:
            print('No StreamTitle!')

    time.sleep(1)

Answer

Anil_M picture Anil_M · Oct 17, 2017

If you are open for external libraries, you can install vlc binding for python using pip install python-vlc

And use player method to play audio file directly from URL as below.

import vlc
import time

url = 'http://prem1.rockradio.com:80/bluesrock?9555ae7caa92404c73cade1d'

#define VLC instance
instance = vlc.Instance('--input-repeat=-1', '--fullscreen')

#Define VLC player
player=instance.media_player_new()

#Define VLC media
media=instance.media_new(url)

#Set player media
player.set_media(media)

#Play the media
player.play()

Advantage of vlc player is that you can play most media types directly from URL (not just mp3) and also perform player like options such as

>>> play.pause()  #pause play back
>>> player.play() #resume play back
>>> player.stop() #stop play back