Как автоматически воспроизвести следующую песню в списке воспроизведения, если пользователь не нажал ни одной клавиши? - PullRequest
2 голосов
/ 04 апреля 2019

Я хочу дать пользователю возможность воспроизводить, приостанавливать, воспроизводить следующую или предыдущую песню. Если пользователь ничего не нажимает, следующая песня в списке должна воспроизводиться автоматически. В настоящее время программа останавливается для ввода от пользователя.

Я попытался воспроизвести песню в другом потоке и жду, когда пользователь введет выбор в основной теме. Но проблема в том, что основной поток ожидает ввода от пользователя перед воспроизведением следующей песни.

def music(file):
    pygame.mixer.music.load(file)
    pygame.mixer.music.play()
    try:
        while pygame.mixer.music.get_busy():
            pygame.time.Clock().tick(0)
    except:
        pass

def pause():
    print(file + " paused")
    pygame.mixer.music.pause()
    global set
    set = 1

def playsong():
    global set
    global t1
    print ("Playing song named : " + file)
    if file != "" and set==0:
        t1 = threading.Thread(target = music ,args=(file,))
        t1.setName("audio bajao")
        t1.start()
ch = 1
song_list = ["song1.mp3","song2.mp3"]
while((i < len(song_list)) and (ch != 5) ):
    ch = input("Enter choice ")
    file = song_list[i]
    if(ch == 1):
        playsong()
    elif(ch == 2):
        ch = 1
        pause()
    elif(ch == 3):
        #play previous song
        ch = 1
        i -= 2
    elif (ch == 4):
        #play next song
        ch = 1
    elif (ch == 5):
        break
    i += 1

Я хочу, чтобы программа воспроизводила следующую песню из списка, когда песня заканчивается, если пользователь не нажал ни одной клавиши. Не следует снова просить пользователя нажать клавишу воспроизведения, чтобы воспроизвести следующую песню.

1 Ответ

1 голос
/ 04 апреля 2019

Вы можете попробовать pygame.mixer.get_busy()

Чтобы реализовать это, добавьте некоторую переменную таймера, я лично предпочитаю счетчики тиков, так что ...

inactive_ticks = 0

После этого в вашемцикл основного события, используйте pygame.mixer.get_busy(), чтобы проверить, воспроизводится ли музыка или нет, затем ...

if not pygame.mixer.get_busy():
    inactive_ticks += 1

    if inactive_ticks == 100:
        # Play the next song
        inactive_ticks = 0

Это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...