Python VLC 仅适用于 python shell

问题描述

我想做一个音乐播放器,我正在通过 vlc 模块播放音频文件。 我用这个代码来播放文件

import vlc

p = vlc.MediaPlayer("music/song.mp3")
p.play()

在 python shell 中,它工作正常并播放文件。 如果我尝试使用一个文件并运行它,它只会退出而不播放任何内容

解决方法

play() 开始在单独的线程中播放音乐,因此在主线程中您可以运行其他代码 - 即。您可以创建带有按钮的 GUI 来控制音乐,或为该音乐显示动画。但是,如果您不运行其他代码(例如 input()),则它会结束脚本并结束 Python 并停止播放音乐的线程。

您必须在主线程中运行一些代码才能继续运行 Python,然后在线程中播放音乐。

它甚至可以是 while True: pass 而不是 input()

在示例中,我使用 p.is_playing() 运行 while-loop 直到它结束音乐。

import vlc
import time

p = vlc.MediaPlayer("music/song.mp3")
p.play()

print('is_playing:',p.is_playing())  # 0 = False

time.sleep(0.5)  # sleep because it needs time to start playing

print('is_playing:',p.is_playing())  # 1 = True

while p.is_playing():
    time.sleep(0.5)  # sleep to use less CPU

Python shell 中,您始终运行 Python,因此它可以始终运行带有音乐的线程。


编辑:

使用 tkinter 显示带有按钮 Exit 的窗口的示例。因为窗口是一直显示的所以分开的线程可以一直播放音乐。

import vlc
import tkinter as tk

p = vlc.MediaPlayer("music/song.mp3")
p.play()

def on_click():
    p.stop()   # stop music
    root.destroy()  # close tkinter window
        
root = tk.Tk()

button = tk.Button(root,text="Exit",command=on_click)
button.pack()

root.mainloop()

使用 tkinter 您可以构建播放器。


vlc 有几个更复杂的例子,如何在不同的 GUI 中使用 vlc

https://git.videolan.org/?p=vlc/bindings/python.git;a=tree;f=examples;hb=HEAD


函数 is_playing() 我在 MediaPlayer 的文档中找到

相关问答

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