Python vlc CD 获取元数据

问题描述 投票:0回答:1

我想构建一个小型 CD 播放器,配有普通 PC USB CD 播放器、Rpi 3b+、dac、oled 屏幕和按钮。目前我正在研究软件,因为我是 python 新手(我之前只使用过 c++),所以我正在考虑使用什么库。目前我坚持使用vlc。我找到了如何让 CD 播放工作here,但我还想获得元数据(标题等),就像桌面版本中的那样SS。我怎样才能实现它?

我当前的测试代码:

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)

我试图做一些像他们一样的事情这里

python vlc cd
1个回答
0
投票

我成功了。接下来要添加的是按钮控制、oled 显示屏、歌曲持续时间(和当前状态),以及最后但并非最不重要的无需迭代即可播放任何歌曲的能力(例如从头开始的第 6 首歌曲)

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")
© www.soinside.com 2019 - 2024. All rights reserved.