Python vlc CD get metadata

85 Views Asked by At

i want to build a small cd player with normal pc usb cd player, Rpi 3b+, dac, oled screen and buttons. Currently im working on soft, and because i'm new to python (i was only using c++ before) im thinkering what library to use. Currently I stucked with vlc. I found how to get cd playback working here, but i want to get also metadata (Title etc.) like in desktop version SS. How can i achive it?

My current test code:

import vlc
import time

instance = vlc.Instance()
player = instance.media_player_new()
medialist = instance.media_list_new()
listplayer = instance.media_list_player_new()
listplayer.set_media_player(player)
medialist.add_media("cdda:///E:/")
listplayer.set_media_list(medialist)
listplayer.play()

time.sleep(10)

MEDIA=instance.media_new("cdda:///O:/") #this whole section doesnt work
MEDIA.get_mrl()
MEDIA.parse()
for i in range(13): #get metadata
    print("{} - {}".format(i, MEDIA.get_meta(i)))

listplayer.pause()
print("pauza")
time.sleep(10)
listplayer.play()
print("play")
time.sleep(10)
listplayer.next()
print("next")
time.sleep(10)
listplayer.previous()
print("previous")
time.sleep(10)
listplayer.stop()
listplayer.play()
print("stopplay")
time.sleep(10)

I was trying to do something like they did here

1

There are 1 best solutions below

0
Trybulion On

I made it work. Next to add is button control, oled display, duration of song (and current state), and last but not least ability to play whatever song without iterating (eg song 6 from start)

import vlc #play music
import time #control time
import discid #read discid
import musicbrainzngs #fetch data

songnumber = 0
track_list = []

def fetchdata():
    global track_list
    musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "mail")
    disc = discid.read()#id read
    try:
        result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"])
    except musicbrainzngs.ResponseError:
        print("disc not found or bad response")
    else: #Artist and album info
        if result.get("disc"):
            print("artist:\t%s" %
                result["disc"]["release-list"][0]["artist-credit-phrase"])
            print("title:\t%s" % result["disc"]["release-list"][0]["title"])
        elif result.get("cdstub"):
            print("artist:\t" % result["cdstub"]["artist"])
            print("title:\t" % result["cdstub"]["title"])
        release = result["disc"]["release-list"][0] #tracklist
        medium = release["medium-list"][0]
        track_list = medium["track-list"] #print(type(track_list)) #list[][][]
    

fetchdata()

print('\n')

instance = vlc.Instance()
player = instance.media_player_new()
medialist = instance.media_list_new()
listplayer = instance.media_list_player_new()
listplayer.set_media_player(player) #idk what happens here
medialist.add_media("cdda:///dev/cdrom")
listplayer.set_media_list(medialist)
print("Now playing: " , track_list[songnumber]["recording"]["title"])
listplayer.play()

while True:
    dump = input()
    match dump:
        case "next":
            listplayer.next()
            songnumber+=1
            print("Now playing: " , track_list[songnumber]["recording"]["title"])
        case "prev":
            listplayer.previous()
            songnumber-=1
            print("Now playing: " , track_list[songnumber]["recording"]["title"])
        case "pause":
            listplayer.pause()
        case "play":
            listplayer.play()
        case "stop":
            listplayer.stop()
        case "exit":
            break
        case _:
            print("wrong command")