除了下一首歌曲播放完后,下一首歌曲都不会播放,一切正常。
import os, random
from pygame import mixer
from pynput import keyboard
startup = 0
pause = 0
volume = 0.5
def Picker():
global startup
global volume
startup += 1
if startup > 1:
ThisSong = random.choice(os.listdir("C:\\Users\\...\\Music"))
NextSong = random.choice(os.listdir("C:\\Users\\...\\Music"))
ThisSong = NextSong
if ThisSong != NextSong:
mixer.init()
mixer.music.load("C:\\Users\\...\\Music" + ThisSong)
mixer.music.play(0)
mixer.music.set_volume(volume)
while mixer.music.get_busy():
def on_press(key):
global pause
global volume
if key == keyboard.KeyCode(char='-'):
volume -= 0.1
if volume < 0.1:
volume = 0.1
mixer.music.set_volume(volume)
if key == keyboard.KeyCode(char='='):
volume += 0.1
if volume > 1:
volume = 1
mixer.music.set_volume(volume)
if key == keyboard.KeyCode(char='['):
pause += 1
if pause == 1:
mixer.music.pause()
pause = 2
if pause == 3:
mixer.music.unpause()
pause = 0
with keyboard.Listener(on_press=on_press) as listener: listener.join()
else:
Picker()
else:
pass
Picker()
Picker()
我无法使用它,我是python的新手,所以我可能缺少了一些东西 明显
答案 0 :(得分:0)
开始之前:Thx @JGreenwell复制代码。
好的,首先,我将帮助您清除代码。
Picker()
不会保存它。要么只有ThisSong,要么将ThisSong和NextSong分配与volume和pause变量一起放置:。
pause = 0 # this is a problem! Next point
volume = 0.5
ThisSong = random.choice(...)
NextSong = random.choice(...)
True
/ False
),暂停代码应如下所示:。
pause = not pause
if pause:
# pause
else:
# unpause
此外,理想情况下将其称为paused
on_press
和Listener声明应该在while循环之外,因为否则它们只会在每次循环时都被声明。然后,您应该import time
并将time.sleep(500)
或类似的内容放入while循环中,以免检查每一分之一秒。关于下一首未播放的歌曲,我真的不知道,但是我建议在程序运行后在外壳程序中输入Picker()
(来自CMD的python -i script.py
外壳)。我还建议确实遵循建议3,因为将其放入循环中可能会破坏循环并使其停止完成。最重要的是,我会要求您通过在代码的每一步中添加打印来调试代码:
print(1)
if something:
print(2)
etc...
看看它在哪里阻塞
P.S .:随机点是因为列表中没有代码,所以我不得不退出列表。
答案 1 :(得分:0)
有效的解决方案,以防将来其他人遇到与我相同的问题:)
from pygame import mixer
from pynput import keyboard
import threading
import random
import os
paused = 0
def player():
song = random.choice(os.listdir("C:\\users\\...\\desktop\\music"))
mixer.init()
mixer.music.load("C:\\users\\...\\desktop\\music\\" + song)
mixer.music.play(0)
while mixer.music.get_busy():
pass
else:
player()
def main():
t = threading.Thread(target = player, name = 'thread1', args = ())
t.start()
main()
def on_press(key):
global paused
if key == keyboard.KeyCode(char='['):
paused = not paused
if paused:
mixer.music.pause()
else:
mixer.music.unpause()
with keyboard.Listener(on_press=on_press) as listener: listener.join()