繁体   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