Как заставить Pygame воспроизвести следующий звук и включить его? - PullRequest
1 голос
/ 05 марта 2020

Я работаю над кодом, который должен быть генератором случайных шумов и имеет 3 основные функции - бесконечное воспроизведение, остановка и выход. Проблема начинается, когда дело доходит до воспроизведения следующего звука. Я пытался использовать pygame.mixer.music.queue(), но, похоже, это не сработало. С использованием pygame.mixer.music.set_endevent() после нажатия «PLAY» я не смог использовать другие функции. Теперь мой код выглядит следующим образом: он правильно воспроизводит следующий шум, но проблема в том, что нажатие кнопки «STOP» не останавливает его воспроизведение, а начинает воспроизводить другой шум. Можете ли вы помочь мне исправить это?

import os
import pygame
from tkinter import *
import random
import sys

playlista = []
pygame.init()

def start_noise(event):
    directory = "C:/Users/directory/with/noises"
    os.chdir(directory)
    for files in os.listdir(directory):
        if files.endswith(".ogg"):
            playlista.append(files)

    pygame.mixer.init()
    next_noise = random.choice(playlista)
    pygame.mixer.music.load(next_noise)
    pygame.mixer.music.play()
    different_noise()


def different_noise():
    pos = pygame.mixer.music.get_pos()
    if int(pos) == -1:
        next_noise2 = random.choice(playlista)
        pygame.mixer.music.load(next_noise2)
        pygame.mixer.music.play()
    root.after(1, different_noise)


def stop_noise(event):
    pygame.mixer.music.stop()


def exit_noise(event):
    sys.exit()


root = Tk()

playbutton = Button(root,text = "PLAY")
playbutton.pack()

stopbutton = Button(root,text = "STOP")
stopbutton.pack()

exitbutton = Button(root, text="EXIT")
exitbutton.pack()

playbutton.bind("<Button-1>",start_noise)
stopbutton.bind("<Button-1>",stop_noise)
exitbutton.bind("<Button-1>",exit_noise)

root.minsize(200,80)
root.mainloop()
...