问题描述
我想做一个音乐播放器,我正在通过 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 的文档中找到