python-can';我不能让音频播放器工作

python-can';我不能让音频播放器工作,python,python-3.x,Python,Python 3.x,一切正常,除了第一首歌结束后下一首歌不播放 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.choic

一切正常,除了第一首歌结束后下一首歌不播放

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()
导入操作系统,随机
从pygame导入混合器
从pynput导入键盘
启动=0
暂停=0
体积=0.5
def选择器():
全球创业
全球体积
启动+=1
如果启动>1:
ThisSong=random.choice(os.listdir(“C:\\Users\\\…\\Music”))
NextSong=random.choice(os.listdir(“C:\\Users\\…\\Music”))
这首歌=下一首歌
如果这首歌下声:
mixer.init()
mixer.music.load(“C:\\Users\\…\\music”+这首歌)
混音器。音乐。播放(0)
混音器。音乐。设置音量(音量)
当混音器。音乐。忙碌()
def on_按(键):
全局暂停
全球体积
如果key==keyboard.KeyCode(char='-'):
体积-=0.1
如果体积<0.1:
体积=0.1
混音器。音乐。设置音量(音量)
如果key==keyboard.KeyCode(char='='):
体积+=0.1
如果体积>1:
体积=1
混音器。音乐。设置音量(音量)
如果key==keyboard.KeyCode(char='['):
暂停+=1
如果pause==1:
mixer.music.pause()
暂停=2
如果暂停=3:
混音器。音乐。取消暂停()
暂停=0
使用keyboard.Listener(on_press=on_press)作为侦听器:Listener.join()
其他:
选择器()
其他:
通过
选择器()
选择器()

我无法让它工作,我对python非常陌生,所以我可能错过了一些东西
在开始之前很明显:Thx@JGreenwell用于复制代码

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

错误的事情
  • 拥有所有ThisSong和NextSong内容:当您重新启动
    Picker()
    时,它将不会被保存。只需拥有ThisSong,或者将ThisSong和NextSong分配与音量和暂停变量放在一起:

  • pause变量应为布尔值(
    True
    /
    False
    ),暂停代码应如下所示:
  • 此外,它最好被称为
    paused


  • 按下键,侦听器声明应该在while循环之外,否则每次循环时它们都会被声明。然后你应该
    导入时间
    并将
    时间。sleep(500)
    或类似的东西放在while循环中,这样它就不会检查每一秒的分数

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

    print(1)
    if something:
         print(2)
    etc...
    
    看看它在哪里阻塞


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

    有效解决方案,以防将来有人和我有相同的问题:)


    请将您的代码作为问题中的代码发布,而不是作为缩小屏幕截图的场外链接。请阅读以下内容:和。感谢您的回答!另外,感谢JGreenwell编写我的代码,它昨晚对我不起作用,这就是我发布屏幕截图的原因
    pause = not pause
    if pause:
        # pause
    else:
        # unpause
    
    print(1)
    if something:
         print(2)
    etc...
    
    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()