python-无法使音频播放器正常工作

时间:2018-08-21 22:55:26

标签: 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.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()

screenshot of code

我无法使用它,我是python的新手,所以我可能缺少了一些东西 明显

2 个答案:

答案 0 :(得分:0)

开始之前:Thx @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. pause变量应为布尔值(True / False),暂停代码应如下所示:

pause = not pause
if pause:
    # pause
else:
    # unpause

此外,理想情况下将其称为paused


  1. on_press和Listener声明应该在while循环之外,因为否则它们只会在每次循环时都被声明。然后,您应该import time并将time.sleep(500)或类似的内容放入while循环中,以免检查每一分之一秒。

关于下一首未播放的歌曲,我真的不知道,但是我建议在程序运行后在外壳程序中输入Picker()(来自CMD的python -i script.py外壳)。我还建议确实遵循建议3,因为将其放入循环中可能会破坏循环并使其停止完成。最重要的是,我会要求您通过在代码的每一步中添加打印来调试代码:

print(1)
if something:
     print(2)
etc...

看看它在哪里阻塞

P.S .:随机点是因为列表中没有代码,所以我不得不退出列表。

答案 1 :(得分:0)

有效的解决方案,以防将来其他人遇到与我相同的问题:)

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()