无法让音频播放器工作



除了第一首歌曲完成后下一首歌曲不播放外,一切正常。

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 很陌生,所以我可能错过了一些东西 明显

在开始之前:感谢@JGreenwell复制代码。

好的,首先,我将帮助您清理代码。

错了的事情

  1. 拥有所有这首歌和下一首歌的东西:当你重新启动Picker()时它不会被保存。要么只拥有 ThisSong,要么将 ThisSong 和 NextSong 赋值与音量和暂停变量一起放置:

.

pause = 0 # this is a problem! Next point
volume = 0.5
ThisSong = random.choice(...)
NextSong = random.choice(...)

  1. 暂停变量应该是一个布尔值(True/False(,暂停代码应该是这样的:

.

pause = not pause
if pause:
# pause
else:
# unpause

此外,理想情况下,它被称为paused


  1. on_press和侦听器声明应该在 while 循环之外,否则它们只会在每次循环时不断声明。然后你应该import time并将time.sleep(500)或类似的东西放在while循环中,这样它就不会检查每一秒。

至于下一首歌没有播放,我真的不知道,但我建议在程序运行后在 shell 中输入Picker()(python -i script.py从 CMD 中,IDLE 默认将您留在 shell 中(。我还建议真正遵循建议#3,因为它们在循环中可能会破坏循环并阻止其完成。最重要的是,我会要求您通过在代码的每个步骤中添加 print 来调试代码:

print(1)
if something:
print(2)
etc...

并查看它阻挡的地方

PS:随机点是因为列表中不能有代码,所以我不得不退出列表。

工作解决方案,以防将来其他人遇到与我相同的问题:)

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()

最新更新