我正在开发 Raspberry Pi 4B,我正在创建一个音乐播放器来替换自动点唱机的内部。我正在尝试使用组合键将音乐输入 VLC。在这种情况下,选择“A1”将转到作为“/media/usb1”安装到“A1”文件夹的 USB 记忆棒,将找到的任何媒体添加到 media_list_player 正在播放的播放列表中。这按设计工作。
当我试图清除媒体列表以重新开始时,我的问题就出现了。我需要使用相同的 media_list_player 名称,但是一旦我创建了一个新的媒体列表,我就无法重新启动播放器。
这是我的代码片段:
#!/usr/bin/env python3
#
import os, sys, csv, vlc, time, serial, configparser, termios, tty, subprocess
#
# Get Defaults
#
SoundBeforeSong = None
SoundAfterSong = None
TrackDelay = None
PlayHistory = None
USBDrive = "/media/usb1/"
#
# Get keyboard input
#
def getch(): # getchar(), getc(stdin) #PYCHOK flake
fd = sys.stdin.fileno()
old = termios.tcgetattr(fd)
try:
tty.setraw(fd)
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old)
return ch
#
# Adding to playlist - Returns directory contents and adds to playlist
#
def addplaylist(track):
list = None
if os.path.isdir(os.path.join(USBDrive, track)):
files = [f for f in os.listdir(os.path.join(USBDrive, track)) if os.path.isfile(os.path.join(USBDrive, track, f))]
for f in files:
if list is None:
if SoundBeforeSong:
list = SoundBeforeSong + ";" + os.path.join(USBDrive, track, f)
else:
list = os.path.join(USBDrive, track, f)
if SoundAfterSong:
list = list + ";" + SoundAfterSong
else:
if SoundBeforeSong:
list = list + ";" + SoundBeforeSong + ";" + os.path.join(USBDrive, track, f)
else:
list = list + ";" + os.path.join(USBDrive, track, f)
if SoundAfterSong:
list = list + ";" + SoundAfterSong
else:
print ("Error(3) - Selection folder not present")
if list is None:
print ("Error(4) - Selection has no media")
else:
if ";" in list:
list = list.split(";")
for song in list:
media_list.add_media(song)
else:
media_list.add_media(list)
print("add media play")
if not media_player.is_playing():
media_player.play()
return
#
# Define keyboard actions
#
def Jukebox():
global Action, Bluetooth
Sel_char = None
while True:
key = getch()
try:
Sel_char = int(key)
except:
try:
Sel_char = key.upper()
except:
Sel_char = None
if Sel_char == "Z":
return False
elif Sel_char == "W":
if not media_player.is_playing():
media_player.play()
if media_player.is_playing():
media_player.stop()
media_list = player.media_list_new() # creating a new media list
media_player.set_media_list(media_list) # setting media list to the media player
elif type(Sel_char) == str:
Action = Sel_char
elif type(Sel_char) == int:
Action = Action + str(Sel_char)
addplaylist(Action)
else:
pass
#
# Setting Up Media Player
#
# creating Instance class object
player = vlc.Instance('--no-xlib --quiet ') # no-xlib for linux and quiet don't complain
media_player = vlc.MediaListPlayer() # creating a media player object
media_list = player.media_list_new() # creating a new media list
media_player.set_media_list(media_list) # setting media list to the media player
new = player.media_player_new() # new media player instance
media_player.set_media_player(new) # setting media player to it
media_events = new.event_manager() # setting event handler
#
# Read keyboard input
#
print("Ready...")
Jukebox()
#
# Program is shutting down
#
sys.exit()
对我来说,我按下“A1”,音乐按预期开始。我按了“W”,它按预期停止了。在窗帘后面,我还通过创建一个新的空白列表来清除媒体列表。当我清除列表时,再次点击“W”没有任何作用,所以这是有道理的。我按“A1”并希望再次听到音乐,但我没有。我看到“添加媒体播放”,但没有声音。如何重新启动媒体列表播放器?或者可能更合适的问题是,我如何清除媒体列表(通过从列表中创建新媒体或删除媒体)并允许使用相同的引用来使用媒体播放器?