使用vlc播放RaspberryPi音频的python脚本



我每天都在同一时间获取RaspberryPi上运行的歌曲列表。为此,我编写了一个python脚本,并计划将其作为cronjob运行。

我写的剧本在下面。

import vlc
import glob
import time
base_folder = '/home/pi/Music/'

def play_song(song):
player = vlc.MediaPlayer(song)
player.play()

def add_media(player, media_list, playlist):
for song in playlist:
print('sing " {0}'.format(song))
media = player.media_new(song)    
media_list.add_media(media)

media_player.set_media_list(media_list)

playlist = glob.glob(base_folder + "/" + "*.mp3")
media_player = vlc.MediaListPlayer()
player = vlc.Instance()    
media_list = vlc.MediaList()
add_media(player, media_list, playlist)

我对上面的程序有一个问题。

当我从Thonny运行python程序时,它是RaspberryPi的默认python IDE,它可以工作。(即播放歌曲(。然而,当我以的身份从命令行运行时

python3 audioplayer.py

它在不播放歌曲的情况下退出。我如何让它在从命令行运行时播放歌曲。

您发布的脚本中似乎缺少一些代码,即play命令。

我怀疑IDE保持vlc的主循环打开,因此它可以工作
但是,在命令行中,没有循环,这正是您所缺少的。

尝试以下操作:

import vlc
import glob
import time
base_folder = '/home/rolf'
# vlc State 0: Nowt, 1 Opening, 2 Buffering, 3 Playing, 4 Paused, 5 Stopped, 6 Ended, 7 Error
playing = set([1,2,3,4])
def add_media(inst, media_list, playlist):
for song in playlist:
print('Loading: - {0}'.format(song))
media = inst.media_new(song)    
media_list.add_media(media)

playlist = glob.glob(base_folder + "/" + "*.mp3")
playlist = sorted(playlist)
#playlist = ['./2005.mp3', './vp1.mp3']
media_player = vlc.MediaListPlayer()
inst = vlc.Instance('--no-xlib --quiet ') 
media_list = vlc.MediaList()
add_media(inst, media_list, playlist)
media_player.set_media_list(media_list)
media_player.play()
time.sleep(0.1)
current = ""
idx = 1
player = media_player.get_media_player()
while True:
state = player.get_state()
if state.value not in playing:
break
title = player.get_media().get_mrl()
if title != current:
print("nPlaying - {0}t{1} of {2}".format(str(title), idx, len(playlist)))
current = title
idx += 1
time.sleep(1.0)
print("nPlaylist Finished")

最新更新