我想构建一个小型 CD 播放器,配有普通 PC USB CD 播放器、Rpi 3b+、dac、oled 屏幕和按钮。目前我正在研究软件,因为我是 python 新手(我之前只使用过 c++),所以我正在考虑使用什么库。目前我坚持使用vlc。我找到了如何让 CD 播放工作here,但我还想获得元数据(标题等),就像桌面版本中的那样。我怎样才能实现它?
我当前的测试代码:
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)
我试图做一些像他们一样的事情这里
我成功了。接下来要添加的是按钮控制、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")