[英]python - can't get audio player working
一切正常,除了下一首歌曲在第一首歌曲完成后不播放。
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 复制代码。
好的,首先,我会帮你清理你的代码。
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 循环中,这样它就不会检查每一秒。 至于下一首歌没有播放,我真的不知道,但我建议在程序运行后在 shell 中输入Picker()
(来自 CMD 的python -i script.py
,IDLE 默认将您留在 shell 中)。 我还建议真正遵循建议#3,因为让它们进入循环可能会破坏循环并阻止它完成。 最重要的是,我会要求您通过在代码的每个步骤中添加打印来调试代码:
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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.