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

问题描述

我很想每天在同一时间获取在我的 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,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,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")

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...