[英]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.