簡體   English   中英

python - 無法讓音頻播放器工作

[英]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 復制代碼。

好的,首先,我會幫你清理你的代碼。

錯誤的事情

  1. 擁有所有 ThisSong 和 NextSong 東西:當您重新啟動Picker()時,它不會被保存。 要么只擁有 ThisSong,要么將 ThisSong 和 NextSong 賦值與 volume 和 pause 變量一起放置:

.

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和 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM